Receiving Events
VoIPBIN notifies you in real-time when things happen — calls connect, transcriptions arrive, recordings complete. There are two delivery methods:
WebSocket — Maintain a persistent connection and receive events instantly. No public server needed.
Customer Webhook — Configure a webhook URI on your customer account to receive all events via HTTP POST.
Note
AI Implementation Hint
For AI agents and automated systems, WebSocket is preferred because it requires no public server endpoint and delivers events with lower latency. Use Customer Webhook when you have a persistent server that needs to process events asynchronously.
WebSocket |
Customer Webhook |
|
|---|---|---|
Connection |
Persistent bidirectional connection |
Stateless HTTP pushes to your server |
Setup |
Connect to |
|
Filtering |
Subscribe to specific topics |
Receives all events (no filtering) |
Best for |
Real-time dashboards, AI agents |
Server-side catch-all processing |
Requires |
WebSocket client library |
Public HTTPS endpoint |
WebSocket
Connect to VoIPBIN’s WebSocket endpoint and subscribe to topics to receive events in real-time.
Connect:
wss://api.voipbin.net/v1.0/ws?token=<your-token>
Subscribe by sending a JSON message after connecting. Replace <your-customer-id> with your customer ID (UUID) obtained from GET https://api.voipbin.net/v1.0/customer:
{
"type": "subscribe",
"topics": [
"customer_id:<your-customer-id>:call:*",
"customer_id:<your-customer-id>:transcribe:*"
]
}
The wildcard * subscribes to events from all resources of that type under your account.
Python example:
import websocket
import json
token = "<your-token>"
customer_id = "<your-customer-id>"
def on_message(ws, message):
data = json.loads(message)
event_type = data.get("event_type")
if event_type:
if "transcript" in event_type:
transcript = data["data"]
direction = transcript.get("direction", "?")
text = transcript.get("message", "")
print(f"[TRANSCRIBE {direction}] {text}")
else:
print(f"[EVENT] {event_type}")
def on_open(ws):
subscription = {
"type": "subscribe",
"topics": [
f"customer_id:{customer_id}:call:*",
f"customer_id:{customer_id}:transcribe:*"
]
}
ws.send(json.dumps(subscription))
print("Subscribed to call and transcribe events. Waiting...")
ws = websocket.WebSocketApp(
f"wss://api.voipbin.net/v1.0/ws?token={token}",
on_open=on_open,
on_message=on_message
)
ws.run_forever()
Note
AI Implementation Hint
The topic format is <scope>:<scope_id>:<resource>:<resource_id>. Use * as the resource_id to subscribe to all resources of a type (e.g., customer_id:<id>:call:* for all call events, customer_id:<id>:transcribe:* for all transcription events). If the WebSocket connection drops, all subscriptions are lost — implement automatic reconnection and re-subscribe after reconnecting.
For the full WebSocket guide, see WebSocket documentation.
Customer Webhook
Configure a webhook URI on your customer account. VoIPBIN sends HTTP POST requests to this URI for all events associated with your account — no per-event-type filtering is needed.
Update your customer’s webhook configuration:
$ curl --request PUT 'https://api.voipbin.net/v1.0/customer?token=<your-token>' \
--header 'Content-Type: application/json' \
--data-raw '{
"webhook_method": "POST",
"webhook_uri": "https://your-server.com/voipbin/events"
}'
Response:
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"webhook_method": "POST",
"webhook_uri": "https://your-server.com/voipbin/events",
...
}
Once configured, VoIPBIN sends a POST request to your webhook_uri each time any event occurs for your account. Your endpoint must respond with HTTP 200 within 5 seconds.
Fields:
webhook_method(enum String): The HTTP method used for webhook delivery. Use"POST".webhook_uri(String): The URI where event notifications are sent. Must be publicly accessible.
Note
AI Implementation Hint
The customer webhook receives all event types for your account — there is no filtering by event type. For local development, use a tunneling tool (e.g., ngrok) to expose your local server. To stop receiving events, set webhook_uri to an empty string "".
Troubleshooting
- No events received via WebSocket:
Cause: Subscription topic does not match your customer ID, or subscription was sent before the connection opened.
Fix: Verify the customer ID in the topic matches your account (from
GET https://api.voipbin.net/v1.0/customer). Send the subscribe message only after theon_opencallback fires.
- No events received via customer webhook:
Cause: The
webhook_uriis not publicly accessible, or the endpoint does not return HTTP200within 5 seconds.Fix: Verify the URI is reachable from the internet. For local development, use a tunneling tool (e.g., ngrok). Check your server logs for incoming requests.
- 403 Forbidden on customer update:
Cause: The authenticated user lacks admin permission to update the customer.
Fix: Verify you are using an admin-level token. Regular agents cannot modify customer settings.