merlyn/server/jobs/handle-telegram-chat.js
Sean Hatfield 192ca411f2
Telegram bot connector (#5190)
* wip telegram bot connector

* encrypt bot token, reorg telegram bot modules, secure pairing codes

* offload telegram chat to background worker, add @agent support with chart png rendering, reconnect ui

* refactor telegram bot settings page into subcomponents

* response.locals for mum, telemetry for connecting to telegram

* simplify telegram command registration

* improve telegram bot ux: rework switch/history/resume commands

* add voice, photo, and TTS support to telegram bot with long message handling

* lint

* rename external_connectors to external_communication_connectors, add voice response mode, persist chat workspace/thread selection

* lint

* fix telegram bot connect/disconnect bugs, kill telegram bot on multiuser mode enable

* add english translations

* fix qr code in light mode

* repatch migration

* WIP checkpoint

* pipeline overhaul for using response obj

* format functions

* fix comment block

* remove conditional dumpENV + lint

* remove .end() from sendStatus calls

* patch broken streaming where streaming only first chunk

* refactor

* use Ephemeral handler now

* show metrics and citations in real GUI

* bugfixes

* prevent MuM persistence, UI cleanup, styling for status

* add new workspace flow in UI
Add thread chat count
fix 69 byte payload callback limit bug

* handle pagination for workspaces, threads, and models

* modularize commands and navigation

* add /proof support for citation recall

* handle backlog message spam

* support abort of response streams

* code cleanup

* spam prevention

* fix translations, update voice typing indicator, fix token bug

* frontend refactor, update tips on /status and voice response improvements

* collapse agent though blocks

* support images

* Fix mime issues with audio from other devices

* fix config issue post server stop

* persist image on agentic chats

* 5189 i18n (#5245)

* i18n translations
connect #5189

* prune translations

* fix errors

* fix translation gaps

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>
2026-03-23 15:10:21 -07:00

65 lines
1.7 KiB
JavaScript

// Suppress deprecated content-type warning when sending files via the Telegram bot API.
// https://github.com/yagop/node-telegram-bot-api/blob/master/doc/usage.md#file-options-metadata
process.env.NTBA_FIX_350 = 1;
const TelegramBot = require("node-telegram-bot-api");
const { log, conclude } = require("./helpers/index.js");
const { Workspace } = require("../models/workspace");
const { WorkspaceThread } = require("../models/workspaceThread");
const { streamResponse } = require("../utils/telegramBot/chat/stream");
process.on("message", async (payload) => {
const {
botToken,
chatId,
workspaceSlug,
threadSlug,
message,
attachments = [],
voiceResponse = false,
} = payload;
try {
const bot = new TelegramBot(botToken, { polling: false });
const ctx = {
bot,
log: (text, ...args) =>
log(args.length ? `${text} ${args.join(" ")}` : text),
};
const workspace = await Workspace.get({ slug: workspaceSlug });
if (!workspace) {
await bot.sendMessage(
chatId,
"No workspace configured. Use /switch to select one."
);
conclude();
return;
}
const thread = threadSlug
? await WorkspaceThread.get({ slug: threadSlug })
: null;
await streamResponse({
ctx,
chatId,
workspace,
thread,
message,
attachments,
voiceResponse,
});
} catch (error) {
log(`Telegram chat error: ${error.message}`);
try {
const bot = new TelegramBot(botToken, { polling: false });
await bot.sendMessage(
chatId,
"Sorry, something went wrong. Please try again."
);
} catch {}
} finally {
conclude();
}
});