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,