address.link opens a chat with the sender: https://t.me/... for a Telegram bot (and https://wa.me/... for a WhatsApp number). On the Telegram sandbox bot the link carries your join code (https://t.me/<bot>?start=<code>), so opening it and tapping Start joins your app. For an iMessage line it is the line’s opt-in link, which opens Messages with the line and a prefilled text the person sends to start the conversation; it is set only when the line has one configured.
An iMessage sender also has imessage, set by the Flow team: fallback (messages to someone not on iMessage go by SMS or RCS from the same number; included on the shared line, an add-on on a dedicated line), call_forwarding.phone (dedicated lines only: where phone calls to the number are forwarded) and can_initiate (the line may write first; available on request, dedicated lines only). See iMessage.
Two kinds of sender
A third kind,
simulated, exists only in test mode: your app’s stand-in for a channel,
used by simulated contacts.
It never touches a network, and GET /v0/senders lists it only with kind=simulated.
The sandbox and join codes
A shared sender serves many apps at once. A person joins your app by sending the sender’s join message, such asHi Sandbox app (ref wild-otter-04508705), to the sandbox sender. On Telegram, opening the sender’s address.link and tapping Start does the same; typing the join message is the fallback when the link can’t be used. From then on their messages reach your app, and your app can message them.
- A join code is two words and eight digits. Your app’s code is
sandbox_join_codeinGET /v0/app(the bare code, for examplewild-otter-04508705); each shared sender shows the whole message a person sends asjoin_code(Hi Sandbox app (ref wild-otter-04508705)):Hi, your app’s name and the code in brackets. Show it as it is. Any message of up to 160 characters that ends with(ref <code>)joins;join <code>does not. - A join starts a conversation and sends you
conversation.startedwithvia: "sandbox_join", then the join itself as the person’s firstmessage.received, so your agent can answer at once: the text before(ref <code>)(Hi Sandbox app, orHiwhen nothing is left), or/startwhen they joined through the Telegram link. - Your test key cannot message anyone who has not joined. That is what keeps the sandbox safe for everyone.
Status and limits
Each sender has its own status and budget for starting conversations:limits.new_contacts_per_day and limits.new_contacts_per_hour are the sender’s current budget for starting conversations; WhatsApp senders also show quality_rating and limits.whatsapp_tier. Every change arrives as a sender.status_changed event. The rules behind them are on The send gate.