Skip to the page

Recipes

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

  • API: Your own code calls BlueBot’s REST API and listens to its signed webhooks.
  • Text Hook: 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

PartWhat it is
TriggerA Supabase Database Webhook on inserts into a table
ActionA BlueBot Text Hook turns each post into a text
Connects throughText Hook

Steps

  1. Make a Text Hook in BlueBot and copy its address.
  2. Add a Database Webhook in Supabase that posts inserts on your bookings table to that address.
  3. Insert a test row, then map record.phone and record.first_name from the payload BlueBot kept.
  4. Write the template, and each new row becomes a text.

Map the fields

Text Hook settingSet it to
RecipientThe field in Supabase’s post that holds the person’s phone number, written as a path such as {{body.phone}}.
TextHi {{body.first_name}}, your booking is confirmed. Reply here if you need to change it.
Metadatasource 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.

A test post shaped like Supabase’s
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

PartWhat it is
TriggerYour Edge Function runs
ActionPOST /v1/messages
Connects throughAPI

Steps

  1. Store your API key with supabase secrets set.
  2. Import bluebot from npm in the function and send with to and text.
  3. Pass an Idempotency-Key made from the row’s ID, so a retried function never sends twice.

Map the fields

BlueBot fieldMap it to
toThe person’s mobile number from Supabase. US numbers can leave off the +1.
textHi {{first_name}}, your order is confirmed. We’ll text you here when it’s on its way.
{{first_name}} in the textSupabase’s first name field.
metadatasource 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.
serviceAuto, the default: iMessage when the person uses it, otherwise SMS through your iPhone.
POST/v1/messagesSend a text →
curl -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

PartWhat it is
TriggerA text comes in (BlueBot’s message.received webhook)
ActionA webhook for message.received starts it, and Supabase takes the text
Connects throughAPI

Steps

  1. Deploy an Edge Function and add its URL in BlueBot as a webhook for message.received.
  2. Check the Standard Webhooks signature with your signing secret before anything else.
  3. Insert the sender, the words and the time into a replies table.

Map the fields

From BlueBotInto Supabase
data.fromThe 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.textThe words, for a note, a row or a message. Null when the person sent only a picture.
data.received_atWhen it came in, in UTC.
data.filesPictures and voice memos. Each url works for an hour, so copy a file you want to keep.
data.chat_idSet 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. Stop words
  • A text that can’t go yet waits with a hold rather than failing: quiet hours, your Mac away, a daily limit. Holds
  • Supabase with BlueBot on the integrations page says what else the two do together.