Скилл WhatsApp API для ИИ агентаЕщё
1msg official logo

WhatsApp Business API для меню поддержки — интерактивные кнопки

Этот сценарий отправляет интерактивное сообщение с кнопкой с помощью sendButton в 24-часовое окно обслуживания клиентов.

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

Этот сценарий отправляет интерактивное сообщение с кнопкой sendButton в течение 24-часового окна обслуживания клиентов. Три быстрых ответа позволяют клиенту выбрать главное меню, статус заказа или передать чат оператору без ввода текста.

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

Чем мы можем вам помочь сегодня?

WhatsApp Business API for support menu — interactive buttons

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

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

Меньше ручной обработки повторяющихся вопросов
После подтверждения сессии входящим вебхуком sendButton отправляет три быстрых ответа: главное меню, статус заказа и связаться с агентом. Это избавляет агентов от необходимости каждый раз определять намерения из произвольного текста.
Структурированное намерение вместо неоднозначного текста
Каждое нажатие кнопки возвращает структурированное тело вебхука с фиксированным идентификатором кнопки, чтобы ваш бэкенд получал меню, статус или выбор агента без разбора того, что ввёл клиент.
Автоматическая маршрутизация в нужный сценарий
Вебхук передаёт id кнопки, и ваш сервер программно выбирает: меню, «Статус» или переход к оператору, в зависимости от того, что выбрал клиент.
Самообслуживание без необходимости вводить каждый запрос
Интерактивное меню отображается во время открытой сессии с подсказками внизу, и клиент выбирает главное меню, статус заказа или передаёт общение агенту одним нажатием вместо повторного ввода запроса.

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

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

    Сообщение клиента поступает через вебхук и оставляет сессию открытой.

    status: "read"

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

    Ваш бэкенд отправляет интерактивное кнопочное меню с подсказками внизу.

    POST /send_button

  3. Действия клиента

    Клиент нажимает на один из трёх вариантов.

    user action

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

    Вебхук передаёт id кнопки для маршрутизации в меню, статус или потоки агентов.

    delivered

WhatsApp Business API for support menu — interactive buttons

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

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

  1. Ключ API 1MSG · Как получить ключ API
  2. Аккаунт WhatsApp Business · Как подключить WABA
  3. Открыть 24-часовое окно сеанса · Как работает 24-часовое окно
  4. Согласие клиента на участие · Как управлять согласием клиентов
  5. Конечная точка вебхука · Как настроить вебхуки

Примеры кода

#!/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)



# === Test data ===
TEST_PHONE="___"                 # client phone in international format

PHONE_NORM="$(printf '%s' "$TEST_PHONE" | tr -cd '0-9')"
URL="${API_BASE_URL%/}/${CHANNEL_ID}/sendButton"

read -r -d '' PAYLOAD <<JSON || true
{
  "phone": "${PHONE_NORM}",
  "body": "How can we help you today?",
  "footer": "Choose an option",
  "sections": [
    { "type": "reply", "reply": { "id": "menu", "title": "Main menu" } },
    { "type": "reply", "reply": { "id": "status", "title": "Order status" } },
    { "type": "reply", "reply": { "id": "agent", "title": "Talk to agent" } }
  ]
}
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."
else
  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 ориентированы на это

Сама доставка поступает позже, в виде отдельного callback. Зарегистрируйте вебхук (POST …/webhook), и 1MSG будет отправлять обновления статуса на ваш HTTPS endpoint в основном 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

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

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

СтатусОтветПричина
200Message was not sent: empty bodyNo body in the request.
200Message was not sent: provide chatId, phone, bsuid, or usernameNo recipient the channel could resolve.
200wrong fileThe media could not be fetched or uploaded — not a reachable URL, not valid base64.
403access deniedThe token is wrong, or belongs to a different channel than the URL.
200Message was not sent: filenamesendFile called without a filename, so the media has no extension to send.

ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ

Нет — в этом сценарии используется сессионное сообщение в течение 24-часового окна обслуживания клиентов.

Связанные

Обслуживание клиентов
WhatsApp Business API для запроса дополнительных сведений по тикету
Сценарий отправляет клиенту персонализированный шаблон WhatsApp, когда для решения тикета нужна дополнительная информация, а сеансовое окно не открыто.
Обслуживание клиентов
WhatsApp Business API для уведомления о принятии тикета
Сценарий отправляет клиенту персонализированный шаблон WhatsApp, когда его запрос в поддержку принят на обработку.
Обслуживание клиентов
WhatsApp Business API для командной рассылки — создать группу WhatsApp
В этом сценарии используется API групп с операцией создания, чтобы создать именованную группу WhatsApp для рассылок команды.
Обслуживание клиентов
WhatsApp Business API для квитанции о доставке — реакции и прочтения
Этот сценарий объединяет sendReaction и readMessage в рамках 24-часового окна обслуживания клиентов.
Обслуживание клиентов
WhatsApp Business API для ответа в сессии — запрос данных
Этот сценарий отправляет бесплатное текстовое сообщение через WhatsApp с использованием sendMessage в рамках 24-часового окна обслуживания клиентов.
Обслуживание клиентов
WhatsApp Business API для уведомления об устранении проблемы
Сценарий отправляет клиенту персонализированный шаблон WhatsApp, когда их тикет поддержки решён.
Обслуживание клиентов
WhatsApp Business API для передачи — поделитесь контактной карточкой
Этот сценарий отправляет контактную карточку WhatsApp через sendContact в течение 24-часового окна обслуживания клиентов.
Обслуживание клиентов
WhatsApp Business API для напоминания об ожидании ответа
Сценарий отправляет клиенту персонализированный шаблон WhatsApp, когда поддержка заблокирована, ожидая ответ клиента.

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