Skip to content

Call Events

This document describes how Telsmart sends real-time call information to your platform via webhooks after a user has activated the integration (see Activation Flow).

1. What Happens After Activation

When the integration is active:

  • Event Monitoring — Telsmart monitors calls for users with the integration enabled.
  • Real-time Events — Call actions (incoming, outgoing, summaries) are detected as they occur
  • Live Updates — Live call and summary updates are sent, including state changes (ringing, answered, on hold, ended).
  • Real-time Usage — These events can be used to inform users instantly about call activity.

2. How It Works in Practice

Each time a call is detected, Telsmart sends one or more small data messages (events) to your webhook.

These messages are sent whenever the state of a call changes.

Call Phase Description Typical Use in your App
RINGING The user’s extension is ringing. Show an incoming call popup.
ACTIVE The user answered the call or resumes held call and it is now in progress. Start/resume a call timer or update the popup’s UI.
HELD The user put the call on hold. Show “On hold” in the interface.
HANGUP The call ended or was not answered. Remove or close the popup.

3. Examples of Call Data

Note

“user_extension” determines the user who will be presented with the call event and “direction” is from the perspective of that user (“user_extension”), “in” meaning incoming and “out” meaning outgoing.

Example 1 — Answered External Incoming Call from +3228992675 to extension 200

RINGING

{
  "tenant_id": "b11d749b-8eb7-4236-a068-3d94ba3860d6",
  "caller_number": "+3228992675",
  "direction": "in",
  "callee_name": "John Doe",
  "state": "RINGING",
  "caller_name": "+3228992675",
  "callee_number": "200",
  "user_extension": "200",
  "id": "590e9492-cbbc-4252-8205-7eb595099b5f",
  "timestamp": "1765209366386177"
}

ACTIVE

{
  "tenant_id": "b11d749b-8eb7-4236-a068-3d94ba3860d6",
  "caller_number": "+3228992675",
  "direction": "in",
  "callee_name": "John Doe",
  "state": "ACTIVE",
  "caller_name": "+3228992675",
  "callee_number": "200",
  "user_extension": "200",
  "id": "590e9492-cbbc-4252-8205-7eb595099b5f",
  "timestamp": "1765209375906227"
}

HANGUP

{
  "tenant_id": "b11d749b-8eb7-4236-a068-3d94ba3860d6",
  "caller_number": "+3228992675",
  "direction": "in",
  "callee_name": "John Doe",
  "state": "HANGUP",
  "caller_name": "+3228992675",
  "callee_number": "200",
  "user_extension": "200",
  "id": "590e9492-cbbc-4252-8205-7eb595099b5f",
  "timestamp": "1765209400106173"
}
Example 2 — Answered External Outgoing Call from extension 200 to +3228992675

RINGING

{
  "tenant_id": "b11d749b-8eb7-4236-a068-3d94ba3860d6",
  "caller_number": "200",
  "direction": "out",
  "callee_name": "",
  "state": "RINGING",
  "caller_name": "John Doe",
  "callee_number": "+3228992675",
  "user_extension": "200",
  "id": "b9c06dc1-d1fa-4d29-ad55-01a1f60afc43",
  "timestamp": "1765197750666165"
}

ACTIVE

{
  "tenant_id": "b11d749b-8eb7-4236-a068-3d94ba3860d6",
  "caller_number": "200",
  "direction": "out",
  "callee_name": "+3228992675",
  "state": "ACTIVE",
  "caller_name": "John Doe",
  "callee_number": "+3228992675",
  "user_extension": "200",
  "id": "b9c06dc1-d1fa-4d29-ad55-01a1f60afc43",
  "timestamp": "1765197769746163"
}

HANGUP

{
  "tenant_id": "b11d749b-8eb7-4236-a068-3d94ba3860d6",
  "caller_number": "200",
  "direction": "out",
  "callee_name": "+3228992675",
  "state": "HANGUP",
  "caller_name": "John Doe",
  "callee_number": "+3228992675",
  "user_extension": "200",
  "id": "b9c06dc1-d1fa-4d29-ad55-01a1f60afc43",
  "timestamp": "1765197781466167"
}
Example 3 — Answered, Held and Resumed External Incoming Call from +3228992675 to extension 200

RINGING

{
  "tenant_id": "b11d749b-8eb7-4236-a068-3d94ba3860d6",
  "caller_number": "+3228992675",
  "direction": "in",
  "callee_name": "John Doe",
  "state": "RINGING",
  "caller_name": "+3228992675",
  "callee_number": "200",
  "user_extension": "200",
  "id": "fc428d3e-d9fb-401f-962c-ba2d813267ea",
  "timestamp": "1765197868066148"
}

