1msg official logo

WhatsApp Business API для уточнения способа оплаты

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

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

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

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

Здравствуйте, {{1}}! Выберите, как будете платить {{2}}:

Карта
Банковский перевод
  • {{1}}
    имя клиента
  • {{2}}
    сумма оплаты
  • “Карта”
    кнопка — исправлена в шаблоне Meta
    “Банковский перевод”
    кнопка — исправлена в шаблоне Meta
WhatsApp Business API for payment method clarification

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

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

Указывайте инструкции по оплате правильно с первого раза
Имя клиента и сумма задолженности приходят как две переменные в теле, а две кнопки быстрых ответов предлагают выбрать между картой и банковским переводом; вебхук возвращает нажатие как структурированный выбор, который биллинг может использовать на следующем шаге.
Никакой переписки о способах оплаты
Утверждённый шаблон открывает чат за пределами 24-часового окна, поэтому служба выставления счетов может узнать, как оплатят в WhatsApp, вместо того чтобы ждать ответов, затерявшихся в электронной почте.
Меньше ручного сопровождения счетов
Функция биллинга отправляет сообщение, когда обнаруживает отсутствие способа оплаты в счёте или на странице оформления заказа, чтобы никто не вводил сумму вручную или не звонил клиенту.
Структурированные ответы, готовые для ERP
«Карта» и «Банковский перевод» — это стандартные быстрые ответы в шаблоне Meta; только переменные в теле проходят через API, а входящий вебхук доставляет событие кнопки в вашу серверную часть для маршрутизации.

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

  1. Триггер

    Система выставления счетов обнаруживает отсутствие способа оплаты и создаёт событие.

    event · triggered

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

    Система определяет номер телефона клиента и сумму платежа.

    phone: "+…"

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

    Персонализированное сообщение по шаблону составлено с двумя переменными в теле и двумя кнопками быстрых ответов.

    POST /sendTemplate

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

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

    delivered

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

    Вебхук отправляет структурированный выбор в биллинговую систему для следующего шага оплаты.

    status: "read"

WhatsApp Business API for payment method clarification

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

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

  1. Ключ API 1MSG · Как получить ключ API
  2. Аккаунт WhatsApp Business · Как подключить WABA
  3. Шаблон WhatsApp · Как одобрить шаблон WABA
  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)

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_PAYMENTAMOUNT="___"         # {{2}} payment amount

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_PAYMENTAMOUNT=$TEST_PAYMENTAMOUNT"; 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}} payment amount → ${TEST_PAYMENTAMOUNT}
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_PAYMENTAMOUNT}" }
      ]
    }

  ]
}
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 будет отправлять POST-запросы со статусами на ваш HTTPS-эндпоинт в поле верхнего уровня hooks[].

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: 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 для отправки в рамках сессии — pdf-файл счёта
Этот сценарий отправляет PDF-документ через sendFile в 24-часовое окно обслуживания клиентов 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 за часы
без проблем с инфраструктурой