Logo
Platform updates
Webhooks

Post-Call Webhook

Webhook sent after a call is completed containing extracted variables and call data

The Post-Call Webhook is automatically sent to your specified webhook URL after each call is completed. This webhook contains call details, extracted variables, transcript, and optionally the recording URL.

Webhook Configuration

To enable post-call webhooks:

  1. Configure your assistant’s webhook URL in the assistant settings
  2. Enable “Post call webhook” in the assistant configuration
  3. Define post-call variables that the AI should extract

Request Format

The webhook is sent as a POST request to your configured URL with the following JSON payload:

Payload Structure

id integer

Unique identifier of the call


customer_phone string

Phone number of the customer in E.164 format (e.g., “+1234567890”) or null if not available


assistant_phone string

Phone number used by the assistant in E.164 format or null if not available


duration integer

Duration of the call in seconds


status string

Final status of the call (e.g., “completed”, “busy”, “failed”)


extracted_variables object

Variables extracted by AI based on your post-call schema configuration

status boolean

Whether the call objective was achieved


summary string

Call summary in a few words


custom_variable string|number|boolean

Any custom variables you defined in the assistant configuration



input_variables object

Variables that were passed to the assistant before the call started


transcript string

Full transcript of the conversation


recording_url string

URL to download the call recording (only included if “Include recording in webhook” is enabled in assistant settings)


created_at string

ISO 8601 timestamp when the call was initiated


finished_at string

ISO 8601 timestamp when the call was completed (uses updated_at from the call record)


lead object

Lead information (only included for campaign calls)

id integer

Unique identifier of the lead


phone_number string

Lead’s phone number


variables object

Variables associated with the lead


status string

Current status of the lead


created_at string

When the lead was created


updated_at string

When the lead was last updated


campaign object

Campaign information (if available)

id integer

Campaign ID


name string

Campaign name


status string

Campaign status


allowed_hours_start_time string

Campaign allowed start time


allowed_hours_end_time string

Campaign allowed end time


allowed_days array

Campaign allowed days


max_calls_in_parallel integer

Maximum concurrent calls for campaign


max_retries integer

Maximum retry attempts for leads


retry_interval integer

Retry interval in minutes


created_at string

When the campaign was created


updated_at string

When the campaign was last updated




Webhook Settings

You can configure the following options for your post-call webhook:

  • Send webhook only on completed: Only send the webhook for successfully completed calls
  • Include recording in webhook: Include the recording_url field in the payload
  • Custom variables: Define custom variables that the AI should extract from the conversation

Important Notes

  • The customer_phone and assistant_phone fields can be null if the information is not available
  • The recording_url field is only included if you have enabled “Include recording in webhook” in your assistant settings
  • The lead object is only included for calls that are part of a campaign
  • The extracted_variables object will contain the variables you defined in your assistant’s post-call schema configuration
200 Post-Call Webhook Request
{
  "id": 12345,
  "customer_phone": "+1234567890",
  "assistant_phone": "+1987654321",
  "duration": 125,
  "status": "completed",
  "extracted_variables": {
    "status": true,
    "summary": "Customer interested in product demo",
    "lead_quality": "high",
    "next_action": "schedule_demo"
  },
  "input_variables": {
    "customer_name": "John Doe",
    "product_interest": "Pro Plan"
  },
  "transcript": [
    {
      "text": "Hello! This is Sarah from OtoniStark. How are you today",
      "type": "transcript",
      "sender": "bot",
      "timestamp": 1756812511.315143
    },
    {
      "text": "Hi, I'm doing well, thanks for calling.",
      "type": "transcript",
      "sender": "human",
      "timestamp": 1756812514.104436
    },
    {
      "text": "I'm calling to tell you about our new product features.",
      "type": "transcript",
      "sender": "bot",
      "timestamp": 1756812522.918859
    },
    {
      "text": "That sounds interesting, tell me more.",
      "type": "transcript",
      "sender": "human",
      "timestamp": 1756812525.234567
    }
  ],
  "formatted_transcript": "AI: Hello! This is Sarah from OtoniStark. How are you today?\nCustomer: Hi, I'm doing well, thanks for calling.\nAI: I'm calling to tell you about our new product features.\nCustomer: That sounds interesting, tell me more.",
  "recording_url": "https://call.otonistark.com.br/storage/recordings/call-12345.mp4",
  "created_at": "2025-01-15T10:30:00.000000Z",
  "finished_at": "2025-01-15T10:32:05.000000Z",
  "lead": {
    "id": 789,
    "phone_number": "+1234567890",
    "variables": {
      "source": "website",
      "interest_level": "high"
    },
    "status": "contacted",
    "created_at": "2025-01-15T09:00:00.000000Z",
    "updated_at": "2025-01-15T10:32:05.000000Z",
    "campaign": {
      "id": 456,
      "name": "Product Demo Campaign",
      "status": "active",
      "allowed_hours_start_time": "09:00",
      "allowed_hours_end_time": "17:00",
      "allowed_days": ["monday", "tuesday", "wednesday", "thursday", "friday"],
      "max_calls_in_parallel": 5,
      "max_retries": 3,
      "retry_interval": 60,
      "created_at": "2025-01-15T08:00:00.000000Z",
      "updated_at": "2025-01-15T08:00:00.000000Z"
    }
  }
}