feat: add message chunking in Telegram Send method
Split HTML content into 4000-char chunks before sending to handle cases where markdown-to-HTML conversion causes messages to exceed Telegram's 4096-character limit. Uses the existing SplitMessage utility which preserves code block integrity across chunk boundaries. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
9c9524f934
commit
a6f4274870
1 changed files with 14 additions and 9 deletions
|
|
@ -175,17 +175,22 @@ func (c *TelegramChannel) Send(ctx context.Context, msg bus.OutboundMessage) err
|
||||||
|
|
||||||
htmlContent := markdownToTelegramHTML(msg.Content)
|
htmlContent := markdownToTelegramHTML(msg.Content)
|
||||||
|
|
||||||
// Typing/placeholder handled by Manager.preSend — just send the message
|
// Split HTML content into chunks that fit within Telegram's message limit.
|
||||||
tgMsg := tu.Message(tu.ID(chatID), htmlContent)
|
// Use 4000 to leave headroom for HTML tag overhead beyond the 4096 limit.
|
||||||
tgMsg.ParseMode = telego.ModeHTML
|
chunks := channels.SplitMessage(htmlContent, 4000)
|
||||||
|
|
||||||
|
for _, chunk := range chunks {
|
||||||
|
tgMsg := tu.Message(tu.ID(chatID), chunk)
|
||||||
|
tgMsg.ParseMode = telego.ModeHTML
|
||||||
|
|
||||||
if _, err = c.bot.SendMessage(ctx, tgMsg); err != nil {
|
|
||||||
logger.ErrorCF("telegram", "HTML parse failed, falling back to plain text", map[string]any{
|
|
||||||
"error": err.Error(),
|
|
||||||
})
|
|
||||||
tgMsg.ParseMode = ""
|
|
||||||
if _, err = c.bot.SendMessage(ctx, tgMsg); err != nil {
|
if _, err = c.bot.SendMessage(ctx, tgMsg); err != nil {
|
||||||
return fmt.Errorf("telegram send: %w", channels.ErrTemporary)
|
logger.ErrorCF("telegram", "HTML parse failed, falling back to plain text", map[string]any{
|
||||||
|
"error": err.Error(),
|
||||||
|
})
|
||||||
|
tgMsg.ParseMode = ""
|
||||||
|
if _, err = c.bot.SendMessage(ctx, tgMsg); err != nil {
|
||||||
|
return fmt.Errorf("telegram send: %w", channels.ErrTemporary)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue