Notifications are sent to the specified URL at various important events in a conversation. The notifications are sent as a POST request with the data in JSON format.
Types of notifications and data
Created
When an incoming call starts, a created
message is sent.
{
"call_id": "58f1a078416b-1531150397.972",
"timestamp": "2019-07-20T13:17:39+00:00",
"status": "created",
"version": "v2",
"direction": "inbound",
"caller": {
"number": "+31508009008",
"name": null,
"account_number": null,
"user_numbers": []
},
"destination": {
"number": "+31508009000"
}
}
- call_id: A unique string to identify the call.
- timestamp: A date and time when the webhook is generated in ISO 8601 format.
- status: The status of a conversation. For this notification type, it is
created
. - version: A version attribute that can be used in the future to migrate to another version of the webhooks. At this moment, it is always
v2
. - direction: Whether a conversation is incoming (
inbound
) or outgoing (outbound
). The created event is only sent for incoming conversations. - caller: The details about the caller.
- caller.account_number: This information is not sent with the
created
event. - caller.number: The phone number the caller is dialing out from.
- caller.user_numbers: This information is not sent with the
created
event. - caller.name: This information is not sent with the
created
event. - destination: The details of where the call is going.
- destination.number: The phone number the caller has entered.
Ringing
A ringing
notification is sent when phones start ringing due to an incoming call.
It is possible that multiple ringing
notifications are sent in succession when new devices start ringing.
{
"call_id": "24c562241e9f-1502721212.159",
"timestamp": "2017-07-20T13:17:39+00:00",
"status": "ringing",
"version": "v2",
"direction": "inbound",
"caller": {
"account_number": null,
"user_numbers": [],
"number": "+31508009044",
"name": "John Doe"
},
"destination": {
"number": "+31508009000",
"targets": [
{
"account_number": 234,
"user_numbers": ["678"],
"number": "+31508009000",
"name": "Jane Doe"
},
{
"account_number": 456,
"user_numbers": ["789"],
"number": "+31508009000",
"name": "Jan Jansen"
}
]
}
}
- call_id: A unique string to identify the call.
- timestamp: A date and time when the webhook is generated in ISO 8601 format.
- status: The status of a call. For this notification type, it's
ringing
. - version: A version attribute that can be used in the future to migrate to a different version of webhooks. Currently, it is always
v2
. - direction: Whether a call is incoming (
inbound
) or outgoing (outbound
). Calls between colleagues are listed asoutbound
. - caller: The details about the caller.
- caller.account_number: The internal number of the VoIP account (where available, for incoming calls this is usually
null
). - caller.number: The phone number the caller is calling from.
- caller.user_numbers: The internal numbers of the users who have set that they are reachable on this VoIP account (where available, for incoming calls this is usually an empty array).
- caller.name: The name of the caller.
- destination: Details about where the call is going.
- destination.number: The phone number the caller has entered.
- destination.targets: The phones that are ringing for this call. Phones that are unreachable are not displayed.
- destination.targets.account_number: The internal number of the VoIP account, where available.
- destination.targets.user_numbers: The internal numbers of the users who have set that they are reachable on this VoIP account (where available, may be an empty array).
- destination.targets.number: The number the phone is being called on. Usually, this is the same as destination.number, but the number changes, for example, when a call is forwarded.
- destination.targets.name: The name of the person being called. For incoming calls, this is almost always
null
.
in-progress
An in-progress
notification is sent when a call is answered.
Note! The target
that answers the call is not always one of the devices that initially rang. Due to call pickup, it may happen that the call is answered on a different device.
{
"call_id": "24c562241e9f-1502721212.159",
"timestamp": "2017-07-20T13:17:39+00:00",
"status": "in-progress",
"version": "v2",
"direction": "inbound",
"caller": {
"account_number": null,
"user_numbers": [],
"number": "+31508009044",
"name": "John Doe"
},
"destination": {
"number": "+31508009000",
"target": {
"account_number": 234,
"user_numbers": ["678"],
"number": "+31508009000",
"name": "Jane Doe"
}
}
}
- call_id: A unique string to identify the call.
- timestamp: A date and time when the webhook is generated in ISO 8601 format.
- status: The status of a call. For this notification type, it is
in-progress
. - version: A version attribute that can be used in the future to migrate to a different version of the webhooks. Currently, it is always
v2
. - direction: Whether a call is incoming (
inbound
) or outgoing (outbound
). Calls between colleagues are listed asoutbound
. - caller: The information about the caller.
- caller.account_number: The internal number of the VoIP account (where available, for incoming calls this is usually
null
). - caller.number: The phone number the caller is dialing from.
- caller.user_numbers: The internal numbers of the users who have set themselves as reachable on this VoIP account (where available, for incoming calls this is usually an empty array).
- caller.name: The name of the caller.
- destination: The information about where the call is going.
- destination.number: The phone number that the caller has dialed.
- destination.target: The information of the phone which answered the call.
- destination.target.account_number: The internal number of the VoIP account, if available.
- destination.target.number: The number the phone is being called at. Usually, this is the same as destination.number, but the number can change, for example, when a call is forwarded.
- destination.target.user_numbers: The internal numbers of the users who have set themselves as reachable on this VoIP account (where available, can be an empty array).
- destination.target.name: The name of the person being called. For incoming calls, this is almost always
null
.
ended
An ended
notification is sent when a conversation is ended. There are a few different reasons why a conversation may end.
An ended
notification can be sent after an in-progress
notification if the conversation is hung up by one of the participants, after a ringing
notification if nobody answered, or as the only notification if no device is reachable.
{
"call_id": "24c562241e9f-1502721212.159",
"timestamp": "2017-07-20T13:17:39+00:00",
"status": "ended",
"reason": "completed",
"version": "v2",
"direction": "inbound",
"caller": {
"account_number": null,
"user_numbers": [],
"number": "+31508009044",
"name": "John Doe"
},
"destination": {
"number": "+31508009000"
}
}
- call_id: A unique string to identify the call.
- timestamp: A date and time of the moment the webhook is generated in ISO 8601 format.
- status: The status of a call. For this notification type, it is
ended
. - reason: The reason why a call has ended. The reason can have one of the following values:
- completed: The call was successfully completed.
- busy: The call was rejected, the called party is busy.
- no-answer: No one answered the call, which can have different reasons.
- failed: An error occurred preventing the call from being established.
- canceled: The caller hung up before anyone could answer.
- abandon: When a caller disconnects while waiting in the queue.
- version: A version attribute that may be used in the future to migrate to a different version of the webhooks. Currently, it is always
v2
. - direction: Whether a call is incoming (
inbound
) or outgoing (outbound
). Calls between colleagues are listed asoutbound
. - caller: Information about the caller.
- caller.account_number: The internal number of the VoIP account (where available, for incoming calls this is actually always
null
). - caller.number: The telephone number the caller is calling from.
- caller.user_numbers: The internal numbers of the users who have set themselves to be reachable on this VoIP account (where available, for incoming calls this is actually always an empty array).
- caller.name: The name of the caller.
- destination: Information about where the call is going.
- destination.number: The telephone number the caller has dialed.
warm-transfer
A warm-transfer
notification is sent when a call is transferred "warm." In a warm transfer, the transferor first calls the new participant, the new participant answers, speaks with the transferor, and then the call is transferred.
The transfer from the transferor to the third party also generates a ringing
and an in-progress
notification with its own call_id
. During a transfer, these two calls are merged into a single call. The call_id
of one of the two calls is then used for the call after the transfer. The other call_id
is sent with the transfer as the merged_id
and then expires.
{
"call_id": "24c562241e9f-1502721212.159",
"merged_id": "24c562241e9f-1502719948.132",
"timestamp": "2017-07-20T13:17:39+00:00",
"status": "warm-transfer",
"version": "v2",
"direction": "inbound",
"caller": {
"account_number": null,
"user_numbers": [],
"number": "+31508009044",
"name": "John Doe"
},
"destination": {
"number": "+31508009000",
"target": {
"account_number": 246,
"number": "246",
"user_numbers": ["680"],
"name": null
}
},
"redirector": {
"account_number": 234,
"number": "+31508009000",
"user_numbers": ["678"],
"name": "Jane Doe"
}
}
- call_id: A unique string to identify the call, taken from one of the previous calls.
- merged_id: The call_id of the other previous conversation that will no longer be used.
- timestamp: A date and time of the moment the webhook is generated in ISO 8601 format.
- status: The status of a conversation. For this notification type, it is
transfer
. - version: A version attribute that may be used in the future to migrate to a different version of the webhooks. Currently, it is always
v2
. - direction: Whether a conversation is inbound (
inbound
) or outbound (outbound
). Conversations between colleagues are listed asoutbound
. - caller: Data about the person from the old conversation being transferred.
- caller.account_number: The internal number of the VoIP account (where available, for incoming calls this is almost always
null
). - caller.number: The phone number with which the transfer is made.
- caller.user_numbers: The internal numbers of the users who have set themselves to be reachable on this VoIP account (where available).
- caller.name: The name of the forwarded caller.
- destination: The data about the person to whom the call is being forwarded.
- destination.number: The phone number that the redirector has entered.
- destination.target: The data of the phone that answered the call.
- destination.target.account_number: The internal number of the VoIP account, where available.
- destination.target.number: The number that the phone is being called on. Usually this is the same as destination.number, but the number may change, for example, when a call is forwarded.
- destination.target.user_numbers: The internal numbers of the users who have set themselves to be reachable on this VoIP account (where available, can be an empty array).
- destination.target.name: The name of the person being called. This is usually null.
- redirector: The data of the caller who is performing the call forwarding.
- redirector.account_number: The internal number of the VoIP account, where available.
- redirector.number: The number on which the redirector was called (if it was a called) or the number with which the redirector called (if it was a caller).
- redirector.user_numbers: The internal numbers of the users who have set themselves as reachable on this VoIP account (where available, may be an empty array).
- redirector.name: The name of the person being called. This can be
null
.
cold-transfer
A cold-transfer
notification is sent when a call is transferred "cold", meaning that the transferrer calls the new participant and transfers the call without waiting or knowing who will answer the call.
There are two main differences between a cold-transfer
and a warm-transfer
:
- In a warm transfer, only one person is called, while in a cold transfer, there can be multiple recipients (for example, if the call is transferred to a ring group).
- For a warm transfer, both
ringing
andin-progress
notifications are generated. In a cold transfer, only aringing
notification is given, and thein-progress
notification is only sent if the third party accepts the call.
The conversation from the forwarder to the third party also generates a "ringing" notification with its own "call_id". During a transfer, these two conversations are merged into a single conversation. The call_id of one of the two conversations is then used for the conversation after the transfer. The other call_id is passed along in the transfer as the merged_id and then expires.
{
"call_id": "24c562241e9f-1502721212.159",
"merged_id": "24c562241e9f-1502719948.132",
"timestamp": "2017-07-20T13:17:39+00:00",
"status": "cold-transfer",
"version": "v2",
"direction": "inbound",
"caller": {
"account_number": null,
"user_numbers": [],
"number": "+31508009044",
"name": "John Doe"
},
"destination": {
"number": "499",
"targets": [
{
"account_number": 246,
"number": "499",
"user_numbers": ["680"],
"name": null
},
{
"account_number": 289,
"number": "499",
"user_numbers": ["686"],
"name": null
}
]
},
"redirector": {
"account_number": 234,
"number": "+31508009000",
"user_numbers": ["678"],
"name": "Jane Doe"
}
}
- call_id: A unique string to identify the call, taken from one of the previous calls.
- merged_id The call_id of the other previous call, which will no longer be used.
- timestamp: A date and time of when the webhook is generated in ISO 8601 format.
- status: The status of a call. For this notification type it is
transfer
. - version: A version attribute that can be used in the future to migrate to a different version of the webhooks. At this time, it is always
v2
. - direction: Whether a call is incoming or outgoing. At this time, only incoming calls are supported, and this value is always
inbound
. - caller: The details about the participant of the old call being transferred.
- caller.account_number: The internal number of the VoIP account (where available, for incoming calls this is usually
null
). - caller.number: The phone number that the transferred call is dialing out to.
- caller.user_numbers: The internal numbers of the users who have set themselves as reachable on this VoIP account (where available).
- caller.name: The name of the transferred call participant.
- destination: The details about the person to whom the call is being transferred.
- destination.number: The phone number entered by the redirector.
- destination.targets: The data of the phone(s) that ring for this redirection.
- destination.targets.account_number: The internal number of the VoIP account, where available.
- destination.targets.number: The number to which the phone call is forwarded. Usually, this is the same as destination.number, but the number may change, for example when a call is being forwarded.
- destination.targets.user_numbers: The internal numbers of the users who have set that they can be reached on this VoIP account (where available, can be an empty array).
- destination.targets.name: The name of the person being called. This is usually
null
. - redirector: The data of the caller who performs the redirection.
- redirector.account_number: The internal number of the VoIP account, where available.
- redirector.number: The number that was called (if it was a callee) or the number with which the redirector called (if it was a caller).
- redirector.user_numbers: The internal numbers of the users who have set that they can be reached on this VoIP account (where available, can be an empty array).
- redirector.name: The name of the person being called. This can be
null
.
Order of notifications
Multiple notifications are sent for each conversation. The notifications that are sent depend on how the conversation is conducted. Below, the order of notifications for the most common types of conversations is discussed.
Simple conversation
A successful conversation with two participants:
- ringing - A calls B
- in-progress - A calls B
- ended - A calls B (reason:
completed
)
The phone is not being answered
The phone of the person being called is ringing, but not being answered.
- ringing - A calls B
- ended - A calls B (reason:
busy
orno-answer
depending on the device)
The person being called is unavailable
The person being called is unavailable (for example, because their phone is on Do Not Disturb), so their phone is not ringing and they are not answering.
- ended - A calls B (reason:
busy
)
Attended transfer
During an attended transfer, A first calls B, after which one of the participants transfers the call to Participant C. The participant first calls C, and only after they have spoken, the call is transferred. After the transfer, only the other participants A and C are in the call.
- ringing - A calls B
- in-progress - A calls B
- ringing - B calls C
- in-progress - B calls C
- warm-transfer - B connects A and C
- ended - A and C hang up (reason:
completed
)
Blind transfer
Bij een blind transfer (koude doorschakeling) belt A eerst met B, waarna een van de deelnemers het gesprek doorverbind naar deelnemer C. De deelnemer schakelt daarvoor direct door naar C, zonder te wachten of C beschikbaar is.
- ringing - A belt B
- in-progress - A belt B
- ringing - B belt C
- cold-transfer - B verbindt A en C
- in-progress - A belt C
- ended - A belt niet meer met C (reden:
completed
)
Semi-attended transfer
During a semi-attended transfer, A first calls B, after which one of the participants forwards the call to participant C. The participant tries to call C first, but transfers the call before C answers.
- ringing - A calls B
- in-progress - A calls B
- ringing - B calls C
- cold-transfer - B connects A and C
- in-progress - A calls C
- ended - A does not call C anymore (reason:
completed
)
Call pickup
When two phones are in the same pickup group, it is possible to answer a call that is intended for the other phone from one of the phones.
- Ringing - A calls B
- In progress - A talks with C
- Ended - A ends the call with C (reason:
completed
)
Call forwarding
When a user sets up their phone to automatically forward incoming calls to another number:
- ringing - A calls B
- ringing - A calls B & C
- in progress or ended, depending on whether someone answers.
Example integrations
Below are some examples of integrations in combination with Zapier: