Skip to content

Troubleshooting: webhooks ​

Webhooks connect Yarla to your own systems: before the call (fetching context), during the call (tools) and after the call (forwarding results). You create them as an HTTP request action under Assistants → Tasks, on the Actions card.

When something goes wrong after the conversation, the quickest place to look is the Inbox: open the conversation, expand Technical details and look under What the actions did. It shows each action's name and outcome, for example HTTP 200, or HTTP 500 with the start of your response. The request itself and the duration are not kept. Actions before and during the conversation are not listed here; check your endpoint's logs for those. Below are the most common problems.

Symptoms, causes and fixes ​

SymptomLikely causeFix
Your endpoint returns 401 (invalid signature)Wrong (replaced) secret, body modified before verification, or timestamp driftUse the raw body, the current secret and allow 300 s of drift
Pre-call context missingNot an inbound phone call, response too slow (over 3 s), non-2xx, not a JSON objectRespond within 3 s with a 2xx status and a JSON object
No call received at your endpointAction off or not on this assistant, condition not met, URL typo, endpoint not public, or Try it out without Perform actions for realCheck What the actions did in the Inbox
Tool response not usedResponse hint missing, response too large, or non-2xxSee Troubleshooting: prompt and tools
After-call webhook arrives twiceTwo actions with the same URL, or a proxy or tunnel repeats the requestRemove the duplicate action and dedupe on conversationId
TimeoutEndpoint responds slower than 3 s (before), 6 s (during) or 8 s (after the conversation)After the conversation, respond 2xx first and process asynchronously
Variables empty in the bodyVariable not defined, not mentioned in the conversation, or not available at that momentDefine the variable on the action or use a parameter
Make or n8n receives nothingScenario not active or webhook URL changedActivate the scenario and update the URL
X-Yarla-Signature header missingThe action uses the GET methodUse POST, PUT, PATCH or DELETE

Your endpoint returns 401 because the signature doesn't match ​

Every request except GET carries the header X-Yarla-Signature: t=<unix seconds>,v1=<hex hmac_sha256(secret, t + "." + body)>. A mismatch almost always has one of three causes.

  1. Wrong secret. If you clicked Generate new under Settings → Connections, on the Webhook secret card, the old secret stops working at once and your endpoint must use the new one. Only an Admin sees that card.
  2. Modified body. Compute the HMAC over the raw bytes of the body as received; JSON that has been parsed and re-serialised produces a different hash.
  3. Timestamp drift. Compare t with your own clock and allow a difference of 300 seconds.

See Webhooks.

Pre-call context is missing ​

The inbound webhook is an HTTP request set to Before the call. It only runs on inbound phone calls, so not on outbound calls, SMS, WhatsApp, webchat or Try it out. Your endpoint must respond within 3 seconds with a 2xx status and a JSON object. If the response is slower, non-2xx, not a valid JSON object (a list doesn't count) or longer than 20,000 characters, we ignore it. The call then simply starts without that data, and variables such as {{customerName}} in the greeting and {{inboundContext.customerName}} after the conversation stay empty. To see what did arrive, look in the Inbox under Technical details, at Details looked up before the call. See Inbound webhook (pre-call).

Your endpoint receives no call ​

Open the conversation in the Inbox, expand Technical details and look under What the actions did. This list shows after-conversation actions and is filled once the conversation has ended.

  • The action isn't listed. It is off, belongs to another assistant or doesn't run After the conversation, or the conversation is still going. A conversation by SMS, WhatsApp or webchat keeps going until the assistant closes it, someone clicks End conversation, or nothing has happened for a while: on webchat the Inactivity timeout (60 minutes by default), on SMS and WhatsApp 6 hours, and with your team only 18 hours after the last message, never while the customer waits for an answer.
  • skipped: condition not met. The condition at Under what condition should this run after the conversation? wasn't met. The same applies if the customer said nothing, unless that field is empty.
  • An error such as url host did not resolve, url host is not allowed or url address is not allowed. The URL is wrong or the endpoint isn't publicly reachable: localhost and internal addresses don't work. Use a tunnel to your local machine while developing.
  • HTTP with a status code. The request went out and something answered. Continue in your endpoint's logs.

An action set to During the conversation only runs when the assistant uses it, which it decides from what you entered at When should the assistant use this?. In Try it out, with Call and Chat, your endpoint only receives something if Perform actions for real is on, and those conversations are not in the Inbox. A Real call is a real conversation: its actions run for real and it does appear in the Inbox.

The tool response is not used ​

If your endpoint responds correctly but the assistant does nothing with it, the Response hint or the size of the response is the problem: the assistant reads at most 6,000 characters. If your endpoint returns a non-2xx status, the assistant only hears the status code. See Troubleshooting: prompt and tools and Webhook during the call.

The after-call webhook arrives twice ​

We don't retry calls automatically, and an after-conversation action runs once per conversation; there is no way to re-run it manually. If you still receive something twice, the assistant has two actions with the same URL (for example after Duplicate), or something between us and your endpoint repeats the request, such as a proxy or tunnel. Make your processing idempotent by deduplicating on conversationId. It is in the default body; if you use your own Body template, add {{conversationId}} to it. See Webhook after the call.

Timeout ​

We don't wait for your endpoint indefinitely, and you can't change how long: 3 seconds before the call, 6 seconds during the conversation and 8 seconds after the conversation. After that the call is aborted and not retried.

  • Before the call: the call starts without that data.
  • During the conversation: the assistant gets no usable answer. On a phone call it gets no answer to its request at all, so the caller may hear silence. Every second counts and the assistant needs the data, so keep it as fast as possible.
  • After the conversation: the action appears with an error under What the actions did. So respond immediately with a 2xx status and process the payload asynchronously afterwards (queue, background job).

Variables are empty in the body ​

Which variables exist depends on the moment. An unknown or misspelled name renders empty.

  • Before the call: fromNumber, toNumber, personNumber, agentNumber, company.name, company.website, company.phone, company.email and company.address.
  • During the conversation: what the assistant fills in at Parameters the assistant fills, plus data passed in at the start (campaign or API). Built-in variables such as {{personNumber}} stay empty here; make it a parameter.
  • After the conversation: all built-in variables, such as summary and personNumber, and your custom variables.

You define a custom variable on an action that runs After the conversation, at Custom variables to extract. It only arrives filled in the payload if that action is on, the description is clear and the detail came up in the conversation. If the customer said nothing, summary and your custom variables stay empty too. company.address stays empty if your business doesn't share its address with customers. See Actions.

Make or n8n receives nothing ​

A scenario in Make or a workflow in n8n only listens while it is active; test mode catches a single call. Also check that the webhook URL didn't change after recreating the module, and paste the current URL into the action. See Make & n8n recipes.

The X-Yarla-Signature header is missing ​

A GET request has no body and is not signed. All other methods carry the header without you setting anything up: every business already has a webhook secret. If you want to check the signature, set Method to POST, PUT, PATCH or DELETE. You find the secret under Settings → Connections, on the Webhook secret card.

Still stuck? ​

Can't find your problem here, or did the fix not help? Let us know via Report a problem and include the conversationId, the time and the status code your endpoint returned.

Yarla Help — the guide to your AI phone assistant.