1
Find the channel to send from
channelId identifies which connected account the message goes out through. Get it once
and store it — it doesn’t change.connection_status is connected. Anything else cannot send.2
Pick an approved template
statusmust beAPPROVED. APENDINGtemplate is rejected at send time.- Count the placeholders in the
BODYtext.{{1}}and{{2}}means you must supply exactly twotemplateParams, in that order. A mismatch fails the send.
3
Send it
202 Accepted and the created message:channelId + to finds the thread or
starts one. If you already have a conversationId, send that instead and omit both.4
Confirm it arrived
202 means queued, not delivered. Read the message back to see where it got to:Poll for a short window, or treat
sent as success and reconcile failed separately.
Don’t wait on read — plenty of customers have receipts disabled and it will never arrive.Sending plain text
Inside the 24-hour window — the customer messaged you recently — you can reply in free text:Next
Zoho Desk: message customers when a ticket closes
A complete worked integration, including the flat payload form for callers that can’t
send nested JSON.

