1msg official logo

WhatsApp Business API для повторного обращения к лиду без ответа

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

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

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

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

Здравствуйте, {{1}}! Мы связались по поводу «{{2}}», но ещё не получили ответа. {{3}}Если предложение всё ещё актуально, откройте ссылку или ответьте на это сообщение.

Открыть предложение
  • {{1}}
    лид или имя клиента
  • {{2}}
    продукт, услуга или тема из предыдущего контакта с отделом продаж
  • {{3}}
    подсказка для повторного вовлечения (предложение всё ещё действительно, забронируйте 15-минутный звонок)
  • “Открыть предложение”
    кнопка — исправлено в шаблоне Meta
WhatsApp Business API for lead no-response follow-up

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

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

Сделки не замирают в тишине
CRM или воронка продаж срабатывают, когда истекает тайм-аут на отсутствие ответа после касания, чтобы последующее действие отправилось, пока интерес ещё сохраняется, вместо ожидания, пока представитель заметит паузу.
Второе касание без свободного текста в соответствии с правилами
Если беседа не открыта, только утверждённый шаблон может первым дойти до лида; три переменные в теле содержат персонализированный текст, который API разрешено отправлять за пределами 24-часового окна.
Подсказка, привязанная к последнему разговору
Имя лида, продукт или тема из предыдущего контакта с продажами и намёк на повторное взаимодействие заполняют три переменные в теле, поэтому в сообщении упоминается то, что уже обсуждалось, вместо общего запроса на проверку.
Вернуться к предложению
Кнопка с фиксированным статическим URL в шаблоне Meta открывает страницу предложения или бронирования, а в теле сообщения предлагается ответить в том же треде, если предложение всё ещё актуально.
Следующий шаг готов для CRM
Результат доставки сохраняется в CRM после отправки, чтобы представитель видел, было ли сообщение доставлено, прежде чем выбрать следующий шаг продажи.

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

  1. Триггер

    CRM или процесс продаж определяет, что время ожидания ответа истёкло после взаимодействия с клиентом.

    event · triggered

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

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

    phone: "+…"

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

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

    POST /sendTemplate

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

    Лид получает последующее сообщение о продажах в WhatsApp.

    delivered

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

    Результат доставки сохраняется в CRM для следующего шага в продажах.

    status: "read"

WhatsApp Business API for lead no-response follow-up

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

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

  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 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 OKОтвет
{
  "sent": true,
  "id": "wamid.HBgLMzgwNjM5...",
  "message": "Message accepted for delivery"
}
  • sent

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

  • id

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

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

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

    sent, delivered, read — или статус сбоя, если применимо

  • id

    Соотносит callback с 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 для каталога товаров — интерактивный список
Этот сценарий отправляет интерактивный список с помощью 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 Business API для клиента нуждается в уточнении
Сценарий отправляет лиду персонализированный шаблон WhatsApp с просьбой уточнить цель.

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