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

WhatsApp Business API для каталога товаров — интерактивный список

Этот сценарий отправляет интерактивный список с помощью sendList в течение 24-часового окна сеанса.

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

Этот сценарий отправляет интерактивный список с помощью sendList в течение 24-часового окна сессии. Два раздела группируют строки товаров; клиент открывает каталог и выбирает товар.

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

Просмотрите наш каталог для {{1}}:

  • {{1}}
    контекст кампании или продукта показан в заголовке списка
WhatsApp Business API for product catalog — interactive list

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

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

Меньше потери покупателей в ходе чата
sendList заменяет вставленные списки артикулов двумя сгруппированными разделами и кнопкой «Просмотреть каталог», чтобы покупатель выбирал внутри WhatsApp, а не покидал плохо читаемый текстовый список на мобильном.
Ручной ввод SKU отключён
Клиент нажимает на строку продукта в интерактивном списке, и ваш входящий вебхук получает идентификатор строки, чтобы агенты и серверные части могли не вводить повторно артикулы из чата.
Контекст кампании в одной переменной
Одна переменная в теле содержит метку кампании или промоакции в заголовке списка, поэтому один и тот же макет списка подходит для разных предложений без изменения тела сообщения.
Оформление заказа продолжается с выбранного пункта
Вебхук передаёт идентификатор строки продукта в вашу CRM или на витрину, где продолжается процесс заказа или дальнейших действий, начиная с этого SKU, вместо того чтобы запрашивать у покупателя повторный выбор.

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

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

    Событие кампании или ответ клиента оставляют сессию открытой.

    user action

  2. Захват события

    Ваш сервер создаёт интерактивный список, состоящий из двух разделов с продуктами.

    POST /send_list

  3. Просмотр каталога

    Клиент нажимает «Просмотреть каталог» и выбирает товар.

    user action

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

    Вебхук возвращает идентификатор строки для обработки в заказе или CRM.

    delivered

WhatsApp Business API for product catalog — interactive list

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

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

  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
TEST_PRODUCTCONTEXT="___"         # {{1}} product context

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

read -r -d '' PAYLOAD <<JSON || true
{
  "phone": "${PHONE_NORM}",
  "body": "Browse our catalog for spring promotion:",
  "buttonText": "View catalog",
  "action": "catalog",
  "sections": [{"title":"Featured products","rows":[{"id":"prod_alpha","title":"Alpha Widget","description":"Compact model"},{"id":"prod_beta","title":"Beta Widget","description":"Standard model"}]},{"title":"Bundles","rows":[{"id":"bundle_starter","title":"Starter pack","description":"Two items included"},{"id":"bundle_pro","title":"Pro pack","description":"Four items included"}]}]
}
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 привязаны к нему

Доставка приходит позже, как отдельный колбэк. Зарегистрируйте вебхук (POST …/webhook), и 1MSG будет отправлять обновления статуса в ваш HTTPS-эндпоинт в теле верхнего уровня hooks[]payload.

200 OKВебхук статуса доставки — данные, которые вы получаете
{
  "hooks": [
    {
      "id": "gBGGeSaGViBfAgnlzOSHEwK9O6F",
      "type": "message",
      "status": "sent",
      "timestamp": "1654864094",
      "recipient_id": "556123122026"
    }
  ]
}
  • status

    sent, delivered, read — или статус ошибки, если это возможно

  • id

    Сопоставляет callback с 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, когда поступает новый лид.
Вовлечение и конверсия лидов
WhatsApp Business API для квалификации лидов с ключевыми вопросами
Этот кейс отправляет новому лиду одобренный шаблон WhatsApp с персонализированным приветствием: подставляются имя лида и продукт, а также быстрый ответ «Начать»
Вовлечение и конверсия лидов
WhatsApp Business API для повторного обращения к лиду без ответа
Сценарий отправляет лиду персонализированный шаблон WhatsApp, если он не ответил на предыдущее продажное сообщение в ожидаемое время.
Вовлечение и конверсия лидов
WhatsApp Business API для передачи лида в отдел продаж
Сценарий отправляет клиенту персонализированный шаблон WhatsApp, когда квалифицированный лид передаётся в отдел продаж.
Вовлечение и конверсия лидов
WhatsApp Business API для первого контакта с новым лидом
Сценарий отправляет лиду персонализированный шаблон WhatsApp как первое касание в продажах.
Вовлечение и конверсия лидов
WhatsApp Business API для отправки коммерческих предложений
Сценарий отправляет потенциальному клиенту персонализированный шаблон WhatsApp, когда готово коммерческое предложение.

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