💬 Командный WhatsApp-Инбокс на новой ПлатформеЕщё
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

Связанные

Вовлечение и конверсия лидов
WhatsApp Business API для напоминания о сопровождении предложений
Сценарий отправляет потенциальному клиенту шаблонное персонализированное сообщение WhatsApp с напоминанием ознакомиться с коммерческим предложением.
Вовлечение и конверсия лидов
WhatsApp Business API для каталога товаров — интерактивный список
Этот сценарий отправляет интерактивный список с помощью sendList в течение 24-часового окна сеанса.
Вовлечение и конверсия лидов
WhatsApp Business API для консультаций перед покупкой
Сценарий отправляет клиенту персонализированный шаблон сообщения WhatsApp с приглашением на консультацию перед покупкой.
Вовлечение и конверсия лидов
WhatsApp Business API для уведомления нового менеджера по лидам
Сценарий отправляет менеджеру по продажам персонализированный шаблон WhatsApp, когда поступает новый лид.
Вовлечение и конверсия лидов
WhatsApp Business API для квалификации лидов с ключевыми вопросами
Этот кейс отправляет новому лиду одобренный шаблон WhatsApp с персонализированным приветствием: подставляются имя лида и продукт, а также быстрый ответ «Начать»
Вовлечение и конверсия лидов
WhatsApp Business API для повторного обращения к лиду без ответа
Сценарий отправляет лиду персонализированный шаблон WhatsApp, если он не ответил на предыдущее продажное сообщение в ожидаемое время.
Вовлечение и конверсия лидов
WhatsApp Business API для передачи лида в отдел продаж
Сценарий отправляет клиенту персонализированный шаблон WhatsApp, когда квалифицированный лид передаётся в отдел продаж.
Вовлечение и конверсия лидов
WhatsApp Business API для первого контакта с новым лидом
Сценарий отправляет лиду персонализированный шаблон WhatsApp как первое касание в продажах.

Интегрируйте WhatsApp за часы
без проблем с инфраструктурой