Skip to main content

Webhook Payloads

Context variables available in webhook nodes and the data Menace Voice sends after a call
3 min read

Menace Voice executes webhook nodes asynchronously after a workflow run completes. You configure the target URL, HTTP method, headers, and payload template directly in the workflow definition.


How webhooks work#

  1. A call completes (or a run finishes)
  2. Menace Voice executes any webhook nodes in the workflow asynchronously
  3. The payload template is rendered with the run's context and sent as a JSON POST (or your configured method) to your endpoint
  4. Non-200 responses are logged but do not block or retry by default (configure retry_config to change this)

Payload context variables#

The following variables are available in your payload_template using double-brace syntax (e.g. {{workflow_run_id}}):

VariableTypeDescription
workflow_run_idintegerID of the completed run
workflow_run_namestringName of the run
workflow_idintegerID of the workflow
workflow_namestringName of the workflow
campaign_idinteger | nullID of the campaign this run belongs to (null for ad-hoc runs)
call_timestringISO-8601 UTC timestamp of when the run was created
initial_contextobjectContext passed when the call was initiated
gathered_contextobjectData extracted during the call by agent nodes
gathered_context.call_statusstringObserved reason the call ended
gathered_context.call_dispositionstringRaw final outcome before organization mapping
gathered_context.mapped_call_dispositionstringFinal outcome after organization mapping
cost_infoobjectCall cost breakdown
cost_info.call_duration_secondsnumberCall duration in seconds
annotationsobjectQA analysis results (if a qa node is configured)
recording_urlstring | nullPublic download URL for the call recording
transcript_urlstring | nullPublic download URL for the call transcript

Call disposition#

Use {{gathered_context.call_disposition}} for the raw workflow outcome or {{gathered_context.mapped_call_disposition}} for your organization's mapped code. {{gathered_context.call_status}} remains the observed reason the call ended. See Call Dispositions to configure custom business outcomes for each workflow and understand the fallback behavior.

Note

Menace Voice always includes a top-level call_disposition field in the delivered payload. If your template doesn't set one, it is added automatically from the raw gathered_context.call_disposition; if your template sets it explicitly, your value is kept.

Example payload template#


Authentication#

Webhook requests support the following authentication methods, configured via a stored credential:

TypeDescription
NONENo authentication
API_KEYSends the key in a custom header (e.g. X-API-Key)
BEARER_TOKENSends Authorization: Bearer <token>
BASIC_AUTHHTTP Basic authentication (username + password)
CUSTOM_HEADERAny custom header key-value pair

Receiving webhooks#

Your endpoint should:

  • Accept POST requests with Content-Type: application/json
  • Respond with a 2xx status code promptly (within 30 seconds)
  • Handle duplicate deliveries idempotently (retries may deliver the same payload more than once)

Minimal example receiver (Python)#


Webhook node in a workflow definition#

See Workflow Definition Schema for the full configuration reference.