ACTIVE

{
  "tenant_id": "b11d749b-8eb7-4236-a068-3d94ba3860d6",
  "caller_number": "+3228992675",
  "direction": "in",
  "callee_name": "John Doe",
  "state": "ACTIVE",
  "caller_name": "+3228992675",
  "callee_number": "200",
  "user_extension": "200",
  "id": "fc428d3e-d9fb-401f-962c-ba2d813267ea",
  "timestamp": "1765197884626183"
}

HELD

{
  "tenant_id": "b11d749b-8eb7-4236-a068-3d94ba3860d6",
  "caller_number": "+3228992675",
  "direction": "in",
  "callee_name": "John Doe",
  "state": "HELD",
  "caller_name": "+3228992675",
  "callee_number": "200",
  "user_extension": "200",
  "id": "fc428d3e-d9fb-401f-962c-ba2d813267ea",
  "timestamp": "1765197900186149"
}

ACTIVE (talking triggered by clicking resume)

{
  "tenant_id": "b11d749b-8eb7-4236-a068-3d94ba3860d6",
  "caller_number": "+3228992675",
  "direction": "in",
  "callee_name": "John Doe",
  "state": "ACTIVE",
  "caller_name": "+3228992675",
  "callee_number": "200",
  "user_extension": "200",
  "id": "fc428d3e-d9fb-401f-962c-ba2d813267ea",
  "timestamp": "1765197912326311"
}

HANGUP

{
  "tenant_id": "b11d749b-8eb7-4236-a068-3d94ba3860d6",
  "caller_number": "+3228992675",
  "direction": "in",
  "callee_name": "John Doe",
  "state": "HANGUP",
  "caller_name": "+3228992675",
  "callee_number": "200",
  "user_extension": "200",
  "id": "fc428d3e-d9fb-401f-962c-ba2d813267ea",
  "timestamp": "1765197921566141"
}
Example 4 — Answered, Internal Call from extension 210 to extension 200 (both users are integrated)

RINGING

{
  "tenant_id": "b11d749b-8eb7-4236-a068-3d94ba3860d6",
  "caller_number": "210",
  "direction": "out",
  "callee_name": "",
  "state": "RINGING",
  "caller_name": "Jane Doe",
  "callee_number": "200",
  "user_extension": "210",
  "id": "b6b87eb5-04e4-4838-81b6-fe6bfa6936bf",
  "timestamp": "1765199880586165"
}

RINGING

{
  "tenant_id": "b11d749b-8eb7-4236-a068-3d94ba3860d6",
  "caller_number": "210",
  "direction": "in",
  "callee_name": "John Doe",
  "state": "RINGING",
  "caller_name": "Jane Doe",
  "callee_number": "200",
  "user_extension": "200",
  "id": "e8461f72-e479-44bd-a312-c51447925a96",
  "timestamp": "1765199881026154"
}

ACTIVE

{
  "tenant_id": "b11d749b-8eb7-4236-a068-3d94ba3860d6",
  "caller_number": "210",
  "direction": "out",
  "callee_name": "John Doe",
  "state": "ACTIVE",
  "caller_name": "Jane Doe",
  "callee_number": "200",
  "user_extension": "210",
  "id": "b6b87eb5-04e4-4838-81b6-fe6bfa6936bf",
  "timestamp": "1765199886706165"
}

ACTIVE

{
  "tenant_id": "b11d749b-8eb7-4236-a068-3d94ba3860d6",
  "caller_number": "210",
  "direction": "in",
  "callee_name": "John Doe",
  "state": "ACTIVE",
  "caller_name": "Jane Doe",
  "callee_number": "200",
  "user_extension": "200",
  "id": "e8461f72-e479-44bd-a312-c51447925a96",
  "timestamp": "1765199886706165"
}

HANGUP

{
  "tenant_id": "b11d749b-8eb7-4236-a068-3d94ba3860d6",
  "caller_number": "210",
  "direction": "out",
  "callee_name": "John Doe",
  "state": "HANGUP",
  "caller_name": "Jane Doe",
  "callee_number": "200",
  "user_extension": "210",
  "id": "b6b87eb5-04e4-4838-81b6-fe6bfa6936bf",
  "timestamp": "1765199895606180"
}

HANGUP

