Сценарий отправляет клиенту персонализированный шаблон WhatsApp, когда квалифицированный лид передаётся команде продаж. Сообщение включает имя клиента, тему продукта или запроса и дальнейшие действия. Статическая кнопка URL открывает страницу предложения или портал CRM.
Пример шаблона
Здравствуйте, {{1}}! Ваш запрос о «{{2}}» передан в отдел продаж. {{3}} Мы свяжемся с вами в ближайшее время.
Открыть портал
{{1}}
имя клиента или лида
{{2}}
тема продукта, услуги или заявки
{{3}}
подробности следующего шага (например, менеджер свяжется с вами в течение одного рабочего дня)
“Открыть портал”
кнопка — исправлено в шаблоне Meta
Когда использовать это
Используйте этот сценарий, когда маркетинг или SDR квалифицирует лида, и CRM направляет его в очередь продаж, но клиенту всё ещё требуется подтверждение в WhatsApp, прежде чем кто-то начнёт с ним работать. Это подходит для передачи от SDR к АE, лидов, квалифицированных маркетингом, которые проходят оценку и попадают в очередь продаж, и агентств, которые подключают вебхуки маршрутизации лидов в CRM к исходящим сообщениям WhatsApp.
Меньше потерянных лидов среди команд
Три переменные в теле содержат имя клиента, тему запроса и последующие действия, чтобы передача выглядела как продолжение, а не молчание между отделами маркетинга и продаж.
Первое касание без чата
CRM отправляет утверждённый шаблон при передаче лида по правилам маршрутизации, чтобы отдел продаж мог связаться с клиентом, даже если окно 24-часового общения не открыто.
Меньше ручной передачи задач
Событие маршрутизации автоматически создаёт шаблон из полей передачи, поэтому сотрудникам не нужно заново вводить имя клиента, тему или обещание следующего шага после передачи в очередь.
Продажи растут с учётом доставки
Результат доставки записывается в CRM при отправке, чтобы специалист по работе с клиентами увидел, что уведомление отправлено, до того как он сделает последующий звонок.
Одно касание до предложения или портала
Фиксированная кнопка статического URL в шаблоне Meta открывает страницу предложения или портал CRM, при этом только три переменные в теле меняются для каждого лида.
Как это работает
Триггер
CRM или правила маршрутизации переводят квалифицированного лида в очередь продаж.
event · triggered
Захватить событие
Система определяет номер телефона клиента и поля передачи.
phone: "+…"
Создать и отправить
Персонализированный шаблон передачи создаётся с тремя переменными в теле и статической кнопкой URL.
POST/sendTemplate
Доставлено
Клиент получает уведомление о переводе чата в WhatsApp.
delivered
Статус отслеживается
Результат доставки записывается в CRM для дальнейшего общения с клиентом.
#!/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.…) для сопоставления обратных вызовов доставки.
Сохраните это; колбэки доставки и 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Вебхук статуса доставки — содержимое, которое вы получаете
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.
Распространённые ошибки
Статус
Ответ
Причина
200
Message was not sent: template is not defined
namespace, template or language missing from the request body.
200
template name (…) does not exist in <language>
The template is approved in a different language than the one requested.
200
Message was not sent: provide chatId, phone, bsuid, or username
No recipient the channel could resolve.
403
access denied
The token is wrong, or belongs to a different channel than the URL.
429
too many requests. please try later
The channel is over its send rate.
ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ
Да, для первых сообщений в WhatsApp требуется одобренный Meta шаблон.