1msg official logo

WhatsApp Business API для передачи лида в отдел продаж

Сценарий отправляет клиенту персонализированный шаблон WhatsApp, когда квалифицированный лид передаётся в отдел продаж.

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

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

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

Здравствуйте, {{1}}! Ваш запрос о «{{2}}» передан в отдел продаж. {{3}} Мы свяжемся с вами в ближайшее время.

Открыть портал
  • {{1}}
    имя клиента или лида
  • {{2}}
    тема продукта, услуги или заявки
  • {{3}}
    подробности следующего шага (например, менеджер свяжется с вами в течение одного рабочего дня)
  • “Открыть портал”
    кнопка — исправлено в шаблоне Meta
WhatsApp Business API for lead handoff to sales

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

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

Меньше потерянных лидов среди команд
Три переменные в теле содержат имя клиента, тему запроса и последующие действия, чтобы передача выглядела как продолжение, а не молчание между отделами маркетинга и продаж.
Первое касание без чата
CRM отправляет утверждённый шаблон при передаче лида по правилам маршрутизации, чтобы отдел продаж мог связаться с клиентом, даже если окно 24-часового общения не открыто.
Меньше ручной передачи задач
Событие маршрутизации автоматически создаёт шаблон из полей передачи, поэтому сотрудникам не нужно заново вводить имя клиента, тему или обещание следующего шага после передачи в очередь.
Продажи растут с учётом доставки
Результат доставки записывается в CRM при отправке, чтобы специалист по работе с клиентами увидел, что уведомление отправлено, до того как он сделает последующий звонок.
Одно касание до предложения или портала
Фиксированная кнопка статического URL в шаблоне Meta открывает страницу предложения или портал CRM, при этом только три переменные в теле меняются для каждого лида.

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

  1. Триггер

    CRM или правила маршрутизации переводят квалифицированного лида в очередь продаж.

    event · triggered

  2. Захватить событие

    Система определяет номер телефона клиента и поля передачи.

    phone: "+…"

  3. Создать и отправить

    Персонализированный шаблон передачи создаётся с тремя переменными в теле и статической кнопкой URL.

    POST /sendTemplate

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

    Клиент получает уведомление о переводе чата в WhatsApp.

    delivered

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

    Результат доставки записывается в CRM для дальнейшего общения с клиентом.

    status: "read"

WhatsApp Business API for lead handoff to sales

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

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

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

Примеры кода

#!/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

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

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

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

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

  • id

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

Delivery itself arrives later, as a separate callback. Register a webhook (POST …/webhook) and 1MSG POSTs status updates to your HTTPS endpoint in a top-level hooks[] payload.

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

    sent, delivered, read — или статус ошибки, если это уместно

  • id

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

  • timestamp

    Строка со временем в секундах Unix

If you would rather not receive callbacks, poll GET {base}/{channel}/hookInfo?messageId=<id> instead. In practice delivery often completes within seconds — but the API contract does not guarantee it, so never block a flow waiting on it.

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

СтатусОтветПричина
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 для уведомления нового менеджера по лидам
Сценарий отправляет менеджеру по продажам персонализированный шаблон WhatsApp, когда поступает новый лид.
Вовлечение и конверсия лидов
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 за часы
без проблем с инфраструктурой