Меню и кнопки без шаблона через API

    5 мин чтения
    ·
    11 просмотров
    ·
    Обновлено 03.10.2026

    Меню и кнопки ответа без шаблона

    Через POST /v1/messages/send можно отправить клиенту интерактивное сообщение: меню-список или кнопки ответа. Шаблон и одобрение Meta для этого не нужны. Подходит для чат-ботов: клиент написал «Старт», ваш бот в ответ показывает меню.

    Два вида

    typeКак выглядит у клиентаВариантов
    listПод сообщением одна кнопка, например «Открыть меню». По нажатию открывается список, клиент выбирает один пунктдо 10
    buttonsКнопки прямо под текстом сообщениядо 3

    Как это выглядит у клиента

    Сообщение с меню: заголовок, текст, подпись и кнопка «Открыть меню».

    Сообщение WhatsApp с заголовком «Главное меню», текстом и кнопкой «Открыть меню»

    По нажатию открывается список пунктов. Слева телефон, справа WhatsApp на компьютере.

    Открытое меню WhatsApp на телефоне: шесть пунктов, у пункта «Цены» описание «Тарифы и стоимость» Открытое меню в WhatsApp на компьютере: шесть пунктов с переключателями выбора

    Клиент нажимает пункт, и его выбор приходит Вам на вебхук с id пункта.

    Когда можно отправлять

    • Только на линиях WhatsApp Business API (whatsapp_waba). Для других линий API вернёт 400.
    • Только в течение 24 часов после последнего сообщения клиента. Это правило WhatsApp: вне окна можно писать только шаблоном. Если окно закрыто, WhatsApp не примет сообщение, и в вебхуке статуса придёт ошибка.
    • В шаблон и в рассылку меню-список добавить нельзя, это тоже правило WhatsApp. В шаблоне можно сделать до 10 кнопок быстрого ответа: раздел «Шаблоны» в кабинете.

    URL

    POST https://api.wazzabee.com/api-gateway/v1/messages/send

    Заголовки

    Authorization: Bearer ВАШ_API_КЛЮЧ
    Content-Type: application/json

    Параметры поля interactive

    ПараметрТипОбязательныйОписание
    typestring✅list или buttons
    bodystring✅Текст сообщения: до 4096 символов в меню, до 1024 у кнопок
    headerstringНетЗаголовок над текстом, до 60 символов
    footerstringНетПодпись под текстом мелким шрифтом, до 60 символов
    buttonstring✅ для listНадпись на кнопке, которая открывает меню, до 20 символов
    rowsarray✅ для list*Пункты меню: id до 200 символов, title до 24, description до 72 (необязательно). Всего до 10 пунктов
    sectionsarray✅ для list*Пункты по разделам: { "title": "...", "rows": [...] }. До 10 разделов, название до 24 символов, обязательно, если разделов больше одного. Пунктов всего до 10
    buttonsarray✅ для buttonsОт 1 до 3 кнопок: id до 256 символов, title до 20

    * Для меню передайте rows или sections.

    Поле interactive не совмещается с text, mediaUrl и templateName: текст сообщения передаётся в interactive.body. id пунктов и кнопок, а также надписи кнопок не должны повторяться. Остальные поля запроса (channelId, chatId, campaignId, senderName, automated) работают как обычно, см. Отправка сообщений.

    Пример: меню из шести пунктов

    curl -X POST "https://api.wazzabee.com/api-gateway/v1/messages/send" \
      -H "Authorization: Bearer ВАШ_API_КЛЮЧ" \
      -H "Content-Type: application/json" \
      -d '{
        "channelId": "uuid-вашей-линии",
        "chatId": "77071234567",
        "interactive": {
          "type": "list",
          "header": "Главное меню",
          "body": "Здравствуйте! Выберите, что вас интересует",
          "footer": "Работаем с 9:00 до 19:00",
          "button": "Открыть меню",
          "rows": [
            { "id": "prices", "title": "Цены", "description": "Тарифы и стоимость" },
            { "id": "catalog", "title": "Каталог" },
            { "id": "delivery", "title": "Доставка и оплата" },
            { "id": "order_status", "title": "Статус заказа" },
            { "id": "address", "title": "Адрес и график" },
            { "id": "manager", "title": "Связаться с менеджером" }
          ]
        }
      }'

    Пример: меню с разделами

    "interactive": {
      "type": "list",
      "body": "Выберите услугу",
      "button": "Услуги",
      "sections": [
        { "title": "Стрижки", "rows": [
          { "id": "cut_men", "title": "Мужская" },
          { "id": "cut_women", "title": "Женская" }
        ]},
        { "title": "Окрашивание", "rows": [
          { "id": "color_full", "title": "Полное" }
        ]}
      ]
    }

    Пример: кнопки ответа

    "interactive": {
      "type": "buttons",
      "body": "Подтверждаете запись на завтра в 10:00?",
      "buttons": [
        { "id": "confirm", "title": "Да, приду" },
        { "id": "reschedule", "title": "Перенести" },
        { "id": "cancel", "title": "Отменить" }
      ]
    }

    Ответ (202)

    {
      "success": true,
      "queued": true,
      "queueId": "uuid",
      "campaignId": null,
      "message": "Сообщение поставлено в очередь на отправку"
    }

    Ошибки (400)

    Лимиты проверяются сразу, до отправки. Если что-то не так, API ответит 400 и напишет, какое поле исправить, например:

    { "error": "В меню не больше 10 пунктов всего, сейчас 11" }
    { "error": "interactive.rows[2].title: не длиннее 24 символов" }
    { "error": "interactive доступен только для линий WhatsApp Business API (whatsapp_waba)" }

    Как узнать, что выбрал клиент

    Включите подписку messages_button (см. Webhooks). Когда клиент выберет пункт меню или нажмёт кнопку, придёт событие:

    {
      "buttons": [{
        "messageId": "uuid",
        "channelId": "uuid",
        "chatId": "77071234567",
        "contactId": "uuid",
        "conversationId": "uuid",
        "button": {
          "type": "list_reply",
          "id": "prices",
          "title": "Цены",
          "description": "Тарифы и стоимость"
        },
        "replyTo": {
          "messageId": "uuid",
          "queueId": "uuid",
          "campaignId": null,
          "broadcastId": null
        },
        "timestamp": "2026-10-03T12:00:00Z"
      }]
    }

    Для пункта меню button.type равен list_reply, для кнопки ответа button_reply. В button.id приходит ваш id, по нему удобно вести сценарий бота дальше. В replyTo.queueId указана отправка, на которую ответил клиент.

    Что видит оператор

    В чате кабинета сообщение отображается текстом с пунктами меню или кнопками под ним, как их увидел клиент. Выбор клиента приходит в чат обычным входящим сообщением с названием пункта.