Skip to main content

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):

  1. Log on to AI Agent and click workspace.
  2. Input the webhook URL of the Endpoint you configured in the Webhook tab.
  3. 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

MethodPOST
Content-Typeapplication/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.