fix(telegram): sanitize outbound markdown for legacy parse mode
The @chat-adapter/telegram adapter hardcodes parse_mode=Markdown (legacy) but its converter emits CommonMark. Messages containing **bold** or list bullets that round-trip to `*` produce "can't parse entities" errors and get dropped after retries. Add an opt-in transformOutboundText hook on the chat-sdk bridge and wire a Telegram-specific sanitizer that downgrades **bold** to *bold*, rewrites dash/plus list bullets to a Unicode bullet so the adapter's re-stringify doesn't inject stray `*`, and strips unbalanced delimiters or brackets. Only Telegram opts in; other channels are unaffected. Workaround until upstream (vercel/chat) ships mode-aware conversion — PR #367 adds a parseMode knob but not the converter fix. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -9,6 +9,7 @@ import { readEnvFile } from '../env.js';
|
||||
import { log } from '../log.js';
|
||||
import { createMessagingGroup, getMessagingGroupByPlatform, updateMessagingGroup } from '../db/messaging-groups.js';
|
||||
import { createChatSdkBridge, type ReplyContext } from './chat-sdk-bridge.js';
|
||||
import { sanitizeTelegramLegacyMarkdown } from './telegram-markdown-sanitize.js';
|
||||
import { registerChannelAdapter } from './channel-registry.js';
|
||||
import type { ChannelAdapter, ChannelSetup, InboundMessage } from './adapter.js';
|
||||
import { tryConsume } from './telegram-pairing.js';
|
||||
@@ -155,6 +156,7 @@ registerChannelAdapter('telegram', {
|
||||
concurrency: 'concurrent',
|
||||
extractReplyContext,
|
||||
supportsThreads: false,
|
||||
transformOutboundText: sanitizeTelegramLegacyMarkdown,
|
||||
});
|
||||
|
||||
const botUsernamePromise = fetchBotUsername(token);
|
||||
|
||||
Reference in New Issue
Block a user