Steps
Start a flow
Start a conversation without the customer writing first: from a website form, a new Google Sheets row, a calendar event or a schedule.
What it does#
Most flows start when a customer writes. Start a flow is a trigger: it starts the flow by itself, then the steps after it message the customer on WhatsApp. Choose what starts it under What starts this flow:
| Trigger | Starts when | Available |
|---|---|---|
| Website form submitted | Your website's form sends the details to the trigger's link. | Today |
| Google Sheets new row | A new row appears at the bottom of a tab. | Today |
| Schedule | Every day, or on chosen days, at a time you pick. | Today |
| Google Calendar event | Someone adds (or changes) an event. | Coming soon |
To start a flow from your own server with an API call instead, use Catch Hook.
Message every website lead#
- 1
Add the trigger
Drag Start a flow from Webhook and API onto the canvas and connect it to the first step it should start.
- 2
Choose the form trigger
Under What starts this flow, choose Website form submitted.
- 3
Copy the form link
Under Form link, click Copy. Point your website's form at this link with
method="post". Each submission starts the flow once. - 4
Say where the phone is
Under Who it's for, keep Phone from the event and write the form field that holds the phone, usually
phone. - 5
Start with a template
On WhatsApp, a customer who hasn't written in the last 24 hours can only get an approved template first. If the step warns you, click Add a Template step and choose the template.
- 6
Tell the team (optional)
Under Also tell the team, click Add a phone and write a Message, for example
New lead: {{#trigger.name}} {{#trigger.phone}}. Up to 5 phones. - 7
Publish
The trigger works once the chatbot is published. Each run is listed under Recent runs.
Open HTML example in the step for a ready-made form. Keep the hidden _gotcha field: it stops spam bots. Each field name becomes {{#trigger.<name>}}:
<form method="post" action="YOUR_FORM_LINK">
<input name="name" placeholder="Full name" required>
<input name="phone" type="tel" placeholder="Phone" required>
<input name="message" placeholder="How can we help?">
<input name="_gotcha" type="text" style="display:none" tabindex="-1" autocomplete="off">
<button type="submit">Send</button>
</form>The link accepts a normal form post or JSON. A browser form gets a short "Thank you, we received your details." page; other callers get 202 with {"ok": true}. The same submission sent twice within a minute starts one run. To make retries safe from your own code, send an Idempotency-Key header.
Sheets rows and schedules#
- Google Sheets new row: connect the Google account, choose the spreadsheet and tab, and pick the Phone column under Who it's for. Check every (minutes): 1 to 60, default 5. Rows that existed before you published don't start it.
- Schedule: under Repeat, choose Every day or On days, then the Time and Time zone. Under Run, choose Once, or For each calendar event that day (coming soon) to send, say, a review request after each appointment.
- Google Calendar event (coming soon): starts for New events or New or changed events, for the first phone number written in the event's description, location or title.
Who it's for can also be A fixed number (with country code, for example a team member's phone for a daily summary) or Nobody (background only): then the flow runs Google steps and notifications only and messages no customer.
Trigger data and testing#
Later steps use the trigger's data as {{#trigger.<field>}} (rename trigger in Event data > Save as):
| Trigger | Fields |
|---|---|
| Website form | Each form field by name, for example {{#trigger.name}}, plus submitted_at. |
| Google Sheets row | rowNumber and each column by its header, for example {{#trigger.Phone}}. |
| Schedule | date, time and run_at. |
| Calendar event | id, summary, description, location, start_text, date_text, time_text, link. |
Try it shows the latest event, the phone it would message and the next scheduled runs. It starts nothing. Recent runs lists each run, newest first (Waiting, Running, Done, Failed, Skipped). Failures alert you too.
Common mistakes#
| Problem | Fix |
|---|---|
| Add a template first (24-hour rule) on the card. | Add a Template step right after the trigger. Without it, runs fail for customers who haven't written in 24 hours. |
| "The trigger doesn't start anything yet." | Connect the trigger to the first step. |
| "Write the phone with the country code, ..." | Use the full number, for example 972501234567. |
| A run shows Skipped. | No phone was found, for example the form had no phone field. Check Who it's for. |
| Old rows didn't start anything. | That's by design: only rows added after you publish start the flow. |