💬 Shared WhatsApp Inbox on the new PlatformMore
1msg official logo

Consultation invite via WhatsApp API template

The scenario sends the customer a personalized WhatsApp template message inviting them to a pre-purchase consultation.

Use case overview

The scenario sends the customer a personalized WhatsApp template message inviting them to a pre-purchase consultation. The text includes the customer's name, the product or service they showed interest in, and the company or specialist ready to answer questions. A link button leads to a booking page or consultation request form.

Template example

Hello, {{1}}!

You were interested in {{2}}. Specialist {{3}} is ready to provide a free pre-purchase consultation and answer your questions.

Book consultation
  • {{1}}
    customer name
  • {{2}}
    name of the product or service the customer showed interest in
  • {{3}}
    company name or specialist name who conducts the consultation
  • “Book consultation”
    button — fixed in the Meta template
WhatsApp Business API for pre-purchase consultation

When to use it

Use this scenario when someone showed clear purchase intent — added to cart, requested a quote, or left contact details — but has not bought yet and there is no open WhatsApp thread to answer in free text. It fits e-commerce and marketplaces with abandoned carts, B2B teams offering commercial proposals or product demos, and agencies wiring CRM or order platforms for several clients.

Reach warm leads without cold calling
There is no open conversation, so only an approved template can go out first — the invitation lands in WhatsApp outside the 24-hour window instead of a rep dialing or emailing into silence.
Consultation tied to what they browsed
Three body variables carry the customer's name, the product or service they showed interest in, and the company or specialist ready to help, so the message reads as a direct reply to their action.
One tap to book a call
A static URL button fixed in the Meta template opens the booking page or consultation request form — only the body variables are sent via the API.
Less manual pipeline work
CRM, e-commerce, or the lead form fires the send when purchase intent is detected, so no one rebuilds the list or retypes the offer for each contact.
Follow-up stays in CRM
Delivery result is logged for the sales pipeline, so the same record that triggered the invite tracks what happened next.

Workflow

  1. Trigger

    The system detects purchase intent or an event where a consultation offer is appropriate (cart, price request, lead form).

    event · triggered

  2. Capture event

    Customer phone, product or service context, and company or specialist data are taken from CRM, e-commerce, or the lead form.

    phone: "+…"

  3. Build & send

    A personalized template message is built with three body variables and a static URL button for booking a consultation.

    POST /sendTemplate

  4. Delivered

    The customer receives the WhatsApp message and can follow the link to book or request a consultation.

    delivered

  5. Status tracked

    Delivery result is logged for follow-up in CRM or the sales pipeline.

    status: "read"

WhatsApp Business API for pre-purchase consultation

Technical implementation

Prerequisites

  1. 1MSG API Key · How to get API Key
  2. WhatsApp Business account · How to Connect WABA
  3. WhatsApp Template · How to Approve WABA Template
  4. Customer opt-in · How to Manage Customers Consent

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)

TEMPLATE_NAME="___"                        # approved template name
TEMPLATE_NAMESPACE="___"                   # template namespace (required — send fails without it)
TEMPLATE_LANGUAGE="___"                    # template language code, e.g. "en"



# === Test data ===
TEST_PHONE="___"                 # client phone in international format
TEST_CUSTOMERNAME="___"         # {{1}} customer name
TEST_PRODUCTORSERVICENAME="___"         # {{2}} product or service name
TEST_COMPANYORSPECIALISTNAME="___"         # {{3}} company or specialist name

PHONE_NORM="$(printf '%s' "$TEST_PHONE" | tr -cd '0-9')"

