💬 Командный WhatsApp-Инбокс на новой ПлатформеЕщё
1msg official logo

WhatsApp Business API для приветственного сообщения при регистрации

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

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

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

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

Добро пожаловать {{1}}! Спасибо за регистрацию в {{2}}. Мы рады, что вы с нами. Нажмите кнопку ниже, чтобы открыть свой аккаунт и выполнить первые шаги. Если вам нужна помощь, просто ответьте на это сообщение.

Открыть аккаунт
  • {{1}}
    имя клиента
  • {{2}}
    название сервиса или приложения, на которое пользователь подписался
  • “Открыть аккаунт”
    кнопка — исправлено в шаблоне Meta
WhatsApp Business API for registration welcome message

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

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

Добро пожаловать, пока желание зарегистрироваться свежо
Приложение генерирует событие «регистрация завершена» с номером телефона, указанным при регистрации, и утверждённый шаблон доставляется новому пользователю через WhatsApp, даже если разговор ещё не начат.
Здравствуйте
Две переменные в теле содержат имя клиента и название сервиса или приложения, на которое он зарегистрировался, чтобы приветствие звучало как личное подтверждение, а не как общая рассылка.
Одно касание в аккаунт
Статическая кнопка с URL в шаблоне Meta открывает страницу аккаунта или начальную страницу, предоставляя пользователю прямой доступ без ожидания в 24-часовом окне ответов.
Без ручной настройки приветствия
Система получает имя и контекст услуги из регистрационных данных и отправляет шаблон автоматически, чтобы никому не приходилось вводить данные вручную или вспоминать о необходимости отправить сообщение каждому новому пользователю.
Отслеживание доставки в процессе онбординга
Результат доставки фиксируется для аналитики онбординга или последующей поддержки, чтобы команда знала, получено ли приветственное сообщение, прежде чем пытаться связаться с пользователем другими способами.

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

  1. Фиксировать событие

    Приложение или портал отправляет событие о завершении регистрации с телефоном пользователя.

    phone: "+…"

  2. Извлечь имя клиента

    Система получает имя клиента и контекст сервиса или приложения из данных регистрации.

    phone: "+…"

  3. Построить и отправить

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

    POST /sendTemplate

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

    Новый пользователь получает приветственное сообщение WhatsApp и может открыть аккаунт через кнопку.

    delivered

  5. Статус отслежен

    Результат доставки фиксируется для аналитики онбординга или дальнейшего обращения в поддержку.

    status: "read"

WhatsApp Business API for registration welcome message

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

Требования

  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_SERVICE="___"         # {{2}} service name

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_SERVICE=$TEST_SERVICE"; 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}} service name → ${TEST_SERVICE}
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_SERVICE}" }
      ]
    }

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