Skip to main content

Webhooks

After every call, HubTalk AI sends an HTTP POST request to your configured webhook URL with a comprehensive JSON payload containing call metadata, transcripts, analytics, and custom variables.

Configuration

Configure the webhook URL in the agent editor under Webhook in the right panel. The webhook fires once per call event (each call attempt).

Payload Reference

Event Identification

call_event_uuid
string
required
Unique identifier for the call event (a specific dial attempt). A single call may have multiple attempts, each with its own call_event_uuid.

Call Information

call_type
string
required
Type of call.
  • outbound — Bot calls the customer
  • inbound — Customer calls the bot
call_uuid
string
required
UUID of the parent call record. Groups all dial attempts for one customer within a campaign.
phone_number
string
required
Customer phone number in international format (without +).
call_status
string
required
Final call status:
  • COMPLETED — Call finished successfully
  • FAILED — Call failed
  • PENDING — Awaiting processing
  • IN_PROGRESS — Currently active

Agent Information

agent_wb_name
string
Display name of the voice agent that handled the call.
agent_uuid
string
Unique identifier of the agent.
call_campaign_uuid
string
UUID of the calling campaign (for outbound calls).

Attempt Details

attempt_number
integer
Dial attempt number. 1 = first attempt, 2 = first retry, etc.
status
string
Call event status:
  • PENDING — Awaiting processing
  • ANSWERED — Call was answered
  • NO_ANSWER — No answer
  • BUSY — Line was busy
  • FAILED — Error occurred

Timestamps & Duration

call_datetime
string
Call start time in ISO 8601 format (UTC). Example: 2026-02-02T10:20:24Z
end_datetime
string
Call end time in ISO 8601 format (UTC). Example: 2026-02-02T10:22:05Z
duration
integer
Actual conversation duration in seconds.
bill_duration
integer
Billable duration in seconds. May differ from duration due to rounding or technical pause deductions. This is the value used for billing.

Language & Voice

initial_language
string
Language the bot started the conversation in. Example: RU, KZ, EN
final_language
string
Language the conversation ended in (may differ if the caller requested a switch).
voice_gender
string
TTS voice gender: MALE or FEMALE.

Results

result
string
Call result classification. Example: CALL_ANSWERED_INFORMATION_TRANSFERRED
final_result
string
Copy of the result field.

Audio Recording

audio_recording_url
string
S3 object key for the call recording (not a direct download URL). To get a download link, generate a presigned URL via S3 API. Example: 2026/02/02/10/0ca800d9-70ec-4e0c-a119-29d27185efce.mp3

Transcript & Conversation

full_transcript
string
Full text transcript in role: text format. Roles: assistant (bot), user (customer). Utterances separated by \n.
conversation
object
Structured conversation split by role — separate arrays of bot and customer utterances:
{
  "assistant": ["Hello! How can I help?", "..."],
  "user": ["I need info about loans", "..."]
}
conversation_path
string
Path to detailed LLM logs for this conversation. Used for debugging and analysis.

Answers & Analysis

mapped_answers
object
Structured messages with metadata:
  • messages — Array of {role, content, timestamp} objects
  • summary — Statistics: total_messages, user_messages, assistant_messages
summary
string
LLM-generated conversation summary in a few sentences.
sentiment_analysis
string
Customer sentiment analysis: positive, neutral, or negative.

Analytics Data

analytics_data
object
Extended analytics including:
  • trace_id — Trace ID for debugging
  • agent_id, user_id, conversation_id — Identifiers
  • reports.dynamic_reports — Array of custom report entries (sentiment, summary, and your custom post-call variables)
Each report entry:
{
  "name": "report_name",
  "uuid": "report-uuid",
  "content": "Analysis text",
  "result": "extracted value"
}

Extra Variables

