Events

We support the following webhook events:
  • call_ended: Triggered when a call is completed and analyzed
  • contact_status_changed: Triggered when a contact’s status changes

Call Ended Event

When a call is completed and analyzed, we’ll send a webhook with detailed information about the call, including the transcript, analysis results, and complete contact information (in the same format as the /v1/get-contact/{contactId} API endpoint). Call Status Call status can be one of the following:
  • COMPLETED: A conversation occurred with the contact
  • ANSWERED: A call occurred but another attempt will be made to reach the contact
  • NOT_REACHED: We weren’t able to reach the contact
  • VOICEMAIL: We got the voicemail of the contact
  • ERROR: An error occurred in the call
Call outcome and call analysis After each customer call, telli automatically analyzes the transcript to extract key insights, returning two kinds of result, call outcome outputs and call analysis outputs:
  • call_outcome: custom call analysis fields that you can configure in the telli app
    {
      "custom_lost_reason": {             // call analysis field name
        "value": "PRODUCT_TOO_EXPENSIVE", // call analysis value
        "fieldSchema": ...                // information about schema
      }
    }
    
  • call_analysis: system-provided call analysis fields Notice that the call_analysis format is different from the call_outcome format:
    {
      "appointment": {
        "value": true,                     // boolean: is the value present?
        "details": "2025-02-18T15:30:00Z", // additional details (string or number)
      }
    }
    

Example Payload

{
  "event": "call_ended",
  "call": {
    "agent_id": "d8931604-92ad-45cf-9071-d9cd2afbad0c",
    "attempt": 1,
    "booked_slot_for": "2025-02-24T15:30:00Z",
    "call_analysis": {
      "appointment": {
        "details": "2025-02-18T15:30:00Z",
        "value": true
      },
      "interest": {
        "details": "The customer is interested in buying an ice cream machine",
        "value": true
      },
      "summary": {
        "details": "A call between an agent and a customer talking about buying an ice cream machine",
        "value": true
      }
    },
    "call_id": "b4a05730-2abc-4eb0-8066-2e4d23b53ba9",
    "call_length_min": 2,
    "call_outcome": {
      "custom_lost_reason": {
        "fieldSchema": {
          "enum": [
            "CUSTOMER_NOT_INTERESTED",
            "CUSTOMER_PREVIOUSLY_CONTACTED",
            "PRODUCT_TOO_EXPENSIVE"
          ],
          "type": ["string", "null"]
        },
        "value": "PRODUCT_TOO_EXPENSIVE"
      }
    },
    "call_status": "COMPLETED",
    "contact_id": "6bd1e7e0-6d00-4c0b-ad5b-daa72457a27d",
    "direction": "outbound",
    "ended_at": 1731957002078,
    "external_contact_id": "external-123",
    "from_number": "+17755719467",
    "loop_id": "ba99c99d-19b9-4a0d-8df6-3e213088989a",
    "recording_url": "<url-of-recording>",
    "started_at": 1731956932264,
    "to_number": "+16506794960",
    "transcript": "Agent: Hello...",
    "transcriptObject": [
      {
        "content": "Hello...",
        "role": "agent"
      }
    ],
    "triggered_at": 1731956924302
  },
  "contact": {
    "call_attempts": 1,
    "contact_details": {
      "company": "Art Studio Inc",
      "notes": "Interested in solar panels"
    },
    "contact_id": "6bd1e7e0-6d00-4c0b-ad5b-daa72457a27d",
    "created_at": "2024-11-18T15:30:00.000Z",
    "email": "[email protected]",
    "external_contact_id": "external-123",
    "first_name": "Frida",
    "gender": "F",
    "in_call_since": null,
    "last_name": "Kahlo",
    "next_call_at": null,
    "phone_number": "+14155552671",
    "reached_at": "2024-11-18T15:45:00.000Z",
    "salutation": "Ms.",
    "status": "reached",
    "timezone": "America/Los_Angeles"
  }
}

Contact Status Changed Event

The contact status changed event helps you track the progress of contacts through your calling campaign. Each contact moves through different states as they are processed by the system.

Contact Statuses

Contacts can have the following statuses:
  • new: Contact has not been called yet
  • pending: Contact is in dialer and we are trying to reach them
  • closed: Dialer was exhausted and we are not trying to call them anymore
  • reached: Contact was reached and had a conversation. We are not trying to call them anymore

Example Payload

{
  "event": "contact_status_changed",
  "contact": {
    "contact_id": "6bd1e7e0-6d00-4c0b-ad5b-daa72457a27d",
    "external_contact_id": "external-123",
    "status": "reached",
    "status_updated_at": "2024-03-18T15:30:00Z",
    "reached_at": "2024-03-18T15:30:00Z",
    "first_name": "Frida",
    "last_name": "Kahlo",
    "phone_number": "+14155552671",
    "email": "[email protected]"
  }
}