From 1b6f2969aab46093bd9ef40564f30d60578f9e8f Mon Sep 17 00:00:00 2001 From: "clawsweeper[bot]" <274271284+clawsweeper[bot]@users.noreply.github.com> Date: Thu, 30 Apr 2026 22:42:54 -0700 Subject: [PATCH] fix(telegram): forward audioAsVoice payloads Co-authored-by: openclaw-clawsweeper[bot] <280122609+openclaw-clawsweeper[bot]@users.noreply.github.com> --- .../telegram/src/outbound-adapter.test.ts | 26 +++++++++++++++++++ extensions/telegram/src/outbound-adapter.ts | 1 + 2 files changed, 27 insertions(+) diff --git a/extensions/telegram/src/outbound-adapter.test.ts b/extensions/telegram/src/outbound-adapter.test.ts index 0641b2129fd..c9649000349 100644 --- a/extensions/telegram/src/outbound-adapter.test.ts +++ b/extensions/telegram/src/outbound-adapter.test.ts @@ -98,6 +98,32 @@ describe("telegramOutbound", () => { expect(result).toEqual({ channel: "telegram", messageId: "tg-2", chatId: "12345" }); }); + it("forwards audioAsVoice payload media to Telegram voice sends", async () => { + sendMessageTelegramMock.mockResolvedValueOnce({ messageId: "tg-voice", chatId: "12345" }); + + const result = await telegramOutbound.sendPayload!({ + cfg: {} as never, + to: "12345", + text: "", + payload: { + text: "voice caption", + mediaUrl: "file:///tmp/note.ogg", + audioAsVoice: true, + }, + deps: { sendTelegram: sendMessageTelegramMock }, + }); + + expect(sendMessageTelegramMock).toHaveBeenCalledWith( + "12345", + "voice caption", + expect.objectContaining({ + mediaUrl: "file:///tmp/note.ogg", + asVoice: true, + }), + ); + expect(result).toEqual({ channel: "telegram", messageId: "tg-voice", chatId: "12345" }); + }); + it("passes delivery pin notify requests to Telegram pinning", async () => { pinMessageTelegramMock.mockResolvedValueOnce({ ok: true, messageId: "tg-1", chatId: "12345" }); diff --git a/extensions/telegram/src/outbound-adapter.ts b/extensions/telegram/src/outbound-adapter.ts index 03e32a888b7..167ee0488b0 100644 --- a/extensions/telegram/src/outbound-adapter.ts +++ b/extensions/telegram/src/outbound-adapter.ts @@ -96,6 +96,7 @@ export async function sendTelegramPayloadMessages(params: { const payloadOpts = { ...params.baseOpts, quoteText, + ...(params.payload.audioAsVoice === true ? { asVoice: true } : {}), }; // Telegram allows reply_markup on media; attach buttons only to the first send.