diff --git a/.changeset/fix-telegram-markdown-parse-mode.md b/.changeset/fix-telegram-markdown-parse-mode.md new file mode 100644 index 00000000..51a3210b --- /dev/null +++ b/.changeset/fix-telegram-markdown-parse-mode.md @@ -0,0 +1,5 @@ +--- +"@chat-adapter/telegram": patch +--- + +Set `parse_mode` to `"Markdown"` when posting messages with a `markdown` field, not only for card messages diff --git a/packages/adapter-telegram/src/index.test.ts b/packages/adapter-telegram/src/index.test.ts index a0d64168..cc5d195f 100644 --- a/packages/adapter-telegram/src/index.test.ts +++ b/packages/adapter-telegram/src/index.test.ts @@ -943,6 +943,38 @@ describe("TelegramAdapter", () => { expect(sendMessageBody.text).toBe("raw id message"); }); + it("sets parse_mode for markdown messages", async () => { + mockFetch + .mockResolvedValueOnce( + telegramOk({ + id: 999, + is_bot: true, + first_name: "Bot", + username: "mybot", + }) + ) + .mockResolvedValueOnce(telegramOk(sampleMessage())); + + const adapter = createTelegramAdapter({ + botToken: "token", + mode: "webhook", + logger: mockLogger, + userName: "mybot", + }); + + await adapter.initialize(createMockChat()); + + await adapter.postMessage("telegram:123", { + markdown: "**bold** and _italic_", + }); + + const sendMessageBody = JSON.parse( + String((mockFetch.mock.calls[1]?.[1] as RequestInit).body) + ) as { parse_mode?: string }; + + expect(sendMessageBody.parse_mode).toBe("Markdown"); + }); + it("posts cards with inline keyboard buttons", async () => { mockFetch .mockResolvedValueOnce( diff --git a/packages/adapter-telegram/src/index.ts b/packages/adapter-telegram/src/index.ts index ee2cdd22..272b2e69 100644 --- a/packages/adapter-telegram/src/index.ts +++ b/packages/adapter-telegram/src/index.ts @@ -556,7 +556,10 @@ export class TelegramAdapter const card = extractCard(message); const replyMarkup = card ? cardToTelegramInlineKeyboard(card) : undefined; - const parseMode = card ? TELEGRAM_MARKDOWN_PARSE_MODE : undefined; + const hasMarkdown = + typeof message === "object" && message !== null && "markdown" in message; + const parseMode = + card || hasMarkdown ? TELEGRAM_MARKDOWN_PARSE_MODE : undefined; const text = this.truncateMessage( convertEmojiPlaceholders( card @@ -642,7 +645,10 @@ export class TelegramAdapter const card = extractCard(message); const replyMarkup = card ? cardToTelegramInlineKeyboard(card) : undefined; - const parseMode = card ? TELEGRAM_MARKDOWN_PARSE_MODE : undefined; + const hasMarkdown = + typeof message === "object" && message !== null && "markdown" in message; + const parseMode = + card || hasMarkdown ? TELEGRAM_MARKDOWN_PARSE_MODE : undefined; const text = this.truncateMessage( convertEmojiPlaceholders( card