Supabase recipes
Text someone when a row changes, from a database webhook or an Edge Function.
Three recipes for Supabase. Each names its trigger and the BlueBot step, lists the fields to map and says how to test it with your own number before anyone else gets a text.
How Supabase connects
- : Your own code calls BlueBot’s REST API and listens to its signed webhooks.
- : A Text Hook is a BlueBot address the app posts its own webhook to. You map its fields to a recipient and a template, and each post becomes a text.
Text a customer when a booking row is added
| Part | What it is |
|---|---|
| Trigger | A Supabase Database Webhook on inserts into a table |
| Action | A BlueBot Text Hook turns each post into a text |
| Connects through |
Steps
- Make a Text Hook in BlueBot and copy its address.
- Add a Database Webhook in Supabase that posts inserts on your bookings table to that address.
- Insert a test row, then map record.phone and record.first_name from the payload BlueBot kept.
- Write the template, and each new row becomes a text.
Map the fields
| Text Hook setting | Set it to |
|---|---|
| Recipient | The field in Supabase’s post that holds the person’s phone number, written as a path such as {{body.phone}}. |
| Text | Hi {{body.first_name}}, your booking is confirmed. Reply here if you need to change it. |
| Metadata | source set to supabase. BlueBot adds the hook’s id by itself. |
Test it
Post a sample to the hook’s address with your own number in the phone field, as below. A text arrives on your phone, and the hook’s page lists the post.
curl -X POST "https://usebluebot.com/h/YOUR_HOOK_TOKEN" \
-H "Content-Type: application/json" \
-d '{"phone":"+15555550123","first_name":"Maria"}'Send from an Edge Function
| Part | What it is |
|---|---|
| Trigger | Your Edge Function runs |
| Action | POST /v1/messages |
| Connects through |
Steps
- Store your API key with supabase secrets set.
- Import bluebot from npm in the function and send with to and text.
- Pass an Idempotency-Key made from the row’s ID, so a retried function never sends twice.
Map the fields
| BlueBot field | Map it to |
|---|---|
to | The person’s mobile number from Supabase. US numbers can leave off the +1. |
text | Hi {{first_name}}, your order is confirmed. We’ll text you here when it’s on its way. |
{{first_name}} in the text | Supabase’s first name field. |
metadata | source set to supabase, and record_id set to the record’s id, so the status and reply webhooks for this text can find the record again. |
service | Auto, the default: iMessage when the person uses it, otherwise SMS through your iPhone. |
/v1/messagescurl -X POST "https://usebluebot.com/api/v1/messages" \
-H "Authorization: Bearer $BLUEBOT_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: supabase-1042" \
-d '{
"to": "+15555550123",
"text": "Hi Maria, your order is confirmed. We’ll text you here when it’s on its way.",
"metadata": {
"source": "supabase",
"record_id": "1042"
}
}'Test it
Run the request with your own number in to. A text arrives on your phone from your own number.
Save replies to a table
| Part | What it is |
|---|---|
| Trigger | A text comes in (BlueBot’s message.received webhook) |
| Action | A webhook for message.received starts it, and Supabase takes the text |
| Connects through |
Steps
- Deploy an Edge Function and add its URL in BlueBot as a webhook for message.received.
- Check the Standard Webhooks signature with your signing secret before anything else.
- Insert the sender, the words and the time into a replies table.
Map the fields
| From BlueBot | Into Supabase |
|---|---|
data.from | The phone number to find the person by in Supabase. It’s in E.164 (+15555550123); search by the last 10 digits if Supabase stores numbers another way. |
data.text | The words, for a note, a row or a message. Null when the person sent only a picture. |
data.received_at | When it came in, in UTC. |
data.files | Pictures and voice memos. Each url works for an hour, so copy a file you want to keep. |
data.chat_id | Set when the text came in a group chat; null for a one-to-one text. |
Test it
Run bluebot listen --forward-to http://localhost:3000/webhooks, then text your BlueBot number from another phone. The CLI forwards the event to your handler, signed. BlueBot copies texts from people you’ve texted through it, unless you set Which chats to copy to Everything.
Before you turn it on
- Text only people who asked to hear from you. Anyone who replies STOP goes on your stop list, and BlueBot cancels texts to them.
- A text that can’t go yet waits with a hold rather than failing: quiet hours, your Mac away, a daily limit.
- on the integrations page says what else the two do together.