Integrations and webhooks

Send conversations, bookings, team requests and support requests to Zapier, Make or your server; check the signature, see delivery results.

Integrations send business events to another service the moment they happen: a new conversation, a booking, a request for a team member, a support request. With Zapier or Make you can, for example, add a row to a spreadsheet, send a message to a chat or create a CRM record without copying data by hand.

Where to find it

Open “Modules” in the top menu, connect the “Integrations” module (it is off by default) and click “Open integrations” on its card. The “Connections” tab opens with a card for each way to connect: Zapier, Make, n8n, your own server, external systems, customer sign-in and a personal calendar. Only the Owner and the Administrator can connect services and see receivers: a receiver address can contain a private token. While the module is off nothing is delivered, and events that happen in the meantime are not resent later. Receivers stay configured and the event log keeps recording.

How to add a receiver

  1. On the “Connections” tab click “Connect Make”, “Connect n8n” or “Add a webhook”; for Make and n8n the name is already filled in. In Make add the “Custom webhook” module and copy its address; in n8n add a Webhook node with the POST method and copy its Production URL. Zapier connects through its own card without an address; a Zap with the “Webhooks by Zapier” trigger and the “Catch Hook” event also works.
  2. On the integrations page fill in “Name” (for example, the name of the Zap) and “Receiver address” (the copied address).
  3. In “Events to send” tick what to send.
  4. Click “Add receiver”.
  5. The signing secret appears once. Copy it and keep it safe. Zapier and Make do not need it; your own server uses it to check the signature. If you lose it, create a new one with “Change secret”.
  6. On the receiver card click “Send a test”. The result says Delivered or Not delivered with the reason.

The address must be public and start with https. These are rejected, and the page names the reason: http addresses, IP addresses instead of a domain, custom ports, addresses with a login and password, internal addresses and addresses on Aidanto domains. The page shows only the host and path of the address: the part after the question mark can hold your receiver's token.

Which events are sent

Events from the test chat are not sent. A receiver gets only events that happen after it was added and while it is on: what happened while it was paused or turned off is not sent later.

“New message” and “Conversation transcript” carry the full text of conversations, including what customers write. The text leaves Aidanto and goes to the receiver you chose, so tick them only for receivers you trust. A new receiver starts with these two unticked. They are sent only while some receiver has them ticked, and they do not appear in the event log or its export: the dialog itself is in the inbox. Test chats and blocked customers are not sent.

What the receiver gets

Every event is a POST request with a JSON body. Example for a request for a team member made by an AI employee:

{
  "schema_version": "business-webhook.v1",
  "id": "5b0c5e2e-0000-4000-8000-000000000001",
  "type": "conversation.handoff_requested",
  "occurred_at": "2026-10-07T09:30:00.000Z",
  "business": { "name": "Example Studio" },
  "actor": { "kind": "ai_employee" },
  "channel": "telegram",
  "employee": { "name": "Anna" },
  "conversation": { "url": "https://app.example.com/businesses/studio/inbox?conversation=example" },
  "customer": { "name": "Maria", "email": "maria@example.com", "phone": "+1 555 0100" },
  "booking": null,
  "handoff": { "reason": "ai_request", "reason_text": "The customer wants to discuss a discount" },
  "support_case": null
}

Sections that do not apply to the event are null. The “Send a test” event has the type webhook.test, and every section except business is null. The data carries no translated text: names are as saved, codes are fixed English words, and times are in UTC.

"message": {
  "id": "6c1d0f52-0000-4000-8000-000000000002",
  "sequence": 12,
  "author": "customer",
  "text": "Hello, can I book for Friday?",
  "created_at": "2026-10-07T09:29:41.000Z",
  "attachments": [{ "kind": "image", "name": "photo.jpg", "media_type": "image/jpeg" }]
}

Messages and transcripts can arrive out of order and can repeat, so do not rely on arrival order. Use sequence to restore the order of messages in a conversation, and drop a delivery whose webhook-id you have already processed. A transcript repeats messages you may already have received one by one: use it to check or rebuild the whole conversation.

How to check the signature

Each request has three headers of the Standard Webhooks standard: webhook-id, webhook-timestamp and webhook-signature. Zapier and Make do not check them. On your own server use the official Standard Webhooks library for your language: give it the secret exactly as shown (it starts with whsec_), the raw unchanged request body and the three headers. To check by hand:

signed_content = webhook-id + "." + webhook-timestamp + "." + raw request body
signature      = "v1," + base64( HMAC-SHA256( key, signed_content ) )
key            = base64-decoded part of the secret after "whsec_"

The webhook-signature header holds v1, followed by the signature. After “Change secret” it holds two signatures separated by a space: accept the request if either matches. Reject requests whose timestamp differs from your clock by more than five minutes.

Retries and automatic shutdown

The receiver must answer with a 2xx code within 10 seconds. Redirects are not followed: an address that redirects counts as an error. Otherwise Aidanto tries again: right away, then after 1 minute, 5 minutes, 30 minutes, 2 hours, 6 hours and 12 hours. That is 7 attempts over about 21 hours. If all fail, the delivery is marked Not delivered in “Delivery log”, and you can click “Send again”. Retries carry the same webhook-id, so the receiver can drop duplicates.

A receiver is turned off automatically when it answers that the address no longer exists (code 410) or when five events in a row are not delivered. The card then shows “Turned off automatically” with the reason, and your team gets a notification. Fix the address and click “Turn on”: events missed in the meantime are not sent.

Pause, new secret, deletion

Good to know

What's next

← All articles