1msg official logo

WhatsApp Business API для квалификации лидов с ключевыми вопросами

Этот кейс отправляет новому лиду одобренный шаблон WhatsApp с персонализированным приветствием: подставляются имя лида и продукт, а также быстрый ответ «Начать»

Обзор сценария

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

Пример шаблона

Здравствуйте, {{1}}! Чтобы быстрее найти подходящее решение для {{2}}, ответьте на несколько коротких вопросов. Нажмите «Начать» — это займёт пару минут.

Начать
  • {{1}}
    лид или имя получателя
  • {{2}}
    контекст интереса к продукту или источника лида (откуда пришёл запрос, какая область интересует)
  • “Начать”
    кнопка — исправлено в шаблоне Meta
WhatsApp Business API for lead qualification through key questions

Когда использовать это

Этот сценарий используйте, когда появляется новый лид из формы, рекламы или CRM только с базовыми контактными данными. Отделу продаж нужен структурированный профиль — бюджет, сроки, размер компании, сфера применения — до первого звонка, но сеанс WhatsApp ещё не открыт. Это подходит для команд разработчиков, небольших продуктовых групп и агентств, интегрирующих WhatsApp в воронку квалификации, где один вопрос по шаблону не может охватить весь профиль.

Поддерживается первый контакт без открытого чата
Утверждённый шаблон с двумя переменными в теле — имя и продукт или источник контекста — и кнопка быстрого ответа «Start» используется для начала разговора, если 24-часовая сессия ещё не началась.
Полный профиль квалификации в одном чате
После того как лид нажмёт «Start», последующие вопросы отправляются по одному в окне сессии, и каждый ответ поступает через вебхук, чтобы бюджет, сроки, размер компании и вариант использования оказались в одном структурированном профиле, а не в одном поле шаблона.
Уменьшение отказов от формы
Лид отвечает на короткие вопросы в WhatsApp после персонализированного приветствия, вместо того чтобы заполнять длинную веб-форму, которую могут так и не завершить.
Быстрая передача в отдел продаж или в CRM
После сохранения всех ключевых полей в квалификационном профиле интегратор передаёт готовую запись в CRM или отдел продаж для маршрутизации — торговый представитель не вводит вручную ответы из разных каналов.
Остаётся в окне сеанса
Последующие вопросы отправляются сразу после каждого ответа вебхука, пока 24-часовое окно остаётся открытым после нажатия «Начать», поэтому для них не требуется другой одобренный шаблон.

Как это работает

  1. Собрать и отправить

    Когда появляется новый лид, система отправляет персонализированный шаблон приветствия и приглашение пройти короткую квалификацию.

    POST /sendTemplate

  2. Статус отслеживается

    Лид нажимает «Начать» — событие приходит через вебхук, и сессия открывается в 24-часовом окне WhatsApp.

    status: "read"

  3. В рамках сессии

    В ходе сессии интегратор задаёт уточняющие вопросы один за другим (бюджет, сроки, размер компании, вариант использования).

    POST /sendTemplate

  4. Каждый ответ фиксируется

    Каждый ответ фиксируется вебхуком и сохраняется в профиле квалификации.

    status: "read"

  5. Доставлено

    После сбора всех ключевых полей профиль передаётся в CRM или отдел продаж для дальнейшей работы.

    delivered

WhatsApp Business API for lead qualification through key questions

Техническая реализация

Предварительные требования

  1. Ключ API 1MSG · Как получить ключ API
  2. Аккаунт WhatsApp Business · Как подключить WABA
  3. Шаблон WhatsApp · Как одобрить шаблон WABA
  4. Согласие клиента на участие · Как управлять согласием клиентов
  5. Конечная точка вебхука · Как настроить вебхуки

Примеры кода

#!/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_LEADNAME="___"         # {{1}} lead name
TEST_PRODUCTCONTEXT="___"         # {{2}} product context

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_LEADNAME=$TEST_LEADNAME" \
            "TEST_PRODUCTCONTEXT=$TEST_PRODUCTCONTEXT"; 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}} lead name → ${TEST_LEADNAME}
# {{2}} product context → ${TEST_PRODUCTCONTEXT}
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_LEADNAME}" },
        { "type": "text", "text": "${TEST_PRODUCTCONTEXT}" }
      ]
    }

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

Статус ответа и доставки

HTTP 2xx и JSON "sent": true означают, что 1MSG приняла сообщение для отправки — это не значит, что оно уже достигло телефона клиента. Сохраните поле id (выглядит как wamid.…), чтобы сопоставить уведомления о доставке.

200 OKОтвет
{
  "sent": true,
  "id": "wamid.HBgLMzgwNjM5...",
  "message": "Message accepted for delivery"
}
  • sent

    Принято для отправки — ещё не попало на телефон клиента

  • id

    Сохраните это; обратные вызовы доставки и hookInfo привязаны к этому

Доставка приходит позже, отдельным обратным вызовом. Зарегистрируйте вебхук (POST …/webhook), и 1MSG отправит обновление статуса на ваш HTTPS-эндпоинт в hooks[] полезной нагрузке верхнего уровня.

200 OKВебхук статуса доставки — данные, которые вы получаете
{
  "hooks": [
    {
      "id": "gBGGeSaGViBfAgnlzOSHEwK9O6F",
      "type": "message",
      "status": "sent",
      "timestamp": "1654864094",
      "recipient_id": "556123122026"
    }
  ]
}
  • status

    sent, delivered, read — или статус «Ошибка», если применимо

  • id

    Соотносит обратный вызов с id, возвращённым вызовом send

  • timestamp

    Unix-время в виде строки

Если вы предпочитаете не получать обратные вызовы, используйте опрос GET {base}/{channel}/hookInfo?messageId=<id> вместо этого. На практике доставка часто завершается в течение нескольких секунд, но контракт API этого не гарантирует, поэтому никогда не блокируйте процесс в ожидании этого.

Распространённые ошибки

СтатусОтветПричина
200Message was not sent: template is not definednamespace, template or language missing from the request body.
200template name (…) does not exist in <language>The template is approved in a different language than the one requested.
200Message was not sent: provide chatId, phone, bsuid, or usernameNo recipient the channel could resolve.
403access deniedThe token is wrong, or belongs to a different channel than the URL.
429too many requests. please try laterThe channel is over its send rate.

ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ

Да, для холодных сообщений WhatsApp требуется одобренный Meta шаблон.

Связанные

Вовлечение и конверсия лидов
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 за часы
без проблем с инфраструктурой