Call webhooks: WhatsApp QR, WhatsApp Business API and Twilio differences

Last updated: 9 October 2026 · 3 min read

Call events carry the same fields on all three services, but each service does not know some things. A field that is not known is null.

Steps

  1. 1

    WhatsApp (QR)

    • Outgoing calls are placed from the dashboard and the app. A call made from the phone itself has its events arrive together, after the call.
    • Incoming calls are answered on the phone: answered_on: phone, agent: null.
    • The length is counted from the answer. For a call answered on the phone it comes from the phone's call log; if the log does not arrive within 10 minutes, duration_known: false.
    • ended_by: agent when the agent hangs up in the dashboard or the app, or declines an incoming call on the phone. null otherwise.
    • Recording, transcript and summary for calls placed from the dashboard and the app. Each side is transcribed separately.
    • busy is not reported.
  2. 2

    WhatsApp Business API

    • Outgoing calls and answering incoming ones in the dashboard.
    • The length comes from WhatsApp.
    • ended_by: agent, contact or system.
    • agent: on incoming calls, the agent who answered.
    • A recording exists for calls recorded in the browser. The transcript comes from one recording, so its lines have speaker: mixed.
    • busy is reported.
  3. 3

    Twilio

    • Outgoing calls and answering incoming ones in the dashboard.
    • The length comes from Twilio.
    • ended_by: the first side to leave the conference, agent or contact.
    • On incoming calls, agent: null.
    • No recording, transcript or summary; call_recording_ready does not come.
    • A busy line comes as no_answer.

Document