- STAGE:
- PLANNED
Inbound Normalization
What is Inbound Normalization?
How do users respond to your multi-channel messages? In some cases they may click a link, some may hit a button that fires a webhook, and others may send you a quick reply of "approved". There are a myriad of ways for users to engage with you on many channels across many providers – Courier has been there to help you with sending in these complex environments, now we're here to help with receiving, too!
By routing your inbound links, webhooks, and messages through Courier, we'll help you to:
Standardize your own inbound webhook footprint, so you can deal with a normalized payload that works across all channels & providers
Intelligently measure user engagement across action types – not just "clicks"
Trigger automations off of replies to e.g. fire a webhook call off alongside an email after an expense report was approved
How do I use it?
To use Inbound Normalization:
Register an Inbound handler for each supported provider from your Courier account's Integrations page
Take the unique URL generated for your Inbound handler and register that URL as the webhook destination within your corresponding provider – refer to your provider-specific documentation for details
Lastly register your server's webhook URL within Courier's Webhook Settings page if you have not already done so and optionally enable signature verification (recommended)
You'll now receive inbound webhook events with the following format (subject to change prior to release):
{
"data": {
"id": "1-6143cf63-4f27670f6304f465462695f2",
"ts": 1631833955972,
"from": {
"channel": "sms",
"user": "c156665c-a76c-4440-9676-f25c1b04ba93", // if mapped
"address": "+15558675309" // normalized but still varies by channel
},
"to": {
"channel": "sms",
"address": "+14159937363"
},
"context": {
"intent": "approve", // if mapped
"text": "Yes, please",
"reply_to": "1-6160d318-18f695fb5385b17a1ab08768", // if mapped
"value": "expense-report-42", // if mapped
"channel": "sms",
"provider": "twilio",
"request": { /* varies by provicer */ }
}
},
"type": "inbound:message" // or inbound:click
}