Webhook Integration

Connect Boei with 1000+ other services like CRM systems and email marketing tools using webhooks.

How to get there: Go to Setup → Website widget in the top menu → click your widget → click on a channel → scroll to its Webhook setting.

How Webhooks Work

When a customer submits a form or interacts with your widget, Boei can send that data to other services:

  1. Customer fills in a form
  2. Boei validates the data and sends a webhook
  3. A glue service (like Zapier) captures the webhook
  4. The glue service creates an action (like adding a subscriber)

AI Agent Notification Webhooks

For an AI Agent, configure webhook delivery under Setup → AI Agent → Notifications. Each notification rule can send at one of two moments:

  • When form is submitted sends immediately. You can select one form or choose Any form.
  • When chat ends sends after the conversation is completed and can use checks such as escalation, contact details, page URL, or an AI condition.

Both moments send the same common conversation fields. A form submission also includes a separate form object so values entered by the visitor are not mixed with information inferred from the conversation. A chat end includes summary, closed_at and how the chat went instead. The conversation itself comes last, so the details of what happened are at the top of the message.

Use thread_id to match events for the same conversation, visitor_id to match a browser visitor on the same website, and contact.id to match a known contact. visitor_id can be empty when no visitor is linked. These IDs do not grant access to messages. The old load_key field has been removed. Update integrations that used it to use thread_id for conversations.

Every top-level field is always there. When there is nothing to send, for example a chat that did not start on one of your pages, the field is empty rather than missing, so a field you picked in Zapier keeps working. Inside the conversation it works the other way round: a message only carries attachments when the visitor actually uploaded something.

{
    "event": "form_submitted",
    "event_id": "unique-delivery-id",
    "thread_id": "conversation-id",
    "inbox_url": "https://app.boei.help/inbox?message=conversation-id",
    "visitor_id": "visitor-id",
    "created_at": "2026-09-24T10:05:00.000000Z",
    "conversation_started_at": "2026-09-24T10:00:00.000000Z",
    "chatbot_id": "chatbot-id",
    "is_test": true,
    "website": "example.com",
    "page": {
        "url": "https://example.com/pages/shipping",
        "title": "Shipping"
    },
    "title": "Question about a late order",
    "form": {
        "id": 451,
        "name": "Get in touch",
        "fields": {
            "name": "Jane Doe",
            "email": "jane@example.com",
            "order_number": "123"
        }
    },
    "contact": {
        "id": "contact-id",
        "url": "https://app.boei.help/contacts/contact-id"
    },
    "customer_info": {
        "locale": "en"
    },
    "conversation": [
        {
            "id": 42,
            "role": "user",
            "content": "I need help with order 123",
            "created_at": "2026-09-24T10:01:00.000000Z",
            "attachments": [
                {
                    "file_name": "receipt.pdf",
                    "mime_type": "application/pdf",
                    "file_size": 12345,
                    "url": "https://app.boei.help/a/987?signature=..."
                }
            ]
        }
    ]
}

A few of these are worth knowing about:

  • website is the site the chat came from, useful when you run more than one store on one account.
  • page is the page the visitor was on when they last wrote.
  • title is a short summary of the request, ready to use as the subject of a ticket.
  • contact links to the person in your Boei contacts, so your other system can match them to someone it already knows instead of creating a new record for every chat.
  • attachments appear on a message when the visitor uploaded a file. The link works for 30 days and needs no login, so your helpdesk can fetch the file.

A chat end adds three more, which Boei works out once the conversation is over: category (such as support or sales), health_score from 0 to 100, and resolution, which says whether the chat was resolved, handed off or abandoned, with how sure Boei is about that.

Preview submissions are sent normally so you can test the complete integration. They include is_test: true, which you can use to route them to a test ticket or filter them out.

One thing worth knowing: when Boei reports a delivery as successful, it means the address accepted the message, not that anything was done with it. A website homepage accepts our message too and then throws it away. Use Send test (below) and then check whether the record actually appeared on the other side.

event_id is stable for the same logical event, including queue retries. Submitting the same form again in the same conversation with exactly the same values also produces the same ID. Use it to prevent duplicate processing in your receiving system. Boei retries temporary webhook failures. If delivery still fails, Boei adds a team-only internal system message to the conversation so the problem is visible in the inbox but never included in later webhook conversations.

The two timestamps

  • created_at is when the thing you are being told about happened: the moment the form was submitted, or the moment the chat closed.
  • conversation_started_at is when the conversation began, which on a long chat can be an hour earlier.

Use created_at when you want to know when to act, and conversation_started_at when you want to know how long the visitor was around. On a chat end, closed_at is the same moment as created_at.

If a delivery has to be retried, the timestamps stay exactly the same, so a retry is not mistaken for a second event.

All dates use the same UTC format Boei has always used, for example 2026-09-24T10:05:00.000000Z.

File sizes in attachments are in bytes, so 12345 is roughly 12 KB.

Test Your Webhook Before You Rely On It

You do not have to hold a chat and wait for it to close to see whether your webhook works.

  1. Open your chatbot and go to Notifications
  2. Open the rule and click the webhook address
  3. Click Send test

Boei sends one example message right away and tells you what happened: the response code, how long it took, and a warning when the address answered with a web page instead of an endpoint.

That warning matters. A common mistake is pasting your own website address into the webhook field. Your website politely accepts our message and then throws it away, so nothing ever looks broken while no data arrives. If you see that warning, you need the address your other tool gave you, such as the one from Webhooks by Zapier.

The test message is marked is_test: true, so you can filter it out on the other side.

A note on what "delivered" means: it means the address accepted our message. Whether the other tool then did something useful with it is something only you can check, by looking for the record on that side.

Setting Up Webhooks

Using a Glue Service

Connect Boei to other apps using services like:

Configuration Steps

  1. Create an automation in your glue service
  2. Set it to receive a webhook
  3. Copy the webhook URL
  4. Paste it into your Boei widget settings
  5. Map the fields (e.g., Email = Email)

Webhook Data

Different widgets send different data. Here are examples:

Contact Form

{
    "timestamp": "2021-05-16T17:43:44.034777Z",
    "name": "John Doe",
    "email": "john@example.com",
    "phone": "+1234567890",
    "message": "I have a question about...",
    "page_title": "Contact Us",
    "page_url": "yoursite.com/contact"
}

Newsletter Signup

{
    "timestamp": "2021-05-16T17:43:44.034777Z",
    "gdpr_checked": "true",
    "name": "Jane Smith",
    "email": "jane@example.com",
    "page_title": "Home",
    "page_url": "yoursite.com"
}

Feedback Form

{
    "timestamp": "2021-05-16T17:39:35.500695Z",
    "feedback": "5/5",
    "comment": "Great service!",
    "page_title": "Thank You",
    "page_url": "yoursite.com/thanks"
}

Common Integrations

Use webhooks to connect Boei with:

  • Email marketing - Mailchimp, ConvertKit, ActiveCampaign
  • CRM systems - Salesforce, Pipedrive, Zoho CRM
  • E-commerce - Shopify, WooCommerce
  • Helpdesk - Zendesk, Freshdesk
  • Spreadsheets - Google Sheets, Airtable

Testing

After setting up:

  1. Submit a test form on your website
  2. Check if the data appears in your connected service
  3. Verify all fields are mapped correctly

Direct Integrations

Boei also offers direct integrations:

  • HubSpot - Sync contacts and tickets
  • Slack - Get notifications in channels