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

WhatsApp Business API для уведомления о принятии тикета

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

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

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

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

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

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

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

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

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

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

  1. Триггер

    Клиент отправляет запрос в поддержку через форму, чат-виджет или электронную почту.

    event · triggered

  2. Создать тикет

    Служба поддержки создаёт тикет и запускает событие «взято в очередь».

    event · triggered

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

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

    POST /sendTemplate

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

    Клиент получает подтверждение в WhatsApp с номером тикета и следующими шагами.

    delivered

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

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

    status: "read"

WhatsApp Business API for ticket accepted 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,
  "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-время в виде строки

Если вы предпочитаете не получать обратные вызовы, вместо этого опрашивайте GET {base}/{channel}/hookInfo?messageId=<id>. На практике доставка часто завершается в течение нескольких секунд, но контракт API этого не гарантирует, поэтому ни в коем случае не блокируйте поток в ожидании.

Распространённые ошибки

СтатусОтветПричина
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, когда его идентификацию или верификацию eKYC одобрили.
Обслуживание клиентов
WhatsApp Business API для уведомления о статусе проверки
Сценарий отправляет клиенту персонализированный шаблон WhatsApp при изменении статуса проверки или eKYC.
Обслуживание клиентов
WhatsApp Business API для запроса загрузки документа
Сценарий отправляет клиенту персонализированный шаблон WhatsApp, когда отсутствует необходимый документ, который нужно загрузить для продолжения.
Обслуживание клиентов
WhatsApp Business API для запроса дополнительных сведений по тикету
Сценарий отправляет клиенту персонализированный шаблон WhatsApp, когда для решения тикета нужна дополнительная информация, а сеансовое окно не открыто.
Обслуживание клиентов
WhatsApp Business API для командной рассылки — создать группу WhatsApp
В этом сценарии используется API групп с операцией создания, чтобы создать именованную группу WhatsApp для рассылок команды.
Обслуживание клиентов
WhatsApp Business API для квитанции о доставке — реакции и прочтения
Этот сценарий объединяет sendReaction и readMessage в рамках 24-часового окна обслуживания клиентов.
Обслуживание клиентов
WhatsApp Business API для меню поддержки — интерактивные кнопки
Этот сценарий отправляет интерактивное сообщение с кнопкой с помощью sendButton в 24-часовое окно обслуживания клиентов.
Обслуживание клиентов
WhatsApp Business API для ответа в сессии — запрос данных
Этот сценарий отправляет бесплатное текстовое сообщение через WhatsApp с использованием sendMessage в рамках 24-часового окна обслуживания клиентов.

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