When a visitor asks for a human: a Slack ping and a row in a spreadsheet
A worked example of Breezaro webhooks and Zapier: the moment a conversation escalates to a human, a message lands in Slack and a row lands in a Google Sheet. No server, no code, about ten minutes.
Your assistant handles most of what people ask. The interesting ones are the rest: somebody types "I want to speak to a person", the assistant escalates, and then nothing happens until one of you happens to open the inbox. On a Tuesday morning that costs you a few minutes. At eight on a Friday evening it costs you the order.
Webhooks close that gap. The moment a conversation asks for a human, Breezaro posts a signed event to any HTTPS address you name. Point that address at Zapier and the event becomes a Slack message, a text, a task, or a row in a spreadsheet. No server, no code, about ten minutes of work.
Here is that setup, start to finish.
The event you want: handover.requested
handover.requested fires the first time a conversation asks for a human, when the assistant decides it cannot help and escalates. It fires once per conversation, on that first transition, so a visitor who keeps insisting does not set it off again.
This is what Breezaro posts:
{
"id": "evt_2b6f7e3a-9c9b-4a91-8ce1-7b6dcd6db8a2",
"type": "handover.requested",
"createdAt": "2026-08-01T18:42:07.114Z",
"apiVersion": "2026-07-29",
"data": {
"conversation": {
"id": "cm3qf8x3k0007jr08g6z1a2b3",
"source": "widget"
},
"requestedAt": "2026-08-01T18:42:07.114Z",
"trigger": "assistant",
"visitorName": "Jana"
}
}
Notice what is not in there. No message text, no email address, no phone number. The event is a pointer: conversation X wants a human, right now. You open the conversation to read what was actually said. That is deliberate, so the contents of your customers' conversations do not end up scattered across half a dozen third-party tools.
source tells you where the conversation is running: widget, whatsapp, messenger or instagram. visitorName is there only when the visitor told the assistant their name. trigger says assistant, because escalating is the assistant's decision.
Ten minutes in Zapier
1. Create the catcher. In Zapier, start a new Zap, pick Webhooks by Zapier as the trigger app and Catch Hook as the event. Zapier hands you a URL. Copy it.
2. Point Breezaro at it. In the dashboard open Webhooks under Settings, add an endpoint, paste in the URL, tick handover.requested and nothing else, and save. Fewer events means a cleaner Zap and less noise to filter out later.
3. Sample a real escalation. Leave the Zap's test step open, go to your own site, and ask the assistant for a human the way a customer would. Then hit Test trigger in Zapier and it picks up the request with every field filled in.
There is one trap here. Do not use the Send test event button for this step. It sends an endpoint.test event whose body is a one-line note with no conversation in it, which is perfect for confirming that the URL is reachable and useless as a sample to map fields from.
4. Add the actions. Zapier flattens the payload, so the conversation id shows up as something like data__conversation__id. Two actions that pay for themselves:
- Slack. A message to your support channel: "Someone wants a human on the chat." Add a link to
https://breezaro.com/dashboard/conversation?id={data__conversation__id}and whoever is free opens the right conversation in one click. - Google Sheets. Append a row with
createdAt,data__conversation__sourceand the conversation id.
5. Turn the Zap on. Then watch the endpoint's Deliveries list in Breezaro for the first day. It shows the response code Zapier returned for each event, which is the quickest way to notice a Zap that is quietly rejecting things.
The spreadsheet is the half that pays off
The Slack ping is the obvious win: somebody answers while the customer is still on the page.
The spreadsheet is the half that changes the product. After a month you have a list of every moment your assistant gave up, with a time and a channel beside it. Sort it by hour and you learn when somebody actually needs to be reachable, which is rarely the hours you assumed. Open ten of those conversations and you will usually find three or four questions the assistant should have been able to answer on its own, and that is a gap in your knowledge base rather than a staffing problem. Fill it, and next month's list is shorter.
Before you rely on it
- The same event can arrive twice. Delivery is at-least-once. For a Slack message that is a duplicate you shrug at. If your Zap does something that must not happen twice, deduplicate on the
idfield, which stays identical across every retry of the same event. - Zapier does not verify the signature. Every delivery is signed, but Catch Hook accepts anything posted to its URL and ignores the signature header. The URL is long and random, so nobody guesses it, but it is the only thing protecting the Zap: keep it out of screenshots, shared documents and public repositories. For anything sensitive, send events to your own endpoint, check the signature there, and forward on from it.
- A dead endpoint gets switched off. Each event gets up to 8 delivery attempts over roughly 6 hours. If 20 events in a row end up failing, Breezaro disables the endpoint and tells you in the dashboard. Fix it, switch it back on, and the counter resets.
- Deliveries are free. Sending or retrying a webhook never costs credits.
- You need Standard or higher (a trial counts), and you can have up to 3 endpoints per assistant.
Same recipe, other events
Once the plumbing works, the rest of the catalog costs you a few clicks each:
conversation.startedfor a daily counter or a live board.custom_action.executedto log every data-changing action the assistant ran against your systems.message.createdfor a full message feed. Be careful with this one: it fires for every single message from the visitor, the assistant and your operators, so pointing it straight at a Slack channel gets noisy within the hour.
The full event catalog, the payload of each event, and how to verify the signature on your own server are in the webhooks documentation.