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

WhatsApp Business API для уведомлений о смене статуса

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

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

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

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

Здравствуйте {{1}}, статус вашего {{2}}обновлен на:{{3}}. Полные сведения можно посмотреть на нашем сайте. Спасибо, что остаетесь с нами — мы уведомим вас о любых дальнейших изменениях.

Просмотр статуса
  • {{1}}
    имя клиента
  • {{2}}
    процесс или объект (например, заказ №12345, заявка на кредит, тикет поддержки)
  • {{3}}
    новая метка статуса (например, отправлено, на рассмотрении, одобрено)
  • “Просмотр статуса”
    кнопка — исправлено в шаблоне Meta
WhatsApp Business API for status change notification

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

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

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

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

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

    Бэк-офис, CRM или интеграция отправляют событие смены статуса.

    status: "read"

  2. Определяет телефон получателя

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

    status: "read"

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

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

    POST /sendTemplate

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

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

    delivered

  5. Результат доставки записан в журнал

    Результат доставки записывается; ошибки обрабатываются по правилам платформы.

    status: "read"

WhatsApp Business API for status change notification

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

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

  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_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.…), чтобы сопоставлять уведомления о доставке.

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

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

  • id

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

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

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

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