chat.* event keys as Slack and Discord, so an agent’s Telegram triggers look like its Slack triggers with a different connection: and $.chat.provider: telegram. This page covers what is Telegram-specific: how bots receive messages, how mentions resolve to agents, and which parts of the shared chat contract Telegram does and does not emit.
How Telegram connects
Each agent identity on Telegram is its own Telegram bot, created and managed through a manager bot connection. The connection name defaults totelegram-<manager-bot-username> — for example telegram-FractalWorks_bot — and that is the name a trigger’s connection: field references. Messages arrive on per-bot webhooks; unlike Slack there is no workspace-level event stream, so each bot sees the chats it participates in.
Event keys
Telegram does not emit
chat.message.edited — edit events are wired for Slack and Discord only. A Telegram message edit produces no trigger event.Mentions
A mention on Telegram is a literal@<bot-username> in a group message. auto extracts the mentioned bot usernames from the raw message and matches them against the agent bot personas realized on the connection; each matched agent receives its own addressed chat.message.mentioned event. Since bot usernames are globally unique on Telegram, there is no alias-prefix scheme like Slack’s @auto.<alias>.
Direct messages need no mention: any DM to the agent’s bot arrives as chat.message.direct. Note that Telegram users must start a conversation with a bot before it can message them — an agent can always reply in a chat it was written to, but cannot open a cold DM to a user who never started its bot.
Payload
Telegram events use the shared chat payload — see the Slack events page for the full field-by-field reference. In summary:chat—provider: "telegram",kind,threadId,channelId,isDirectMessage,messageId. Thread and channel ids are canonical, provider-prefixed ids — pass them back tochat.sendexactly as delivered.message—text,author(withauthor.userNameandauthor.isMeas the commonly used fields),isMention,dateSent,attachments,links.auto—mentioned,authored,contextual,attribution/attributions(sessions already attached to the conversation), andagenton addressed events.raw— the raw Telegram update.
reaction (added, emojiName, rawEmoji, emoji, user) plus the chat envelope with messageId pointing at the reacted-to message.
One Telegram nicety: the group title rides on every message payload, and auto records it as a durable destination alias — so a session can later chat.send to that group by title, not just by numeric chat id.
Template placeholders
Filters
Threads and routing
Telegram messages and reactions carry the same canonical chat-thread routing target as every chat provider: the pair (connection grant,chat.threadId). The target type is named slack.thread for historical reasons but is provider-agnostic — a Telegram conversation binds through it exactly like a Slack thread. The standard patterns:
spawnonchat.message.mentioned/chat.message.directfor new conversations.deliver+routeBy: { kind: attributedSessions }for follow-up messages and reactions in conversations a session already owns.bindwithtarget: slack.threadto resolve an event to the one session bound to its conversation.
Example: a conversational agent on Telegram
Adapted from the managed@auto/chat-assistant template — a chat agent that answers mentions and DMs, keeps each conversation in one session, and notices reactions to its messages.
.auto/agents/assistant.yaml
See also
- Slack events — the full shared chat payload reference
- Triggers reference — routing kinds and filter grammar
- Connections and identities — setting up the Telegram manager bot and agent bot identities