mcps, nothing is frozen at publish, and the agent
does not know it is deployed. Point the trigger somewhere else and the next
message is answered by a different agent, with no republish.
There is exactly one trigger type,
telegram.message.inbound, on exactly one
provider. Telegram is the only channel Talqing has. The end-to-end walkthrough —
BotFather, the bot token, the first message — is on
Telegram; this page is the model behind it.Creating one
Triggers live under an integration:POST /v1/integrations/{integration_id}/triggers.
enabled defaults to false, which is the useful default: a disabled trigger
is a draft you can create while the agent is still being written, and it does not
subscribe to anything.
Fields
string
required
telegram.message.inbound — the only value. Anything else is a schema error.uuid
The agent that answers. Required to enable; a trigger created without one is
valid and lands at
needs_setup.boolean
default:"false"
The switch. Turning it on runs every check below and performs the channel
subscription.
string
default:"public_reply"
What happens with the agent’s answer. See reply modes.
object
Yours. Stored and returned untouched.
provider_subscription_ref is on the response too. It is written by the platform
when the subscription is made — for Telegram, the callback URL registered with
the Bot API — and there is no reason to send one.
What enabling checks
Every one of these runs on create withenabled: true, and again on any PATCH
that leaves the trigger enabled.
Two of them are worth dwelling on.
Published, not draft. The check reads the agent’s published version and its
channel comes from that frozen snapshot. Editing the draft afterwards changes
nothing until you publish; publishing reaches the channel on the next message.
One enabled trigger per integration and type. Not one trigger — one enabled
one. You can keep several rows around and switch which is live, but two agents
cannot both answer the same bot, because there would be no rule for which of them
speaks.
What enabling does
For a provider with a managed subscription — Telegram — enabling the trigger registers the webhook with the provider for you. Nothing is pasted anywhere by hand. On success the trigger’sprovider_subscription_ref holds the callback
URL and its status is active.
If the registration fails, the trigger row is kept and moved to error rather
than deleted, and the call returns the provider’s own message:
PATCH it enabled again; the registration is attempted afresh
each time.
Disabling or deleting a trigger tears the subscription down again, best effort,
so the provider stops delivering. Deleting the integration takes its triggers with
it and does the same.
Statuses
status is derived, not set. It is recomputed from enabled and the agent on
every write; the one value you can write yourself is error, for marking a
binding you know is broken.
Reply modes
internal_note is not usable on Telegram. The Bot API has no private-note
surface for a chat, so the reply is never sent and the item settles skipped with
provider telegram does not support reply_mode:internal_note. The API accepts the
value — the refusal happens at delivery — so choosing it produces a bot that
appears configured and says nothing. On Telegram the two real choices are
public_reply and none.
none is genuinely useful: it lets a new agent shadow a channel, generating
answers into the conversation record that you can read on the Conversations
page without anybody outside seeing them.
Changing and removing one
PATCH /v1/integrations/{integration_id}/triggers/{trigger_id} takes the same
fields; omitted ones are left alone. Repointing at another agent, changing the
reply mode and switching it off are all this one call.
DELETE /v1/integrations/{integration_id}/triggers/{trigger_id} removes it
permanently and unsubscribes. There is nothing to undo — create it again.
GET /v1/integrations/{integration_id}/triggers lists them, newest activity
first:
What a fired trigger produces
Each firing is one session on the conversation for that person, recorded like any other: which agent version ran, its usage, its cost, how it ended. The messages are items on the thread. Nothing about reading it back is channel-specific — see conversations. Triggers are workspace resources like everything else, so they are regional: a trigger created againstapi.in.talqing.com exists only there.
Next
Telegram
The end-to-end walkthrough, and everything Telegram itself constrains.
Connecting
Creating the integration a trigger hangs off, and what each status means.
Text conversations
The thread model every trigger writes into.