Сценарий отправляет клиенту персонализированный шаблон WhatsApp, когда изменяется статус его верификации или eKYC. Сообщение включает имя клиента, процесс верификации и новый статус. Статическая кнопка URL открывает страницу статуса верификации или портал клиента.
Пример шаблона
Здравствуйте, {{1}}! Ваш {{2}} статус обновлён: {{3}}. Подробности смотрите, нажав кнопку ниже. Если у вас есть вопросы, мы готовы помочь.
Просмотреть статус
{{1}}
имя клиента
{{2}}
процесс проверки (например, проверка личности, проверка eKYC, проверка документов)
{{3}}
новая метка статуса (например, одобрено, отклонено, на рассмотрении, требуется действие)
“Просмотреть статус”
кнопка — исправлено в шаблоне Meta
Когда использовать
Применяйте этот сценарий, когда клиент отправил документы для проверки или завершил проверку личности, и статус дела изменился — одобрено, отклонено, на рассмотрении или требуется действие, — и вам нужно уведомить его заранее, до того как он обратиться в службу поддержки или снова зайдёт в свой личный кабинет. Это подходит для финтех-команд, обрабатывающих очереди KYC, торговых площадок, отслеживающих проверки соответствия требований для продавцов, и агентств, которые подключают вебхуки статуса eKYC-провайдера к исходящим сообщениям WhatsApp.
Меньше звонков с вопросом «каков мой статус подтверждения?»
Три переменные в теле передают имя клиента, метку процесса верификации и новый статус, чтобы клиент узнал результат или стадию проверки без открытия писем или звонков в службу поддержки.
Детали статуса — в одном касании
Кнопка с постоянным URL-адресом с надписью «Просмотреть статус» открывает портал проверки или страницу статуса — ссылка фикcирована в утверждённом шаблоне Meta, а через API отправляется только текст в теле.
Обновления без открытого чата
Поскольку активного разговора нет, сообщение отправляется с использованием утверждённого шаблона WhatsApp через API 1MSG — единственного канала, который может связаться с клиентом вне 24-часового окна сессии.
Нет ручных уведомлений о статусе в каждом случае
Когда поставщик eKYC или бэк-офис обновляет статус верификации, интеграция сопоставляет номер телефона и запускает шаблон по этому событию вместо того, чтобы кто-то вручную копировал текст статуса.
Доставка зарегистрирована для дальнейшего контроля
Результат доставки фиксируется после отправки, чтобы команды CRM или отделы комплаенса могли видеть, кого уведомили, и обрабатывать ошибки в соответствии с правилами платформы.
Как это работает
Действия клиента
Клиент отправляет документы для проверки или проходит процесс подтверждения личности.
user action
Статус отслеживается
Бэк-офис, поставщик eKYC или интеграция обновляют статус подтверждения.
status: "read"
Определяет номер получателя
Система определяет номер телефона и статус получателя.
status: "read"
Собрать и отправить
Персонализированное шаблонное сообщение создаётся с тремя переменными в теле и неподвижной кнопкой URL.
POST/sendTemplate
Доставлено
Клиент получает уведомление WhatsApp с обновлённым статусом верификации.
delivered
Результат доставки записывается в журнал
Результат доставки сохраняется в журнал; ошибки обрабатываются по правилам платформы.
#!/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_PROCESS="___" # {{2}} process name
TEST_STATUS="___" # {{3}} status label
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_PROCESS=$TEST_PROCESS" \
"TEST_STATUS=$TEST_STATUS"; 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}} process name → ${TEST_PROCESS}
# {{3}} status label → ${TEST_STATUS}
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_PROCESS}" },
{ "type": "text", "text": "${TEST_STATUS}" }
]
}
]
}
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.…), чтобы сопоставить уведомления о доставке.
Принято к отправке — ещё не доставлено на телефон клиента
id
Храните это; обратные вызовы доставки и hookInfo привязаны к этому ключу
Сама доставка приходит позже, в виде отдельного обратного вызова. Зарегистрируйте вебхук (POST …/webhook), и 1MSG отправит обновления статуса на ваш HTTPS-эндпоинт в корневом hooks[] сообщении.
200 OKВебхук статуса доставки — данные, которые вы получаете
sent, delivered, read или статус ошибки, если применимо
id
Связывает callback с id, которое возвращает вызов send
timestamp
Секунды Unix в строковом формате
Если вы не хотите использовать обратные вызовы, опрашивайте GET {base}/{channel}/hookInfo?messageId=<id> вместо этого. На практике доставка часто завершается в течение нескольких секунд — но контракт API этого не гарантирует, поэтому никогда не блокируйте процесс в ожидании доставки.
Распространённые ошибки
Статус
Ответ
Причина
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 шаблон.