From 3a6f7a7628609d9da8de746351f4f0e274141c11 Mon Sep 17 00:00:00 2001 From: luyua9 Date: Thu, 21 May 2026 03:06:52 +0800 Subject: [PATCH] fix(telegram-bot): skip empty structured messages (#1857) --- .../bots/telegram/agent/actions/send-message.test.ts | 10 ++++++++++ .../src/bots/telegram/agent/actions/send-message.ts | 7 ++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/services/telegram-bot/src/bots/telegram/agent/actions/send-message.test.ts b/services/telegram-bot/src/bots/telegram/agent/actions/send-message.test.ts index b765d4915..851865c79 100644 --- a/services/telegram-bot/src/bots/telegram/agent/actions/send-message.test.ts +++ b/services/telegram-bot/src/bots/telegram/agent/actions/send-message.test.ts @@ -45,6 +45,16 @@ describe('parseMayStructuredMessage', () => { expect(result).toMatchObject({ messages: [text], reply_to_message_id: undefined }) }) + it('should return null when structured output has an empty messages array', () => { + const result = parseMayStructuredMessage('{"messages":[]}') + expect(result).toBeNull() + }) + + it('should return null when structured output has only blank messages', () => { + const result = parseMayStructuredMessage('{"messages":["", " "]}') + expect(result).toBeNull() + }) + it('should return an array of messages from multi-line elements of input', () => { const result = parseMayStructuredMessage(`{"messages": [ "Hello, diff --git a/services/telegram-bot/src/bots/telegram/agent/actions/send-message.ts b/services/telegram-bot/src/bots/telegram/agent/actions/send-message.ts index 4a943ba44..88e47262f 100644 --- a/services/telegram-bot/src/bots/telegram/agent/actions/send-message.ts +++ b/services/telegram-bot/src/bots/telegram/agent/actions/send-message.ts @@ -26,7 +26,8 @@ export function parseMayStructuredMessage(responseText: string) { logger.withField('text', JSON.stringify(responseText)).withField('result', result).log('Multiple messages detected') const parsedResponse = parse(result[0]) as ({ messages?: unknown, reply_to_message_id?: unknown } | undefined) - const messages = Array.isArray(parsedResponse?.messages) + const hasMessagesArray = Array.isArray(parsedResponse?.messages) + const messages = hasMessagesArray ? parsedResponse.messages.filter((message): message is string => typeof message === 'string' && message.trim() !== '') : [] const replyToMessageId = typeof parsedResponse?.reply_to_message_id === 'string' @@ -37,6 +38,10 @@ export function parseMayStructuredMessage(responseText: string) { return { messages, reply_to_message_id: replyToMessageId } } + if (hasMessagesArray) { + return null + } + return { messages: [responseText], reply_to_message_id: replyToMessageId } }