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

Purchase decision nudge with WhatsApp buttons

This scenario sends a prospective customer a personalised WhatsApp template while they are still deciding.

Use case overview

This scenario sends a prospective customer a personalised WhatsApp template while they are still deciding. The message includes their name, the product or service under consideration, and a helpful next-step hint. Two quick-reply buttons let them ask a question or signal they are ready to buy; taps arrive via webhook for routing to sales or automated follow-up.

Template example

Hi {{1}}! We're here to help you decide on {{2}}. {{3}} — tap a button below if you have questions or you're ready to move forward.

Ask a question
  • {{1}}
    customer or prospect name
  • {{2}}
    name of the product or service under consideration
  • {{3}}
    helpful next-step hint or nurture touchpoint (e.g. comparison guide, FAQ, offer to schedule a call)
  • “Ask a question”
    button — fixed in the Meta template
WhatsApp Business API for purchase decision nurture

When to use it

Reach for this scenario when a prospect is still deciding after a proposal, demo, or pricing request, and there is no open WhatsApp chat — only an approved template can start the conversation. It fits B2B and services teams nurturing stalled deals, e-commerce and SaaS leads comparing plans, and agencies wiring scheduled nurture touchpoints from CRM or a sales pipeline.

Fewer deals lost between interest and purchase
CRM fires the template on a nurture milestone while the prospect is still in the decision stage, so they get a timely WhatsApp touchpoint without a cold call and without waiting for an open session.
Messages that feel personal, not bulk
Three body variables carry the prospect's name, the product under consideration, and a next-step hint such as a comparison guide or FAQ, so each send reads like one-to-one follow-up.
Less manual pipeline chasing
The sales pipeline schedules touchpoints and pulls phone, product context, and the hint from CRM, so reps are not retyping nurture messages for each prospect.
Faster handoff when they are ready to buy
A «Ready to buy» quick-reply arrives via webhook and routes to checkout or sales handoff within the 24-hour session window.
Questions answered in the same chat
«Ask a question» opens the session for a manager or bot reply in WhatsApp, and delivery plus button taps stay logged in CRM until a buy or no-buy outcome.

Workflow

  1. Trigger

    CRM or the sales pipeline detects that a nurture touchpoint is due for a prospect still in the decision stage.

    event · triggered

  2. Capture event

    Customer phone, product or service context, and the next-step hint are taken from CRM or the pipeline record.

    phone: "+…"

  3. Build & send

    A personalised template is sent with three body variables and two quick-reply buttons for engagement.

    POST /sendTemplate

  4. Status tracked

    The prospect taps «Ask a question» or «Ready to buy» — the event arrives via webhook and follow-up is routed accordingly.

    status: "read"

  5. Delivered

    Delivery and engagement are logged in CRM until the prospect buys, declines, or exits the nurture track.

    delivered

WhatsApp Business API for purchase decision nurture

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
  5. 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)

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_NEXTSTEP="___"         # {{3}} next step

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_NEXTSTEP=$TEST_NEXTSTEP"; 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}} next step → ${TEST_NEXTSTEP}
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_NEXTSTEP}" }
      ]
    }

  ]
}
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 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.
Lead Engagement & Conversion
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.
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
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
Consultation invite via WhatsApp API template
The scenario sends the customer a personalized WhatsApp template message inviting them to a pre-purchase consultation.
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

Build for WhatsApp in hours
without infrastructure hassle