{
  "tenant_id": "b11d749b-8eb7-4236-a068-3d94ba3860d6",
  "caller_number": "210",
  "direction": "in",
  "callee_name": "John Doe",
  "state": "HANGUP",
  "caller_name": "Jane Doe",
  "callee_number": "200",
  "user_extension": "200",
  "id": "e8461f72-e479-44bd-a312-c51447925a96",
  "timestamp": "1765199895606180"
}
Example 5 — External Incoming Call Answered and Transferred to Another User (Blind Transfer)

John Doe (extension 200) receives the call and transfers it to Jane Doe (extension 210):

John Doe RINGING

{
  "tenant_id": "b11d749b-8eb7-4236-a068-3d94ba3860d6",
  "caller_number": "+3228992675",
  "direction": "in",
  "callee_name": "John Doe",
  "state": "RINGING",
  "caller_name": "+3228992675",
  "callee_number": "200",
  "user_extension": "200",
  "id": "f458fc7c-d38b-4530-ae30-bb9855a68aa3",
  "timestamp": "1765200543266170"
}

John Doe ACTIVE

{
  "tenant_id": "b11d749b-8eb7-4236-a068-3d94ba3860d6",
  "caller_number": "+3228992675",
  "direction": "in",
  "callee_name": "John Doe",
  "state": "ACTIVE",
  "caller_name": "+3228992675",
  "callee_number": "200",
  "user_extension": "200",
  "id": "f458fc7c-d38b-4530-ae30-bb9855a68aa3",
  "timestamp": "1765200549566182"
}

John Doe HELD (by clicking transfer on the phone)

{
  "tenant_id": "b11d749b-8eb7-4236-a068-3d94ba3860d6",
  "caller_number": "+3228992675",
  "direction": "in",
  "callee_name": "John Doe",
  "state": "HELD",
  "caller_name": "+3228992675",
  "callee_number": "200",
  "user_extension": "200",
  "id": "f458fc7c-d38b-4530-ae30-bb9855a68aa3",
  "timestamp": "1765200555346177"
}

John Doe types number 210 on the phone and clicks “Blind Transfer”

John Doe HANGUP (hangup triggered by clicking “Blind Transfer” on the phone)

{
  "tenant_id": "b11d749b-8eb7-4236-a068-3d94ba3860d6",
  "caller_number": "+3228992675",
  "direction": "in",
  "callee_name": "John Doe",
  "state": "HANGUP",
  "caller_name": "+3228992675",
  "callee_number": "200",
  "user_extension": "200",
  "id": "f458fc7c-d38b-4530-ae30-bb9855a68aa3",
  "timestamp": "1765200560166190"
}

Jane Doe RINGING (ringing triggered by John doe clicking “Blind Transfer” on the phone)

{
  "tenant_id": "b11d749b-8eb7-4236-a068-3d94ba3860d6",
  "caller_number": "+3228992675",
  "direction": "in",
  "callee_name": "Jane Doe",
  "state": "RINGING",
  "caller_name": "+3228992675",
  "callee_number": "210",
  "user_extension": "210",
  "id": "8dafb129-2a6e-48f5-9173-1ee76f9c2b0b",
  "timestamp": "1765200560366253"
}

Jane Doe ACTIVE

{
  "tenant_id": "b11d749b-8eb7-4236-a068-3d94ba3860d6",
  "caller_number": "+3228992675",
  "direction": "in",
  "callee_name": "Jane Doe",
  "state": "ACTIVE",
  "caller_name": "+3228992675",
  "callee_number": "210",
  "user_extension": "210",
  "id": "8dafb129-2a6e-48f5-9173-1ee76f9c2b0b",
  "timestamp": "1765200574946590"
}

Jane Doe HANGUP

{
  "tenant_id": "b11d749b-8eb7-4236-a068-3d94ba3860d6",
  "caller_number": "+3228992675",
  "direction": "in",
  "callee_name": "Jane Doe",
  "state": "HANGUP",
  "caller_name": "+3228992675",
  "callee_number": "210",
  "user_extension": "210",
  "id": "8dafb129-2a6e-48f5-9173-1ee76f9c2b0b",
  "timestamp": "1765200580127319"
}

Note

Blind transfer redirects call to another callee without negotiating it with the callee internally.

Example 6 — External Incoming Call Answered and Transferred to Another User (Attended Transfer)

John Doe (extension 200) receives the call and transfers it to Jane Doe (extension 210):

John Doe RINGING

{
  "tenant_id": "b11d749b-8eb7-4236-a068-3d94ba3860d6",
  "caller_number": "+3228992675",
  "direction": "in",
  "callee_name": "John Doe",
  "state": "RINGING",
  "caller_name": "+3228992675",
  "callee_number": "200",
  "user_extension": "200",
  "id": "74f93e37-3659-4323-b11d-2b8256a4f984",
  "timestamp": "1765279992905872"
}

