diff --git a/extensions/qa-lab/src/live-transports/telegram/telegram-live.runtime.test.ts b/extensions/qa-lab/src/live-transports/telegram/telegram-live.runtime.test.ts index 88e2491511f..cf08c531e13 100644 --- a/extensions/qa-lab/src/live-transports/telegram/telegram-live.runtime.test.ts +++ b/extensions/qa-lab/src/live-transports/telegram/telegram-live.runtime.test.ts @@ -286,6 +286,43 @@ describe("telegram live qa runtime", () => { }); }); + it("normalizes Telegram rich messages as observed text", () => { + expect( + testing.normalizeTelegramObservedMessage({ + update_id: 8, + message: { + message_id: 10, + date: 1_700_000_001, + rich_message: { markdown: "**hello** rich" }, + chat: { id: -100123 }, + from: { + id: 88, + is_bot: true, + username: "sut_bot", + }, + reply_to_message: { message_id: 9 }, + }, + })?.text, + ).toBe("**hello** rich"); + + expect( + testing.normalizeTelegramObservedMessage({ + update_id: 9, + message: { + message_id: 11, + date: 1_700_000_002, + rich_message: { html: "hello rich" }, + chat: { id: -100123 }, + from: { + id: 88, + is_bot: true, + username: "sut_bot", + }, + }, + })?.text, + ).toBe("hello rich"); + }); + it("ignores unrelated sut replies when matching the canary response", () => { expect( testing.classifyCanaryReply({ diff --git a/extensions/qa-lab/src/live-transports/telegram/telegram-live.runtime.ts b/extensions/qa-lab/src/live-transports/telegram/telegram-live.runtime.ts index 237d0fc06a5..98ec600fba9 100644 --- a/extensions/qa-lab/src/live-transports/telegram/telegram-live.runtime.ts +++ b/extensions/qa-lab/src/live-transports/telegram/telegram-live.runtime.ts @@ -203,11 +203,17 @@ type TelegramReplyMarkup = { inline_keyboard?: Array>; }; +type TelegramRichMessage = { + markdown?: string; + html?: string; +}; + type TelegramMessage = { message_id: number; date: number; text?: string; caption?: string; + rich_message?: TelegramRichMessage; reply_markup?: TelegramReplyMarkup; reply_to_message?: { message_id?: number }; from?: { @@ -697,6 +703,16 @@ function detectMediaKinds(message: TelegramMessage) { return kinds; } +function selectTelegramObservedText(message: TelegramMessage) { + return ( + message.text || + message.caption || + message.rich_message?.markdown || + message.rich_message?.html || + "" + ); +} + function normalizeTelegramObservedMessage(update: TelegramUpdate): TelegramObservedMessage | null { const message = update.message ?? update.edited_message; if (!message?.from?.id) { @@ -709,7 +725,7 @@ function normalizeTelegramObservedMessage(update: TelegramUpdate): TelegramObser senderId: message.from.id, senderIsBot: message.from.is_bot === true, senderUsername: message.from.username, - text: message.text ?? message.caption ?? "", + text: selectTelegramObservedText(message), caption: message.caption, replyToMessageId: message.reply_to_message?.message_id, timestamp: message.date * 1000,