for pair in "CHANNEL_ID=$CHANNEL_ID" "API_TOKEN=$API_TOKEN" \
            "TEMPLATE_NAME=$TEMPLATE_NAME" "TEMPLATE_NAMESPACE=$TEMPLATE_NAMESPACE" \
            "TEMPLATE_LANGUAGE=$TEMPLATE_LANGUAGE" "TEST_PHONE=$TEST_PHONE" \
            "TEST_CUSTOMERNAME=$TEST_CUSTOMERNAME" \
            "TEST_PRODUCTORSERVICENAME=$TEST_PRODUCTORSERVICENAME" \
            "TEST_COMPANYORSPECIALISTNAME=$TEST_COMPANYORSPECIALISTNAME"; 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}/sendTemplate"

# params carries body ONLY. Button text is fixed in the Meta template — no button param.

# {{1}} customer name → ${TEST_CUSTOMERNAME}
# {{2}} product or service name → ${TEST_PRODUCTORSERVICENAME}
# {{3}} company or specialist name → ${TEST_COMPANYORSPECIALISTNAME}
read -r -d '' PAYLOAD <<JSON || true
{
  "phone": "${PHONE_NORM}",
  "template": "${TEMPLATE_NAME}",
  "namespace": "${TEMPLATE_NAMESPACE}",
  "language": { "policy": "deterministic", "code": "${TEMPLATE_LANGUAGE}" },
  "params": [
    {
      "type": "body",
      "parameters": [
        { "type": "text", "text": "${TEST_CUSTOMERNAME}" },
        { "type": "text", "text": "${TEST_PRODUCTORSERVICENAME}" },
        { "type": "text", "text": "${TEST_COMPANYORSPECIALISTNAME}" }
      ]
    }

  ]
}
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.

200 OKResponse
{
  "sent": true,
  "message": "Sent to [email protected]",
  "description": "Message has been sent to the provider",
  "id": "wamid.HBgLMzgwNjM5..."
}
  • sent

    Accepted for sending — not yet on the customer's phone

  • id

    Store it; delivery callbacks and hookInfo are keyed on this

Delivery statuses and webhooks →

Common errors

StatusAPI responseCauseFix
200Message was not sent: template is not definednamespace, template or language is missing from the request body.Send all three. Take namespace and the exact template name from GET /templates; language is an object: {"policy": "deterministic", "code": "en"}.
200template name (…) does not exist in <language>The template is approved in a different language than the one requested.Use the exact language code the template was approved in (for example es_MX is not the same as es). Check it in GET /templates.
200Message was not sent: provide chatId, phone, bsuid, or usernameNo recipient the channel could resolve.Pass exactly one recipient: phone (country code plus number, digits only), chatId (for example [email protected]) or bsuid.

All error codes →

Common questions

Related

Lead Engagement & Conversion
Reply to stock availability questions (WhatsApp API)
This scenario sends a free-text WhatsApp message with sendMessage inside the 24-hour customer service window after the client asks if an item is available.
Lead Engagement & Conversion
Purchase decision nudge with WhatsApp buttons
This scenario sends a prospective customer a personalised WhatsApp template while they are still deciding.
Lead Engagement & Conversion
Proposal follow-up reminder via WhatsApp API
The scenario sends the prospect a personalised WhatsApp template message reminding them to review the commercial proposal.
Lead Engagement & Conversion
WhatsApp API list message: product catalog picker
This scenario sends an interactive list with sendList during the 24-hour session window.
Lead Engagement & Conversion
New lead alert to sales manager via WhatsApp API
The scenario sends the sales manager a personalised WhatsApp template when a new lead is captured.
Lead Engagement & Conversion
Start lead qualification via WhatsApp API
This use case sends a new lead an approved WhatsApp template with a personalized greeting: the message substitutes the lead's name and product or source context, and the «Начать» (Start) quick-reply b
Lead Engagement & Conversion
Lead re-engagement message via WhatsApp API
The scenario sends the lead a personalised WhatsApp template when they did not reply to a prior sales message within the expected time.
Lead Engagement & Conversion
Lead handoff to sales notice via WhatsApp API
The scenario sends the client a personalised WhatsApp template when their qualified lead is handed off to the sales team.

Build for WhatsApp in hours
without infrastructure hassle