Triggers
Each trigger fires from exactly one place in the product, and the direction is deliberate: the takeover trigger fires when a human takes over, not when the AI resumes.
- conversation.created — a visitor starts a conversation
- message.received — a visitor sends a message
- conversation.takeover — a human takes the conversation from the AI
- conversation.closed — a conversation is closed
- lead.captured — a visitor leaves contact details
- ticket.created — a ticket is opened
- form.submitted — a visitor completes one of your forms
- kb.source.changed — a knowledge source's content changed on re-index
- sla.breached — a first-response or resolution timer expired
Filters
Rules can filter on keywords in the text and on triage priority, where the trigger carries one. Different filter kinds combine with AND; values within one kind combine with OR. A rule with no filters fires on every event of its trigger.
Payload
A webhook destination receives one POST per event with this body. Keys are explicit and stable; new fields are added, never renamed.
{
"trigger": "conversation.takeover",
"title": "Human takeover requested",
"note": null,
"text": "I need to change the shipping address on my order.",
"actor": { "name": "Priya", "email": "priya@example.com" },
"priority": "high",
"link": "https://app.helpo.support/dashboard/…/conversations/conv_9f21",
"fields": [],
"projectId": "prj_…",
"occurredAt": "2026-09-20T09:14:07.000Z"
}Securing your endpoint
The destination URL is the secret, exactly as with Slack and Discord incoming webhooks. Use an unguessable path or a token in the query string, and treat the request as untrusted input: validate the shape before acting on it.
Delivery log
Every attempt is recorded with its response status, the number of tries and how long it took, so a broken endpoint is visible in Helpo AI rather than discovered a week later. A rejection from the destination is recorded as a failure and not retried. Each connection has a Test button that sends a sample event.