Send WhatsApp Messages from Retool — Internal Tools and Support Consoles
Teams that build internal dashboards in Retool often need a quick way to message a customer without leaving the app — confirming a refund, nudging a late payment, or telling someone their order is ready. Instead of switching to a separate messaging tool or routing through Zapier, you can wire a WhatsApp send button directly into any Retool app with a single REST API resource.
This guide covers the setup for a support console or ops dashboard, but the same resource works in any Retool app: admin panels, order management tools, or internal CRMs.
Why do this directly from Retool
Retool apps are usually where your team already looks up the customer record — the order, the ticket, the account. If sending a WhatsApp message requires opening a different tool and re-typing the phone number, people skip it or make mistakes. A button wired straight to the API keeps the lookup and the send in the same screen, with the phone number and message pulled straight from the record that's already on screen.
If your trigger is a backend event instead of a person clicking a button — a webhook, a cron job, a status change in your database — that's a different pattern; see Send WhatsApp Messages from n8n, Make.com or Zapier for automation-triggered sends. Retool's native resource is the right fit specifically when a human is initiating the message from inside an internal tool.
What you need
- A Retool app with a table or detail view that already shows a customer record (phone number and name, at minimum).
- A free TextMeFlow account with a WhatsApp number linked by QR code — no Meta Business verification required.
- Your API key from the TextMeFlow dashboard.
Step 1: add the REST API resource
In Retool, go to Resources → Create New → REST API, and configure:
- Base URL:
https://api.textmeflow.eu/v1 - Headers:
Authorization: Bearer YOUR_API_KEY,Content-Type: application/json
Name it something like textmeflow so it's easy to find when wiring up queries later.
Step 2: create a query for sending a message
Add a new query on the resource, set the method to POST, the path to /messages, and the body to:
{
"to": "{{ table1.selectedRow.data.phone }}",
"text": "{{ textArea1.value }}"
}
Reference whatever components hold the recipient and message text — a selected table row, a text input, or a hardcoded template string built with Retool's {{ }} binding syntax.
Step 3: wire the query to a button
Drop a button next to the record and set its onClick event handler to Trigger query, pointing at the query from step 2. Add a Show notification success handler so the agent gets visual confirmation ("Message sent") instead of wondering whether the click registered.
// Optional: disable the button while the query runs
sendWhatsapp.trigger({
onSuccess: () => {
utils.showNotification({ title: "WhatsApp sent", notificationType: "success" });
},
onFailure: (error) => {
utils.showNotification({ title: "Send failed", description: error.message, notificationType: "error" });
},
});
Guarding against bad phone numbers
The most common failure in an internal tool isn't the API call — it's a phone number stored without a country code. TextMeFlow expects E.164 format (+ and country code, e.g. +32470123456); a local-format number like 0470123456 is rejected before anything is sent. Add a Retool transformer or a simple JS query that validates and normalizes the number before the send query fires, and disable the button when the field is empty or clearly malformed. Full format rules are in /docs/api.
Logging sends back to your own database
If your Retool app is backed by a Postgres or MySQL resource, chain a second query after the send succeeds that writes a row to a message_log table (recipient, text, timestamp, triggering user) using Retool's onSuccess handler on the first query. That gives your team an audit trail of who sent what from the internal tool, independent of TextMeFlow's own delivery logs.
What TextMeFlow handles on its side
Every message sent through the API — from Retool, a backend job, or any other integration — passes through the same anti-spam pipeline automatically: rate limits, a risk score, STOP-word handling, and quiet hours. You don't configure any of this per tool; it applies no matter what made the request. Details are in /docs/anti-spam.
Scaling beyond the free plan
The free plan includes 50 messages a month, for life — enough to build and test this resource with real data. For daily support or ops volume, the Starter plan at €5/month raises your quota, with data hosted in the EU (Paris) and an automatic DPA on paid plans if your internal tooling needs one for a client contract.
Ready to add the button? Create a free account and send your first WhatsApp message from a Retool app in a few minutes.
Zelf WhatsApp-berichten versturen via API?
Gratis voor altijd tot 50 berichten/maand. QR scannen en binnen 5 minuten verstuur je je eerste bericht.
Gratis voor altijd