Начинаем перенос my.1msg.ioЕщё
1msg official logo

Уведомление о смене статуса тикета через WhatsApp API

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

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

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

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

Здравствуйте, {{1}}! Статус вашего запроса №{{2}} изменился. Текущий статус: {{3}}. Подробности — по кнопке ниже.

Узнать статус
  • {{1}}
    имя клиента
  • {{2}}
    номер тикета или обращения
  • {{3}}
    новый статус (например, в работе, ждём вашего ответа, решено)
  • “Узнать статус”
    кнопка задана в шаблоне Meta
WhatsApp Business API for ticket status notification

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

Используйте сценарий, когда у тикета меняется статус, а открытого чата в WhatsApp, где клиент узнал бы об этом, нет. Подходит хелпдескам и поддержке SaaS, которые сообщают об изменениях в очереди, телекому и ЖКХ, которые держат клиентов в курсе по заявкам, и агентствам, которые подключают вебхуки статусов тикетов из Zendesk, Freshdesk или CRM.

Меньше вопросов о статусе
Три переменные в тексте передают имя клиента, номер тикета и новый статус, поэтому клиент видит обновление в WhatsApp и не заходит на портал и не звонит, чтобы узнать, что с тикетом.
Обновления вне 24-часового окна
Хелпдеск реагирует на событие смены статуса, и одобренный шаблон доходит до клиента даже без открытого диалога. Через API передаются только переменные текста — кнопка со ссылкой на портал уже задана в шаблоне Meta.
Без ручных уведомлений о статусе
Когда тикет переходит между очередями или статусами, система находит номер телефона и отправляет шаблон сама, поэтому операторам не нужно каждый раз вписывать номер тикета и статус.
Доставка фиксируется в хелпдеске
Результат доставки записывается после отправки, поэтому хелпдеск или CRM видят, получил ли клиент обновление, а ошибки обрабатываются по правилам платформы.

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

  1. Отслеживание статуса

    Хелпдеск обновляет статус тикета и запускает событие смены статуса.

    status: "read"

  2. Поиск телефона получателя

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

    status: "read"

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

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

    POST /sendTemplate

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

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

    delivered

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

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

    status: "read"

WhatsApp Business API for ticket status 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_TICKETNUMBER="___"         # {{2}} ticket number
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_TICKETNUMBER=$TEST_TICKETNUMBER" \
            "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}} ticket number → ${TEST_TICKETNUMBER}
# {{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_TICKETNUMBER}" },
        { "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,
  "message": "Sent to [email protected]",
  "description": "Message has been sent to the provider",
  "id": "wamid.HBgLMzgwNjM5..."
}
  • sent

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

  • id

    Сохраните его: уведомления о доставке и hookInfo привязаны к этому значению

Связанные

Обслуживание клиентов
WhatsApp Business API для подтверждения успешного завершения проверки
Сценарий отправляет клиенту персонализированный шаблон WhatsApp, когда его идентификацию или верификацию eKYC одобрили.
Обслуживание клиентов
WhatsApp Business API для уведомления о статусе проверки
Сценарий отправляет клиенту персонализированный шаблон WhatsApp при изменении статуса проверки или eKYC.
Обслуживание клиентов
WhatsApp Business API для запроса загрузки документа
Сценарий отправляет клиенту персонализированный шаблон WhatsApp, когда отсутствует необходимый документ, который нужно загрузить для продолжения.
Обслуживание клиентов
Уведомление о передаче тикета через WhatsApp API
Сценарий отправляет клиенту персональный шаблон WhatsApp, когда тикет передан в другой отдел.
Обслуживание клиентов
Уведомление об эскалации тикета через WhatsApp API
Сценарий отправляет клиенту персональный шаблон WhatsApp, когда тикет эскалирован, потому что решение занимает больше времени, чем обычно.
Обслуживание клиентов
Уведомление о создании тикета через WhatsApp API
Сценарий отправляет клиенту персональный шаблон WhatsApp, когда в поддержке создан новый тикет.
Обслуживание клиентов
Уведомление о закрытии тикета через WhatsApp API
Сценарий отправляет клиенту персональный шаблон WhatsApp, когда тикет в поддержке закрыт.
Обслуживание клиентов
Запрос фото или файла через шаблон WhatsApp API
Сценарий отправляет клиенту персональный шаблон WhatsApp, когда поддержке для работы над тикетом нужно фото, документ или подтверждение, а 24-часовое окно не открыто.

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