Leads Webhook
The webhook will process data per chatbot. Webhook will post leads and appointment records to your CRM in JSON format daily.
Setting up a Webhook
To set up a Webhook you must have been issued with a AI Agent
logon (contact AI Agent
Support if you do not already have this access):
- Log on to
AI Agent
and click workspace. - Input the webhook URL of the Endpoint you configured in the Webhook tab.
- click save.
Once the webhook URL is entered, the webhook Sign Key is automatically generated.
Receiving Endpoint
Gain confidence in the authenticity of your webhooks when you use a webhook signing key that mentioned above, a unique secret key shared between your application and AI Agent
, to verify the events sent to your endpoints. The webhook signing key will produce theX-Webhook-Signature
, which you can use to compare against an expected webhook signature, to verify events from AI Agent
.
X-Webhook-Signature
When AI Agent
sends your app a webhook, it will include theX-Webhook-Signature
header in the following format:
X-Webhook-Signature: t=1492774577,v1=5257a869e7ecebeda32affa62cdca3fa51cad7e77a0e56ff536d0ce8e108d8bd
Compare the X-Webhook-Signature
, prefixed by v1=
, to the expected signature. If they match, then you can trust that the event payload was issued by AI Agent
and has not been tampered with.
const crypto = require('crypto');
// Your application's webhook signing key
const webhookSigningKey = ({}).WEBHOOK_SIGNING_KEY;
// Extract the timestamp and signature from the header
const newoaksSignature = req.get('X-Webhook-Signature');
const { t, signature } = newoaksSignature.split(',').reduce((acc, currentValue) => {
const [key, value] = currentValue.split('=');
if (key === 't') {
// UNIX timestamp
acc.t = value;
}
if (key === 'v1') {
acc.signature = value
}
return acc;
}, {
t: '',
signature: ''
});
if (!t || !signature) throw new Error('Invalid Signature');
// Create the signed payload by concatenating the timestamp (t), the character '.' and the request body's JSON payload.
const data = t + '.' + JSON.stringify(req.body);
const expectedSignature = crypto.createHmac('sha256', webhookSigningKey).update(data, 'utf8').digest('hex');
// Determine the expected signature by computing an HMAC with the SHA256 hash function.
if (expectedSignature !== signature) {
// Signature is invalid!
throw new Error('Invalid Signature');
}
Listening for Leads and Appointments Events
When an event occurs, it is notified to your configured webhook URL. Push any new leads and appointments immediately,
Notification Details - HTTP POST Request
Method | POST |
---|---|
Content-Type | application/json |
JSON Body
Example:
{
// SerialNumber string Chatbot ID
"SerialNumber": "59001dd73709417321c58b11693183a2",
// Type string There are two types: Lead and Appointment
"Type": "Lead",
// FirstName string User First Name
"FirstName": "David",
// LastName string User Last Name
"LastName": "Garcia",
// Email string User's Email
"Email": "test@qq.com",
// PhoneNumber string User's phone number
"PhoneNumber": "",
// CreateTime string Creation time (UTC time)
"CreateTime": "2023-11-23T18:36:21.512302Z",
// Content string Remarks or appointment content
"Content": "test",
// SessionID int Session ID
"SessionID": 31305,
// URI string Source uri
"URI": "www.google.com"
}
JSON Body Description:
Error retry
Data response: {"status":"success"}
or {"status":"Success: test request received"}
(case-sensitive,the return value required for a successful callback), returning other values is considered a failure. After failure, retry within 1 minute and 3 minutes.