diff --git a/extensions/telegram/src/outbound-adapter.test.ts b/extensions/telegram/src/outbound-adapter.test.ts
index 2b71deeb5a6..849385754da 100644
--- a/extensions/telegram/src/outbound-adapter.test.ts
+++ b/extensions/telegram/src/outbound-adapter.test.ts
@@ -167,6 +167,25 @@ describe("telegramOutbound", () => {
expect(result).toEqual({ channel: "telegram", messageId: "tg-silent", chatId: "12345" });
});
+ it("does not plain-text sanitize Telegram HTML before durable delivery", async () => {
+ sendMessageTelegramMock.mockResolvedValueOnce({ messageId: "tg-html", chatId: "12345" });
+
+ await telegramOutbound.sendText!({
+ cfg: {} as never,
+ to: "12345",
+ text: "Morning oauth2",
+ deps: { sendTelegram: sendMessageTelegramMock },
+ });
+
+ const options = callOptionsAt(
+ sendMessageTelegramMock,
+ 0,
+ "12345",
+ "Morning oauth2",
+ );
+ expect(options.textMode).toBeUndefined();
+ });
+
it("forwards audioAsVoice payload media to Telegram voice sends", async () => {
sendMessageTelegramMock.mockResolvedValueOnce({ messageId: "tg-voice", chatId: "12345" });
diff --git a/extensions/telegram/src/outbound-adapter.ts b/extensions/telegram/src/outbound-adapter.ts
index a15e07a47f3..e56a38bddd8 100644
--- a/extensions/telegram/src/outbound-adapter.ts
+++ b/extensions/telegram/src/outbound-adapter.ts
@@ -7,7 +7,6 @@ import {
presentationToInteractiveReply,
renderMessagePresentationFallbackText,
} from "openclaw/plugin-sdk/interactive-runtime";
-import { sanitizeForPlainText } from "openclaw/plugin-sdk/outbound-runtime";
import type { OutboundDeliveryFormattingOptions } from "openclaw/plugin-sdk/outbound-runtime";
import {
resolveOutboundSendDep,
@@ -165,8 +164,6 @@ export function createTelegramOutboundAdapter(
chunkedTextFormatting: { parseMode: "HTML" },
extractMarkdownImages: true,
textChunkLimit: TELEGRAM_TEXT_CHUNK_LIMIT,
- sanitizeText: ({ text }) => sanitizeForPlainText(text),
- shouldSkipPlainTextSanitization: ({ payload }) => Boolean(payload.channelData),
shouldSuppressLocalPayloadPrompt: options.shouldSuppressLocalPayloadPrompt,
beforeDeliverPayload: options.beforeDeliverPayload,
shouldTreatDeliveredTextAsVisible: options.shouldTreatDeliveredTextAsVisible,
diff --git a/extensions/telegram/src/telegram-outbound.test.ts b/extensions/telegram/src/telegram-outbound.test.ts
index 1a243e88ada..c14acd29076 100644
--- a/extensions/telegram/src/telegram-outbound.test.ts
+++ b/extensions/telegram/src/telegram-outbound.test.ts
@@ -14,6 +14,7 @@ describe("telegramPlugin outbound", () => {
expect(telegramOutbound.chunkerMode).toBe("markdown");
expect(telegramOutbound.chunkedTextFormatting).toEqual({ parseMode: "HTML" });
expect(telegramOutbound.textChunkLimit).toBe(4000);
+ expect(telegramOutbound.sanitizeText).toBeUndefined();
expect(telegramOutbound.pollMaxOptions).toBe(10);
});