Skip to main content

Using webhooks with your bOnline phone system

How to enable bOnline webhooks to receive real-time call events (call_created, call_ended) in your own systems, including setup steps, payload formats, and troubleshooting.

With bOnline webhooks you can receive real-time call events from your phone system directly into your own systems (CRM, ticketing, analytics, internal tools, epos etc.).

This article explains:

  • What our webhooks can do

  • Which events we currently support

  • How to get webhooks enabled on your account

  • What the payloads look like and how to consume them

1. What our webhooks can do

bOnline webhooks can emit the following event types:

  • call_created – fired when a call is established

  • call_ended – fired when a call finishes

Events are delivered as HTTP POST requests with a JSON body to a URL you provide.

2. Example use cases

You can use bOnline webhooks to:

  • Pop contacts in your CRM when calls begin

  • Log calls automatically to tickets, deals, or contacts

  • Trigger internal workflows (e.g. notify a Slack channel when high-value customers call)

  • Feed call data into dashboards or reporting tools

If your CRM or system is not directly integrated with bOnline, webhooks are often the easiest way to connect the two.

3. How it works (high-level)

  1. You provide a webhook URL (an HTTPS endpoint you control).

  2. bOnline sends POST requests to that URL when events occur on your account.

  3. Your application parses the JSON payload and does whatever you want with the data (update CRM, create a log entry, trigger automation, etc.).

4. Requirements

To use bOnline webhooks you'll need:

  • A bOnline VoIP account with webhooks activated

  • A public HTTPS endpoint that can accept HTTP POST requests, parse JSON payloads, and return a 2xx status code (e.g. 200 OK) when it successfully processes an event

Authentication: At this stage, custom headers / API keys defined per account are not supported, so we cannot yet send an arbitrary "API-Key" or similar header that you define. We strongly recommend using a hard-to-guess URL path (e.g. /webhooks/bonline/43e5baaf…) and restricting access by IP address / range at your firewall or reverse proxy where possible.

5. Enabling webhooks on your bOnline account

Step 1 – Go to MYbOnline and turn on webhooks.

Step 2 – Provide the destination URL of your webhook endpoint.

6. Implementing your webhook endpoint

Your endpoint can be built in any language or framework. At a minimum, it should:

  1. Accept POST requests

  2. Read the JSON payload from the request body

  3. Optionally inspect headers (e.g. name, timestamp, user_uuid)

  4. Perform your custom logic (CRM update, logging, etc.)

  5. Return a 2xx status code if everything is OK

7. Event details & example payloads

7.1 call_created example

{
  "bridges": ["string"],
  "call_id": "string",
  "caller_id_name": "string",
  "caller_id_number": "string",
  "conversation_id": "string",
  "peer_caller_id_name": "string",
  "peer_caller_id_number": "string",
  "creation_time": "string",
  "status": "string",
  "on_hold": true,
  "muted": true,
  "record_state": "string",
  "talking_to": {},
  "user_uuid": "7c4d2d7d-8620-4fb3-967a-4a621082cf1f",
  "is_caller": true,
  "is_video": true,
  "dialed_extension": "string",
  "line_id": 0,
  "answer_time": "string",
  "hangup_time": "string",
  "direction": "string",
  "parked": true,
  "sip_call_id": "string"
}

Example headers:

{
  "name": "call_created",
  "required_acl": "events.events.calls.{user_uuid}",
  "origin_uuid": "311e21cd-c040-4b48-bc92-4bc16db9c2a0",
  "timestamp": "2026-09-02T11:04:37Z",
  "tenant_uuid": "3467989a-e428-43d0-b560-aedbbec33ae0",
  "user_uuid:{uuid}": true
}

7.2 call_ended example

{
  "bridges": ["string"],
  "call_id": "string",
  "caller_id_name": "string",
  "caller_id_number": "string",
  "conversation_id": "string",
  "peer_caller_id_name": "string",
  "peer_caller_id_number": "string",
  "creation_time": "string",
  "status": "string",
  "on_hold": true,
  "muted": true,
  "record_state": "string",
  "talking_to": {},
  "user_uuid": "7c4d2d7d-8620-4fb3-967a-4a621082cf1f",
  "is_caller": true,
  "is_video": true,
  "dialed_extension": "string",
  "line_id": 0,
  "answer_time": "string",
  "hangup_time": "string",
  "direction": "string",
  "parked": true,
  "sip_call_id": "string"
}

Example headers:

{
  "name": "call_ended",
  "required_acl": "events.events.calls.{user_uuid}",
  "origin_uuid": "311e21cd-c040-4b48-bc92-4bc16db9c2a0",
  "timestamp": "2026-09-02T11:06:52Z",
  "tenant_uuid": "3467989a-e428-43d0-b560-aedbbec33ae0",
  "user_uuid:{uuid}": true
}

8. Testing your integration

Once support has enabled webhooks and your endpoint is live:

  1. Make a test call (e.g. from your bOnline app or handset).

  2. Check your application logs to confirm a call_created event was received when the call was established, and a call_ended event was received when the call finished.

  3. Verify that your CRM / system has been updated as expected.

If you're not receiving events: confirm your endpoint is publicly reachable over HTTPS, check that your server accepts POST with JSON, and inspect web server logs for any 4xx/5xx errors.

9. Getting help

If you run into any issues setting up or using webhooks, chat with us and we'll help you get it working.

Did this answer your question?