Overview
Post-call webhooks let you send call results to any external service when a call ends and matches your configured trigger. Use them to sync call data with your CRM, trigger automations in Zapier or Make, log outcomes to a spreadsheet, or notify your team.How It Works
- You configure a webhook URL in your workflow settings
- After each eligible call, Tala sends a
POSTrequest to that URL with the call data - Your external service processes the data and takes action
Setting Up a Webhook
Step 1: Open Workflow Settings
In the workflow editor, click the Settings icon to open the Configurations dialog.Step 2: Enable the Webhook
Scroll to the Post-call Webhook section and toggle it on.Step 3: Enter Your Webhook URL
Paste the URL from your external service. The URL must use HTTPS.Step 4: Choose a Trigger
Step 5: Save
Click Save. The webhook is now active for all future calls that match this workflow’s configured trigger.Webhook Payload
Each webhook sends a JSONPOST request with the following structure:
Field Reference
Ready-to-use fields
caller and call_overview are the fields to map when you push calls into a
spreadsheet or a CRM. They stay at the same place for every call, so your
automation does not have to know which of the context objects carried the
number this time.
recording_url and transcript_url may be null if the call recording or transcript upload has not completed yet. This can happen for a few seconds after the call ends. These three fields are decided when we first send the call: if a link or the summary was not ready then, it stays empty for that call, retries included. Only links that already existed are refreshed on a later attempt. call_overview.headline is always available.The same call can reach you more than once, including after your endpoint answered normally. Every request carries an
Idempotency-Key header and a unique workflow_run_id, both identical across attempts, so use either one to recognize a repeat. A few failures are terminal and stop the attempts (see Retry Behavior below).Send your calls to a spreadsheet
A common setup is to log every call in a Google Sheet that your team works from. You do not need any development for this: an automation tool such as Zapier, Make or n8n sits between Tala and your spreadsheet, and holds the Google authorization for you.1
Create the automation
In Zapier, create a Zap starting with the Webhooks by Zapier trigger,
Catch Hook. In Make, create a scenario starting with the Webhooks
module, Custom webhook. Either one gives you a URL.
2
Point Tala at it
Paste that URL in your agent’s settings, in the post-call webhook section,
and choose the trigger you want. Save.
3
Send a test call
Your automation needs one real call to discover the available fields. How
you capture it differs between tools: some listen only while you ask them
to, others keep the last request they received. Check how yours captures a
test request, then call your agent. Two things make this test call worth
preparing:It has to match the trigger you selected. If you chose Qualified calls
only or By call outcome, an ordinary test call is filtered out by
Tala and nothing arrives. Either produce that outcome during the call, or
switch to Every call while you set things up and put your trigger back
afterwards.It should also go through everything you intend to log. A field your agent
did not collect during the test is simply absent from the sample, so the
automation has no way to offer it for mapping. If you add a column later,
send another test call that fills it.
4
Prepare the sheet
Give your sheet a header row: the first line must name the columns.
Automations read those names to offer you the destinations, so on a blank
sheet there is nothing to map to.
5
Add the spreadsheet step
Add a Google Sheets action that appends a row: it is called Create
Spreadsheet Row in Zapier and Add a Row in Make. Connect your Google
account, pick the file and the tab, then drag each field into the matching
column.
6
Turn it on
Publish the Zap in Zapier, or switch the scenario on in Make. Until you do,
the sample works in the editor but real calls create nothing.
Which fields to use
These four cover most spreadsheets:
Anything your agent collected during the conversation (a name, an address, a
booking date) is in
gathered_context, under the variable name you gave it in
the agent.
Use
call_overview.headline for the reason column: it is always filled in.
call_overview.summary is longer, but it is produced at the same time as we
send you the call, so it can be missing on any call, whatever its length. What
we send is fixed at that moment and never updated afterwards, so that cell stays
empty for that call. Treat it as a bonus column, not as the one your team
reads.One exception worth knowing when you are still setting things up: if three
matching calls in a row come back with one of the definitive errors below, Tala
stops sending to that address and the following calls are skipped. Fixing your
automation is not enough to restart it, you also have to reopen your agent’s
settings and save them again.
Avoiding a duplicate line
The same call can reach your automation twice, and it can happen even when everything on your side worked. To be safe, keep one column for the call number,workflow_run_id, which never changes between two sends of the same call. Then have your automation search that column before it adds a line,
and skip the call when the number is already there. Each tool wires this search
differently, so follow its own documentation.
If a duplicate line is not a problem for you, you can skip this and simply add
every call.
A few answers stop the attempts for good: 404, 410, 422, or an
address our security checks refuse. Everything else, including a timeout or a
refused connection, is retried. And once your automation has accepted the
call, we cannot see what happens inside it, so a problem occurring further down
your scenario will not trigger a new send from us.
Retry Behavior
If a delivery does not go through, Tala keeps trying: the wait between attempts starts at 1 minute, grows each time, and is capped at 15 minutes, for up to 20 hours in total. Timeouts, refused connections, 5xx errors and the statuses 408, 409, 425 and 429 are all treated as temporary and retried. Only 404, 410 and 422, or a URL our security checks refuse, stop the attempts, because sending the very same request again would not change anything. 404 and 410 usually mean the address is wrong or no longer exists, while 422 comes from an address that works but rejects what we sent, so check your automation’s configuration in that case.Security
- Webhook URLs must use HTTPS
- Validation happens when you save the workflow and again when Tala sends the webhook
- URLs with embedded credentials or custom ports are rejected
- URLs pointing to private networks, localhost, internal IPs, or non-resolvable hosts are rejected
- The webhook URL itself acts as a shared secret (keep it confidential)
- Media URLs (recording/transcript) are signed and expire after 1 hour
Limits
- One webhook URL per workflow
- 10 second timeout per request
- Retries for up to 20 hours on temporary failures
Webhook Node
In addition to the workflow-level post-call webhook described above, you can place a Webhook node directly inside the workflow builder. The node gives you a second post-call integration path with a customizable payload and multiple outbound requests per workflow.The Webhook node does not replace the workflow-level webhook. If both are configured, Tala can send both requests after the call.
How It Differs from the Post-Call Webhook
Adding a Webhook Node
- Open the workflow editor
- Drag the Webhook node from the node palette onto the canvas
- Connect it to the appropriate step in your workflow
Configuration
Available Variables
You can insert variables into custom header values and the JSON payload using the{{ variable_name }} syntax. The endpoint URL itself is static and validated separately.
Payload Example
Retry Behavior
Webhook nodes use the same durable delivery as the post-call webhook, so the retry policy described above applies here too: temporary failures are retried for up to 20 hours, and only 404, 410, 422 or a refused URL stop the attempts. Three consecutive definitive errors also disable a node, and the following calls skip it. Saving the settings dialog does not bring a node back: fix the node itself and save the workflow. Other post-call integrations continue regardless of whether the webhook succeeds or fails.Security
- Webhook node URLs are validated with the same strict outbound checks as the classic webhook
- Only
POST,PUT, andPATCHare supported - Media URLs are signed and expire after a short period
- Credential-backed auth can be applied when that integration surface is available