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

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

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

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

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

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

Здравствуйте, {{1}}! Ваш запрос №{{2}} решается дольше обычного, поэтому мы передали его на эскалацию. {{3}} Приносим извинения за ожидание.

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

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

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

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

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

  1. Триггер

    Хелпдеск эскалирует тикет, когда превышен SLA или повышен приоритет.

    event · triggered

  2. Фиксация события

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

    phone: "+…"

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

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

    POST /sendTemplate

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

    Клиент получает уведомление в WhatsApp с номером тикета и информацией об эскалации.

    delivered

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

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

    status: "read"

WhatsApp Business API for ticket escalation 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_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_TICKETNUMBER=$TEST_TICKETNUMBER" \
            "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}} ticket number → ${TEST_TICKETNUMBER}
# {{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_TICKETNUMBER}" },
        { "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.…): по нему сопоставляются уведомления о доставке.

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, когда отсутствует необходимый документ, который нужно загрузить для продолжения.
Обслуживание клиентов
Уведомление о передаче тикета через WhatsApp API
Сценарий отправляет клиенту персональный шаблон WhatsApp, когда тикет передан в другой отдел.
Обслуживание клиентов
Уведомление о смене статуса тикета через WhatsApp API
Сценарий отправляет клиенту персональный шаблон WhatsApp, когда меняется статус тикета в поддержке.
Обслуживание клиентов
Уведомление о создании тикета через WhatsApp API
Сценарий отправляет клиенту персональный шаблон WhatsApp, когда в поддержке создан новый тикет.
Обслуживание клиентов
Уведомление о закрытии тикета через WhatsApp API
Сценарий отправляет клиенту персональный шаблон WhatsApp, когда тикет в поддержке закрыт.
Обслуживание клиентов
Запрос фото или файла через шаблон WhatsApp API
Сценарий отправляет клиенту персональный шаблон WhatsApp, когда поддержке для работы над тикетом нужно фото, документ или подтверждение, а 24-часовое окно не открыто.
Обслуживание клиентов
WhatsApp Business API для запроса дополнительных сведений по тикету
Сценарий отправляет клиенту персонализированный шаблон WhatsApp, когда для решения тикета нужна дополнительная информация, а сеансовое окно не открыто.

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