# Webhooks
Webhooks allow you to receive real-time updates when a specific event occurs, i.e. message is received from a contact. These events are HTTP POST requests being sent to an endpoint of your server. Request body is in JSON format. All events are delivered to a single webhook url (i.e. https://your-server.com/webhook).
When you receive a webhook event, you should always return HTTP response in 2xx class, i.e. 200 OK in shortest time possible. When reply is not 200 OK Smartsupp will try to re-deliver the webhook again later.
Enable Webhooks
Currently we don't have published UI for managing API and webhooks. To enable webhooks please contact our support with your url and required events to subscribe.
# Verification
Webhooks can be verified by calculating a HMAC signature.
Each webhook request includes a X-Smartsupp-Hmac
header, which is generated using the app's shared secret along with the data sent in the request.
Following code can be used to verify webhook request in Node.js (with koa):
import { createHmac } from 'crypto'
import koaBody from 'koa-body'
const UNPARSED_BODY = Symbol.for('unparsedBody')
const secret = 'YOUR_CLIENT_SECRET'
function generateHmac(secret, body) {
return createHmac('sha256', secret).update(body).digest('hex')
}
router.use(koaBody({
includeUnparsed: true, // required to returns raw body as string
}))
router.use((ctx, next) => {
if (ctx.headers['x-smartsupp-hmac'] !== generateHmac(secret, ctx.request.body[UNPARSED_BODY])) {
ctx.throw(403, 'Invalid request hmac signature')
}
return next()
})
# Structure
All webhooks have following body structure:
{
"type": "event_callback",
"event": "<name>",
"timestamp": "2020-08-08T07:53:18.825Z",
"account_id": "881987",
"app_id": "ap40qUkYi",
"data": {
...
}
}
Property | Type | Description |
---|---|---|
type | string | All events will have always value "event_callback". |
event | string | Name of the event (eg: "conversation.closed"). |
timestamp | string | ISO date format of date when event was created. |
account_id | string | Identifies account. |
app_id | string | Identifies specific integration. |
data | object | Event related data. |
# Events
Name | Description |
---|