#7902: feat: Implement Telegram video note support with tests and docs
docs
channel: telegram
stale
Cluster:
Messaging Platform Improvements
To be able to support Telegram distinguishes **video notes** (round bubble) from **video files** (rectangular).
OpenClaw defaults to video files.
Goes good with VideoMessageAvatars SKILL [https://www.clawhub.ai/thewulf7/avatar-video-messages](https://www.clawhub.ai/thewulf7/avatar-video-messages)
For message tool sends, set `asVideoNote: true` with a video `media` URL:
```json5
{
action: "send",
channel: "telegram",
to: "123456789",
media: "https://example.com/video.mp4",
asVideoNote: true,
}
```
(Note: Video notes do not support captions. If you provide a message text, it will be sent as a separate message.)

<!-- greptile_comment -->
<h2>Greptile Overview</h2>
<h3>Greptile Summary</h3>
This PR adds Telegram **video note** support (`asVideoNote: true`) alongside the existing media send logic, plus documentation and a new Vitest suite covering the video note behavior. The implementation updates `sendMessageTelegram` to route `kind === "video"` media through `api.sendVideoNote` when requested, and to send any accompanying text as a separate Telegram message (since video notes don’t support captions).
Main integration point is `src/telegram/send.ts`, where outbound Telegram sends already normalize targets, apply threading/reply markup, render Markdown-ish text into Telegram-safe HTML, and decide between media endpoints (`sendPhoto`/`sendVideo`/`sendAudio`/etc.). Video notes are added as another branch in that existing decision tree.
<h3>Confidence Score: 4/5</h3>
- This PR is generally safe to merge; the core behavior change is localized and matches Telegram API constraints, but one new test is incomplete and won’t catch reply_markup regressions for video notes.
- Reviewed the updated `sendMessageTelegram` media path and new docs/tests. The implementation avoids sending captions for video notes and guards against empty follow-up text, which addresses a common runtime failure mode. The main remaining concern is test coverage quality: one new test case doesn’t assert the intended behavior, so a regression could slip through.
- src/telegram/send.video-note.test.ts
<!-- greptile_other_comments_section -->
<!-- /greptile_comment -->
Most Similar PRs
#21898: fix(telegram): auto-detect captionable messages for editMessageCaption
by ptrkstr · 2026-02-20
79.0%
#18915: fix(telegram): pass video width/height to sendVideo to prevent portra…
by storyarcade · 2026-02-17
78.0%
#13389: feat(telegram): support native voice notes with automatic OGG/Opus ...
by leavingme · 2026-02-10
77.3%
#22434: feat(telegram): support sending original quality images
by godenjan · 2026-02-21
76.9%
#21309: feat(telegram): support outbound media groups (albums) via sendMedi...
by smysle · 2026-02-19
76.1%
#20155: feat(telegram): add tg-network-guard transcript status + reply flow
by artemgetmann · 2026-02-18
75.9%
#6516: feat(telegram): add sticker and custom emoji vision support
by Shabablinchikow · 2026-02-01
75.3%
#14057: feat(telegram): add ignoreMediaTypes config to skip specific inboun...
by pavelsamoylenko · 2026-02-11
75.3%
#21029: Feature/telegram bot avatar clean
by aleonnet · 2026-02-19
75.3%
#12936: fix(telegram): omit message_thread_id for private DM chats
by omair445 · 2026-02-09
75.3%