Reply to price inquiries via WhatsApp API
This scenario sends a free-text WhatsApp message with sendMessage inside the 24-hour customer service window after the client asks how much a product or service costs.
Use case overview
This scenario sends a free-text WhatsApp message with sendMessage inside the 24-hour customer service window after the client asks how much a product or service costs.
Template example
Hello, {{1}}! The price for «{{2}}» is {{3}}. If you need a custom quote or volume discount, reply here and our manager will help.
- {{1}}client name
- {{2}}product or service name
- {{3}}formatted price with currency

When to use it
Reach for this scenario when a prospect asks how much a product or service costs inside an open WhatsApp conversation and you need the quote back before they move on. It fits sales teams pulling live prices from CRM or a catalog API, small businesses handling quote requests in chat, and agencies wiring client storefronts to session replies instead of cold-start templates.
Workflow
- Status tracked
An inbound client message with a price question arrives via webhook.
status:"read" - Capture event
Your backend resolves the product SKU and current list price.
phone:"+…" - Build & send
A session text message sends the quote with product name and formatted amount.
POST/sendMessage - Delivered
The client continues the dialog for discounts or checkout 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_PRODUCTORSERVICENAME="___" # {{2}} product or service name
TEST_PAYMENTAMOUNT="___" # {{3}} payment amount
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_PRODUCTORSERVICENAME=$TEST_PRODUCTORSERVICENAME" \
"TEST_PAYMENTAMOUNT=$TEST_PAYMENTAMOUNT"; 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! The price for «Premium Plan (annual)» is 49 900 RUB. If you need a custom quote or volume discount, reply here and our manager will help."
}
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=… |
