OpenClawDashboard/bridge/src/routes/chat-mirror.ts

68 lines
No EOL
1.7 KiB
TypeScript

/**
* chat-mirror.ts — Mirror Telegram messages to shared SQLite
*
* This is a simple endpoint that can be called to mirror messages
* from any channel (Telegram, WhatsApp, etc.) into the chat history.
*
* POST /tiger/chat/mirror
* Body: {
* role: "user" | "agent",
* content: "message text",
* source: "telegram" | "whatsapp" | "web",
* sessionId?: "agent:main:main"
* }
*
* Response: { ok: true, id: number }
*/
import { Router, Request, Response } from "express";
import db from "../db.js";
const router = Router();
const DEFAULT_SESSION_ID = "agent:main:main";
const insertMessage = db.prepare(`
INSERT INTO chat_messages (session_id, role, content, meta)
VALUES (?, ?, ?, ?)
`);
// POST /tiger/chat/mirror — store a message from any source
router.post("/", async (req: Request, res: Response) => {
const { role, content, source, sessionId } = req.body;
if (!role || !content) {
return res.status(400).json({
ok: false,
error: "role and content are required"
});
}
if (role !== "user" && role !== "agent" && role !== "system") {
return res.status(400).json({
ok: false,
error: "role must be 'user', 'agent', or 'system'"
});
}
const sid = sessionId || DEFAULT_SESSION_ID;
const meta = JSON.stringify({
source: source || "unknown",
mirrored: true,
timestamp: new Date().toISOString()
});
try {
const info = insertMessage.run(sid, role, content, meta);
res.json({
ok: true,
id: info.lastInsertRowid,
sessionId: sid,
source: source || "unknown"
});
} catch (err: any) {
res.status(500).json({ ok: false, error: err.message });
}
});
export default router;