fix(telegram): notify users when agent returns empty response

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
kiranjd 2026-01-27 13:33:41 +05:30 committed by Ayaan Zaidi
parent 34291321b4
commit a2d06e75b0
3 changed files with 19 additions and 2 deletions

View File

@ -228,6 +228,7 @@ export const dispatchTelegramMessage = async ({
onVoiceRecording: sendRecordVoice,
linkPreview: telegramCfg.linkPreview,
replyQuoteText,
notifyEmptyResponse: info.kind === "final",
});
},
onError: (err, info) => {

View File

@ -488,7 +488,7 @@ export const registerTelegramNativeCommands = ({
cfg,
dispatcherOptions: {
responsePrefix: resolveEffectiveMessagesConfig(cfg, route.agentId).responsePrefix,
deliver: async (payload) => {
deliver: async (payload, info) => {
await deliverReplies({
replies: [payload],
chatId: String(chatId),
@ -501,6 +501,7 @@ export const registerTelegramNativeCommands = ({
tableMode,
chunkMode,
linkPreview: telegramCfg.linkPreview,
notifyEmptyResponse: info.kind === "final",
});
},
onError: (err, info) => {

View File

@ -44,7 +44,9 @@ export async function deliverReplies(params: {
linkPreview?: boolean;
/** Optional quote text for Telegram reply_parameters. */
replyQuoteText?: string;
}) {
/** If true, send a fallback message when all replies are empty. Default: false */
notifyEmptyResponse?: boolean;
}): Promise<{ delivered: boolean }> {
const {
replies,
chatId,
@ -58,6 +60,7 @@ export async function deliverReplies(params: {
} = params;
const chunkMode = params.chunkMode ?? "length";
let hasReplied = false;
let skippedEmpty = 0;
const chunkText = (markdown: string) => {
const markdownChunks =
chunkMode === "newline"
@ -85,6 +88,7 @@ export async function deliverReplies(params: {
continue;
}
runtime.error?.(danger("reply missing text/media"));
skippedEmpty++;
continue;
}
const replyToId = replyToMode === "off" ? undefined : resolveTelegramReplyId(reply.replyToId);
@ -268,6 +272,17 @@ export async function deliverReplies(params: {
}
}
}
// If all replies were empty and notifyEmptyResponse is enabled, send a fallback message
if (!hasReplied && skippedEmpty > 0 && params.notifyEmptyResponse) {
const fallbackText = "No response generated. Please try again.";
await sendTelegramText(bot, chatId, fallbackText, runtime, {
messageThreadId,
});
hasReplied = true;
}
return { delivered: hasReplied };
}
export async function resolveMedia(