John Doe ACTIVE

{
  "tenant_id": "b11d749b-8eb7-4236-a068-3d94ba3860d6",
  "caller_number": "+3228992675",
  "direction": "in",
  "callee_name": "John Doe",
  "state": "ACTIVE",
  "caller_name": "+3228992675",
  "callee_number": "200",
  "user_extension": "200",
  "id": "74f93e37-3659-4323-b11d-2b8256a4f984",
  "timestamp": "1765279998405884"
}

John Doe putting on HOLD and calling Jane Doe to negotiate a call transfer

{
  "tenant_id": "b11d749b-8eb7-4236-a068-3d94ba3860d6",
  "caller_number": "+3228992675",
  "direction": "in",
  "callee_name": "John Doe",
  "state": "HELD",
  "caller_name": "+3228992675",
  "callee_number": "200",
  "user_extension": "200",
  "id": "74f93e37-3659-4323-b11d-2b8256a4f984",
  "timestamp": "1765280000825875"
}

John Doe RINGING (calling Jane Doe)

{
  "tenant_id": "b11d749b-8eb7-4236-a068-3d94ba3860d6",
  "caller_number": "200",
  "direction": "out",
  "callee_name": "",
  "state": "RINGING",
  "caller_name": "John Doe",
  "callee_number": "210",
  "user_extension": "200",
  "id": "91ed30fd-42dc-457e-86a0-b0dae1fe6be4",
  "timestamp": "1765280004325868"
}

Jane Doe RINGING (called by John Doe) - use transfer_caller_number property so Jane Doe can know it is the attended transfer

{
  "tenant_id": "b11d749b-8eb7-4236-a068-3d94ba3860d6",
  "caller_number": "200",
  "direction": "in",
  "callee_name": "Jane Doe",
  "state": "RINGING",
  "caller_name": "John Doe",
  "callee_number": "210",
  "user_extension": "210",
  "id": "1e651e94-477f-4dfc-b0a8-67f0f6c3f85f",
  "timestamp": "1765280004825883",
  "transfer_caller_number": "+3228992675"
}

Jane Doe ACTIVE (answers to John Doe) - use transfer_caller_number property so Jane Doe still has info about the attended transfer original caller number

{
  "tenant_id": "b11d749b-8eb7-4236-a068-3d94ba3860d6",
  "caller_number": "200",
  "direction": "in",
  "callee_name": "Jane Doe",
  "state": "ACTIVE",
  "caller_name": "John Doe",
  "callee_number": "210",
  "user_extension": "210",
  "id": "1e651e94-477f-4dfc-b0a8-67f0f6c3f85f",
  "timestamp": "1765280010745864",
  "transfer_caller_number": "+3228992675"
}

John Doe ACTIVE (answered by Jane Doe)

{
  "tenant_id": "b11d749b-8eb7-4236-a068-3d94ba3860d6",
  "caller_number": "200",
  "direction": "out",
  "callee_name": "Jane Doe",
  "state": "ACTIVE",
  "caller_name": "John Doe",
  "callee_number": "210",
  "user_extension": "200",
  "id": "91ed30fd-42dc-457e-86a0-b0dae1fe6be4",
  "timestamp": "1765280010745864"
}

John negotiates transfer with Jane and hangs up the phone which causes 3 events to fire, two hangups on John’s side (external and with Jane) and call initiation between Jane and the external caller.

Jane Doe ACTIVE (Jane is speaking to the external caller that John was called by)

{
  "tenant_id": "b11d749b-8eb7-4236-a068-3d94ba3860d6",
  "caller_number": "+3228992675",
  "direction": "in",
  "callee_name": "Jane Doe",
  "state": "ACTIVE",
  "caller_name": "+3228992675",
  "callee_number": "210",
  "user_extension": "210",
  "id": "1e651e94-477f-4dfc-b0a8-67f0f6c3f85f",
  "timestamp": "1765280019045878"
}

John Doe HANGUP (with initial external caller)

{
  "tenant_id": "b11d749b-8eb7-4236-a068-3d94ba3860d6",
  "caller_number": "+3228992675",
  "direction": "in",
  "callee_name": "John Doe",
  "state": "HANGUP",
  "caller_name": "+3228992675",
  "callee_number": "200",
  "user_extension": "200",
  "id": "74f93e37-3659-4323-b11d-2b8256a4f984",
  "timestamp": "1765280019025882"
}