extra_variables
array
Additional variables from the campaign CSV/Excel file used for personalization:
[
  {"name": "clientName", "value": "John Doe", "column_number": 20},
  {"name": "debt", "value": 15000, "column_number": 5}
]
  • name — Variable name
  • value — Value for this customer
  • column_number — Column number in the source file

Legacy Fields

These fields are maintained for backward compatibility:
FieldDescription
answersOld answer format (empty object). Use mapped_answers instead.
last_answerLast customer utterance.
text_detailDuplicate of full_transcript.
answerDuplicate of full_transcript.

Full Payload Example

{
  "call_event_uuid": "0ca800d9-70ec-4e0c-a119-29d27185efce",
  "call_type": "outbound",
  "call_uuid": "794ea9ef-0304-450a-864a-cd1be055a28d",
  "phone_number": "77778228912",
  "call_status": "COMPLETED",
  "agent_wb_name": "test_agent",
  "agent_uuid": "95d82074-134e-44ef-aef7-4e390a8f1745",
  "call_campaign_uuid": "a2b099ab-08fe-43b9-b581-420f032ccb2d",
  "attempt_number": 1,
  "status": "PENDING",
  "call_datetime": "2026-02-02T10:20:24Z",
  "end_datetime": "2026-02-02T10:22:05Z",
  "duration": 101,
  "bill_duration": 97,
  "initial_language": "RU",
  "final_language": "RU",
  "voice_gender": "MALE",
  "result": "CALL_ANSWERED_INFORMATION_TRANSFERRED",
  "final_result": "CALL_ANSWERED_INFORMATION_TRANSFERRED",
  "audio_recording_url": "2026/02/02/10/0ca800d9-70ec-4e0c-a119-29d27185efce.mp3",
  "full_transcript": "assistant: Hello! I'm calling from Allur company...\nuser: Tell me about loans\nassistant: Thank you for your interest...",
  "conversation": {
    "assistant": [
      "Hello! I'm calling from Allur company...",
      "Thank you for your interest in auto loans..."
    ],
    "user": [
      "Tell me about loans",
      "Auto loan",
      "Thanks, goodbye"
    ]
  },
  "conversation_path": "/logs/llm/0ca800d9-70ec-4e0c-a119-29d27185efce",
  "mapped_answers": {
    "messages": [
      {"role": "assistant", "content": "Hello! I'm calling from Allur company...", "timestamp": ""},
      {"role": "user", "content": "Tell me about loans", "timestamp": ""},
      {"role": "assistant", "content": "Thank you for your interest...", "timestamp": ""}
    ],
    "summary": {"total_messages": 8, "user_messages": 3, "assistant_messages": 5}
  },
  "summary": "The conversation was centered around the user's inquiry about an auto loan...",
  "sentiment_analysis": "neutral",
  "analytics_data": {
    "trace_id": null,
    "agent_id": "95d82074-134e-44ef-aef7-4e390a8f1745",
    "user_id": "77778228912",
    "conversation_id": "0ca800d9-70ec-4e0c-a119-29d27185efce",
    "reports": {
      "dynamic_reports": {
        "reports": [
          {
            "name": "cybernet_sentiment_analysis",
            "uuid": "9a629e36-e9a7-4b0e-a44d-0a7845749925",
            "content": "The tone of the conversation is polite and professional...",
            "result": "neutral"
          },
          {
            "name": "call_summary",
            "uuid": "56fcae4c-a2a3-4f2a-80d4-30070bf37bdf",
            "content": "The conversation was centered around the user's inquiry...",
            "result": "The conversation was centered around..."
          }
        ]
      }
    }
  },
  "extra_variables": [
    {"name": "phone", "value": 77778228912, "column_number": 17},
    {"name": "clientName", "value": "John Doe", "column_number": 20},
    {"name": "debt", "value": 15000, "column_number": 5}
  ],
  "answers": {},
  "last_answer": "Thanks, goodbye",
  "text_detail": "assistant: Hello! I'm calling from Allur company...",
  "answer": "assistant: Hello! I'm calling from Allur company..."
}