What are Call Insights?


Call insights are richer data points to help you uncover details about your voice calls and are computed by Exotel's AI system.

At times, the call statuses received from operators aren't correct or due to the nature of telecom signalling the status are not computed correctly if calls are terminated during the hangup message.

Whenever we make a call from our phone, we know that the number on the other side is ringing, switched off, busy etc. However, in the telephony stack where machines are making and receiving calls, such information is dependent on the dated telephony infrastructure and protocols which at times isn't computing the correct information.

The aim of this solution is to give you more better call statuses and richer call insights as computed by our AI system which were not possible with traditional telephony data.


How can I use this?


This feature is currently available under private beta only to select clients and is chargeable. If you are interested, speak to your account manager or drop an email to hello@exotel.in and we'd review your request.

How to capture Call Insights via Passthru?


Once this is enabled for your account, you can subscribe to Call Insights data in Passthru Applet like below (please note, Passthru needs to be present immediately after Connect Applet where the destination number(s) will be attempted and insights would be computed).



If an application URL is set in Passthru applet, Exotel will make a GET request to the URL with the call details as URL-encoded HTTP query parameters as per the documentation present here. In addition to existing Passthru parameters, Exotel will pass ‘Insights’ data if it is subscribed.


Sample Payload (Query Params):

CallFrom: 09953125068

CallSid: 6a58ba2eb2a46557e77875bc5573142o

CallTo: 03340585504

CallType: client-hangup

Created: Mon, 24 Feb 2020 02:18:27

CurrentTime: 2020-02-24 02:18:46

DialCallDuration: 0

DialCallStatus: canceled

DialWhomNumber: 09953125XXX

Direction: incoming

EndTime: 1970-01-01 05:30:00

flow_id: 270094

From: 09953125068

StartTime: 2020-02-24 02:18:20

tenant_id: 15

To: 03340585504
Legs[0][Cause]: 1003

Legs[0][CauseCode]: RING_TIMEOUT

Legs[0][Number]: 09953125XXX

Legs[0][OnCallDuration]: 0

Legs[0][Type]: single

Legs[0][DisconnectedBy]: Caller

Insights[DialCallStatus]: no-answer
Insights[Legs][0][DisconnectedBy]: Operator

Insights[Legs][0][Status]: no-answer
Insights[Legs][0][DetailedStatus]: NO_ANSWER_TONE
Insights[Legs][0][RingingDuration]: 23

Insights[Legs][0][Number]: 09953125XXX

Insights[Legs][0][OnCallDuration]: 0

*Insights[Legs] array would be contain `n` elements where n is the unique numbers attempted during the connect applet execution.

**The outer 'Legs' array is powered based on data provided by the operators whereas the parameters within Insights[Legs] is computed by Exotel's internal AI system.


Explanation


  • Insights[DialCallStatus]

    This is the overall status of the dial attempt of the connect applet as computed by Exotel's AI system. If more than 1 destination number was attempted, this status would be set based on last attempt.

    Possible statuses and meaning

    DialCallStatusMeaning
    completedThe call was answered and has ended normally
    no-answer
    The call was not answered by the caller (it was ringing or no-answer message was played)
    busyThe call could not be connected as the destination number was busy on another call.
    failedThe call could not be completed as dialled due to invalid phone number, number being switched off etc.
    canceled

    The call was disconnected by Caller (Leg1) during attempt or ringing of destination number.




  • Insights[Legs][0][DetailedStatus]

    DialCallStatus powers the overall status of the call. This field powers more granular status of the call leg attempt to understand detailed reason.

    DetailedStatus

    DialCallStatus

    Description

    BUSY_REJECTED

    busy


    Destination number was ringing wherein user disconnected the call and busy message tone was heard after ringing

    BUSY_TONE

    busy


    Busy message tone was heard while dialling the destination number without any ringing

    CALL_WAITING

    busy


    Call waiting message was heard while dialling the destination number

    NO_ANSWER_RINGING

    no-answer


    The destination number was ringing and no one answered

    NO_ANSWER_RINGING_TIMEOUT

    no-answer


    The destination number was ringing and no one answered until the ringing timeout threshold was reached (as defined in Connect applet, default is 30 seconds)

    NO_ANSWER_TONE

    no-answer


    The destination number was ringing and no answer message was heard.

    FAILED_SUBSCRIBER_UNAVAILABLE

    failed


    The destination number is switched off or out of network coverage area.

    FAILED_INVALID_DESTINATION_NUMBER

    failed


    The destination number is invalid.


    FAILED_SUBSCRIBER_ERROR

    failed


    Call attempt to destination number has failed due to a subscriber error such as incoming call is barred or is number is temporarily disconnected.

    FAILED_OPERATOR_ERROR

    failed


    Call attempt to destination number has failed due as the operator could not connect the call. Scenarios such as the entire call attempt only had dead air sound or beep tone.

    FAILED_UNKNOWN_ERROR

    failed


    Call attempt to destination number has failed and the reason is not known. This can occur if the failure message is insufficient or unknown to the system.

    CANCELED_RINGING

    canceled


    Call was disconnected by Caller during ringing of destination number before the timeout period elapsed or no answer message was played.


    To be used for DialCallStatus/Leg2Status only and not for 'Legs'

    CANCELED_INCOMPLETE_ATTEMPT

    canceled


    Call was disconnected by Caller during attempt (within 10 seconds) of destination number without conclusion of terminal state (this can include insufficient message, beep, silence or unknown).


    To be used for DialCallStatus/Leg2Status only and not for 'Legs'

    CALL_COMPLETED

    completed


    Call was connected and picked up

    NO_DIAL

    N/A (empty)


    Outgoing Leg was not present at all.


  • Insights[Legs][0][DisconnectedBy]

    This indicates who hung up the call or was responsible for the hang up of the call.

    Possible Values

    Description

    Caller

    In case of Incoming calls, the number dialing into the Exophone (virtual number) has disconnected the call i.e. ‘From’ number.

    Callee

    The call was hung up by the destination number who was dialed i.e. Leg[i][Number] where i represents the index of the numbers returned from Connect URL.


    For a single number, Legs[0][Number] would indicate the number which disconnected.

    Exotel

    This would indicate that Exotel has initiated the disconnection of the call. It will include cases such as ‘Ringing Timeout’ (the call attempt exceeded the maximum time threshold) or ‘Time Limit (the call conversation exceeded the maximum time) as set in Connect Applet or allowed by Exotel (default values).

    Operator

    This would indicate that the disconnection was due to an underlying connectivity cause of the network carrier. It will include cases such as ‘Busy without ring’, ‘No answer message’, ‘Failed calls’ etc.

    NA

    The source of the hangup is not applicable for this case.


  • Insights[Legs][0][RingingDuration]: This indicates how long the destination number rang (in seconds). This would be set to 0 if the handset didn't ring.

  • Insights[Legs][0][Number]: This would indicate the number corresponding to the Leg that was attempted.

  • Insights[Legs][0][OnCallDuration]: This would indicate the duration the corresponding leg that was attempted was on call i.e. time spent (in seconds) after answering the call. 

*If you have more than 1 destination number, the array would contain insights about all the numbers that were attempted like Insights[Legs][0][], Insights[Legs][1][] .... Insights[Legs][n][] where n is the unique numbers attempted during the connect applet execution.