John Doe HANGUP (with Jane Doe)

{
  "tenant_id": "b11d749b-8eb7-4236-a068-3d94ba3860d6",
  "caller_number": "200",
  "direction": "out",
  "callee_name": "Jane Doe",
  "state": "HANGUP",
  "caller_name": "John Doe",
  "callee_number": "210",
  "user_extension": "200",
  "id": "91ed30fd-42dc-457e-86a0-b0dae1fe6be4",
  "timestamp": "1765280034185872"
}

Jane Doe/ Original caller HANGUP

{
  "tenant_id": "b11d749b-8eb7-4236-a068-3d94ba3860d6",
  "caller_number": "+3228992675",
  "direction": "in",
  "callee_name": "Jane Doe",
  "state": "HANGUP",
  "caller_name": "+3228992675",
  "callee_number": "210",
  "user_extension": "210",
  "id": "1e651e94-477f-4dfc-b0a8-67f0f6c3f85f",
  "timestamp": "1765280031385872"
}
Example 7 — Call Summary event

Each of the previous examples would also have Call Summary event(s) present if John Doe and/or Jane Doe had summaries feature turned on.

This is the fourth event from Example 1 shown separately here only for clarity.

{
  "tenant_id": "b11d749b-8eb7-4236-a068-3d94ba3860d6",
  "caller_number": "+3228992675",
  "direction": "in",
  "callee_name": "John Doe",
  "state": "SUMMARY_REPORTING",
  "caller_name": "",
  "callee_number": "200",
  "user_extension": "200",
  "id": "590e9492-cbbc-4252-8205-7eb595099b5f",
  "timestamp": 1765209708105127,
  "summary": {
    "language": "en-GB",
    "content": {
      "meeting_notes_sections": [
        {
          "conclusion": [
            "The primary objective of this call was to evaluate the summary function, specifically for scenarios involving both external incoming and outbound call types."
          ],
          "section_title": "Purpose of the Call",
          "topics": [
            {
              "conclusion": [
                "The call was a controlled test designed to assess the performance and output of the summary generation system for different call interaction scenarios."
              ],
              "topic_title": "Summary Plan Testing",
              "points": [
                "John Doe initiated the call stating its purpose as a test for the summary plan for an external incoming call, noting it was an outbound call.",
                "External Person 1 confirmed the purpose, reiterating it as a test call for summary events for an external incoming call, also identifying it as an outbound call.",
                "Both participants expressed interest in observing the generated summary."
              ]
            }
          ],
          "section_number": 1
        }
      ],
      "meeting_title": "Phone call between External Person 1 and John Doe - 8th December 2025",
      "focus_topics": [
        "Test call for summary generation",
        "Evaluation of summary output"
      ],
      "alfie_recommendations": {
        "conclusion": "It's great to see proactive testing of the summary system! This call provides valuable data for refinement. Keep up the excellent work! 🚀",
        "missed": [
          "No specific criteria or parameters for evaluating the summary were explicitly discussed during the test call."
        ],
        "suggestions": [
          "Review the generated summary carefully to confirm it meets the expected output for test calls.",
          "Consider documenting specific metrics or features that need to be tested in future summary generation tests."
        ]
      },
      "action_items": [],
      "meeting_information": {
        "date_time": "2025-12-08 16:56:15",
        "location": "Phone Call",
        "attendees": [
          "External Person 1",
          "John Doe"
        ]
      },
      "quick_summary": [
        "The call was conducted as a test for the summary generation plan for both external incoming and outbound calls.",
        "The participants aimed to evaluate how the call summary appears for different call types."
      ]
    }
  }
}

Note

If this was the internal call between John Doe and Jane Doe, and both of them had the Call Summaries feature enabled, then:

  • A two SUMMARY_REPORTING events would be generated, one for each participant.
  • In each event, language would be set to extension’s default language. Languages currently supported are English (en-US or en-GB), Dutch (nl-BE) and French (fr-FR).

5. Event Dispatching Rules

5.1 Calling Events

  • Sent to all internal call participants who have the integration feature enabled.

5.2 Summary Events

  • Sent to all internal call participants who have the integration and call summaries enabled.

Note

Internally, call queue members are also treated as call participants. They receive ringing events, but call summary events are sent only if they answer the call.

6. Summary

Telsmart sends real-time call event data to your system as soon as an integrated user is called. Each event represents a moment in the call’s lifecycle, and these can be used to create dynamic features such as:

  • Incoming call notifications
  • Active call timers
  • “On hold” indicators
  • Automatic popup closure when a call ends

The data format is standardised.