Auto-reply to inbound leads via WhatsApp API
This scenario sends a free-text WhatsApp message with sendMessage inside the 24-hour customer service window after the client wrote first about a product or service.
Use case overview
This scenario sends a free-text WhatsApp message with sendMessage inside the 24-hour customer service window after the client wrote first about a product or service.
Template example
Hello, {{1}}! We received your request about «{{2}}». {{3}} is reviewing it and will reply shortly.
- {{1}}client name
- {{2}}request topic or product area
- {{3}}assigned sales manager name

When to use it
Use this scenario when a prospect writes first on WhatsApp asking about a product or service and you need to acknowledge the request before a sales manager replies with details. It fits sales inbound flows where the client already opened the 24-hour session window and leaving them without a reply risks losing the lead.
Workflow
- Status tracked
An inbound client message arrives via webhook.
status:"read" - Capture event
Your backend maps the chat to a lead and extracts the request topic.
POST/sendMessage - Build & send
A session text message acknowledges the request and names the manager.
POST/sendMessage - Delivered
The manager continues the dialog with a detailed answer in the same session.
delivered

Technical implementation
Prerequisites
- 1MSG API Key · How to get API Key
- WhatsApp Business account · How to Connect WABA
- Open 24-hour session window · How the 24-hour window works
- Customer opt-in · How to Manage Customers Consent
- Webhook endpoint · How to Set Up Webhooks
Code examples
#!/usr/bin/env bash
set -euo pipefail
# === Configuration (replace "___" placeholders) ===
API_BASE_URL="https://api.1msg.io" # production 1MSG API base URL
CHANNEL_ID="___" # channel ID from 1MSG dashboard
API_TOKEN="___" # channel JWT token (Bearer)
# === Test data ===
TEST_PHONE="___" # client phone in international format · requires open 24-hour session window
TEST_CUSTOMERNAME="___" # {{1}} customer name
TEST_TOPIC="___" # {{2}} topic or subject
TEST_MANAGERNAME="___" # {{3}} manager name
PHONE_NORM="$(printf '%s' "$TEST_PHONE" | tr -cd '0-9')"
for pair in "CHANNEL_ID=$CHANNEL_ID" "API_TOKEN=$API_TOKEN" "TEST_PHONE=$TEST_PHONE" \
"TEST_CUSTOMERNAME=$TEST_CUSTOMERNAME" \
"TEST_TOPIC=$TEST_TOPIC" \
"TEST_MANAGERNAME=$TEST_MANAGERNAME"; do
val="${pair#*=}"
if [ -z "$val" ] || [ "$val" = "___" ]; then
echo "Missing configuration value: ${pair%%=*}" >&2
exit 1
fi
done
if [ -z "$PHONE_NORM" ]; then
echo "Error: phone number has no digits after normalization" >&2
exit 1
fi
URL="${API_BASE_URL%/}/${CHANNEL_ID}/sendMessage"
read -r -d '' PAYLOAD <<JSON || true
{
"phone": "${PHONE_NORM}",
"body": "Hello, Alexey! We received your request about «CRM for a sales team». Manager Anna is reviewing it and will reply shortly."
}
JSON
RESPONSE="$(curl -s -w '\n%{http_code}' -X POST "$URL" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${API_TOKEN}" \
-d "$PAYLOAD")"
HTTP_CODE="$(printf '%s' "$RESPONSE" | tail -n1)"
BODY="$(printf '%s' "$RESPONSE" | sed '$d')"
case "$BODY" in
*'"sent":true'*) ok=1 ;;
*) ok=0 ;;
esac
if [ "$HTTP_CODE" -ge 200 ] && [ "$HTTP_CODE" -lt 300 ] && [ "$ok" -eq 1 ]; then
echo "Message sent to client."
echo "API response: $BODY"
else
echo "Send failed. HTTP status: $HTTP_CODE" >&2
echo "$BODY" >&2
exit 1
fi
Response and delivery status
HTTP 2xx and JSON "sent": true mean 1MSG accepted the message for sending — not that it already reached the customer's phone. Save the id field (looks like wamid.…) to correlate delivery callbacks.
{
"sent": true,
"message": "Sent to [email protected]",
"description": "Message has been sent to the provider",
"id": "wamid.HBgLMzgwNjM5..."
}sentAccepted for sending — not yet on the customer's phone
idStore it; delivery callbacks and
hookInfoare keyed on this
Common errors
| Status | API response | Cause | Fix |
|---|---|---|---|
| 200 | Message was not sent: provide chatId, phone, bsuid, or username | No recipient the channel could resolve. | Pass exactly one recipient: phone (country code plus number, digits only), chatId (for example [email protected]) or bsuid. |
| 200 | Message was not sent: empty body | The body field is missing or empty. | Send a non-empty body string. It is required for text, reply-button and list messages. |
| 401 | token is required | The request has no token. | Add your channel token as the token query parameter: https://api.1msg.io/{channelId}/{method}?token=… |
