Register the number under Numbers, then assign it to that company and mark it default.
Build a template and define its variables — mark the compulsory ones required, give the rest a default.
Issue an API credential on the company, and hand the client id and secret to them once.
They call POST /api/v1/auth/token, then POST /api/v1/messages/send.
Assignment history
Pick a conversation on the left.
Nothing selected.
Twilio works a price out after the message is handled, so a fresh send
shows as unpriced until the backfill job reads it back. Unpriced messages are
counted separately rather than folded into the total as zero.
Pull fresh state from Twilio and run the maintenance jobs by hand. Everything here
works on a deployed server — buying a number, approving a template or chasing a
stuck message needs no rebuild and no restart.
Company API tokens do not expire, so an integration never has to
refresh. That is only safe because of this screen — Sign out ends a token
immediately, and the next request made with it is refused.
The answer and the callback are separate things. An answer is kept
the moment it arrives; the callback is a delivery to the integrator that can fail.
A row reading Answered with a failed callback means consent was given and we
could not hand it over — Resend tries again.
A window opens when the customer messages us and lasts 24 hours.
While it is open, plain text is deliverable. Once it closes, only an approved
template gets through — which is why a send with the window shut is queued and the
customer is asked first. A worker closes expired windows every minute and tells the
integrator.
Nothing here expires on its own — a held message waits as long as the
customer takes to answer. Yes releases everything held for them in the order
it arrived; No rejects it. A rejected message is never sent, but a later
request can ask again.
Every event is written down before it is sent and kept afterwards,
delivered or not. That is what makes "we never received it" answerable — the row
shows what was sent, when, and what came back. Resend re-reads the
company's URL first, because a failure is usually the URL.
These are read from the database through a 15-second cache, so a change here takes
effect within seconds — no rebuild and no restart.