From 5391f1141e8429ccd84ec67e486499fba0e37c13 Mon Sep 17 00:00:00 2001 From: Nacho Iacovino Date: Thu, 8 Jan 2026 11:13:04 +0000 Subject: [PATCH] fix(cron): parse :topic: suffix for Telegram topic delivery When cron jobs specify a Telegram topic in the 'to' field like '-1003420657307:topic:60', the delivery code now correctly parses this into separate chatId and messageThreadId values. Previously, the entire string was passed as chatId, causing messages to fail delivery to forum topics. --- src/cron/isolated-agent.ts | 32 +++++++++++++++----------------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/src/cron/isolated-agent.ts b/src/cron/isolated-agent.ts index aa803dcac..3488fcd5f 100644 --- a/src/cron/isolated-agent.ts +++ b/src/cron/isolated-agent.ts @@ -46,6 +46,7 @@ import { saveSessionStore, } from "../config/sessions.js"; import { registerAgentRunContext } from "../infra/agent-events.js"; +import { parseTelegramTarget } from "../telegram/targets.js"; import { resolveTelegramToken } from "../telegram/token.js"; import { normalizeE164 } from "../utils.js"; import type { CronJob } from "./types.js"; @@ -487,6 +488,9 @@ export async function runCronIsolatedAgentTurn(params: { summary: "Delivery skipped (no Telegram chatId).", }; } + const telegramTarget = parseTelegramTarget(resolvedDelivery.to); + const chatId = telegramTarget.chatId; + const messageThreadId = telegramTarget.messageThreadId; const textLimit = resolveTextChunkLimit(params.cfg, "telegram"); try { for (const payload of payloads) { @@ -497,29 +501,23 @@ export async function runCronIsolatedAgentTurn(params: { payload.text ?? "", textLimit, )) { - await params.deps.sendMessageTelegram( - resolvedDelivery.to, - chunk, - { - verbose: false, - token: telegramToken || undefined, - }, - ); + await params.deps.sendMessageTelegram(chatId, chunk, { + verbose: false, + token: telegramToken || undefined, + messageThreadId, + }); } } else { let first = true; for (const url of mediaList) { const caption = first ? (payload.text ?? "") : ""; first = false; - await params.deps.sendMessageTelegram( - resolvedDelivery.to, - caption, - { - verbose: false, - mediaUrl: url, - token: telegramToken || undefined, - }, - ); + await params.deps.sendMessageTelegram(chatId, caption, { + verbose: false, + mediaUrl: url, + token: telegramToken || undefined, + messageThreadId, + }); } } }