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

WhatsApp Business API для подтверждения получения приложения

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

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

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

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

Здравствуйте {{1}}, мы получили вашу заявку на {{2}}. {{3}} Спасибо, что отправили ее — мы будем держать вас в курсе хода рассмотрения.

Открыть сайт
  • {{1}}
    имя клиента
  • {{2}}
    тип заявки или запроса (например, кредит, работа, виза)
  • {{3}}
    следующий шаг или ожидаемый срок (например, проверка за 2 рабочих дня)
  • “Открыть сайт”
    кнопка — исправлено в шаблоне Meta
WhatsApp Business API for application receipt confirmation

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

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

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

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

  1. Триггер

    Клиент подает заявку на сайте, портале или в CRM.

    event · triggered

  2. Отслеживание события

    Система фиксирует событие отправки и находит номер телефона получателя.

    phone: "+…"

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

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

    POST /sendTemplate

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

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

    delivered

  5. Отслеживание статуса

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

    status: "read"

WhatsApp Business API for application receipt confirmation

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

Требования

  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_PROCESS="___"         # {{2}} process name
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_PROCESS=$TEST_PROCESS" \
            "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}} process name → ${TEST_PROCESS}
# {{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_PROCESS}" },
        { "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 привязаны к этому ключу

Delivery itself arrives later, as a separate callback. Register a webhook (POST …/webhook) and 1MSG POSTs status updates to your HTTPS endpoint in a top-level 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: 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 для квитанции о доставке — реакции и прочтения
Этот сценарий объединяет sendReaction и readMessage в рамках 24-часового окна обслуживания клиентов.
Обслуживание клиентов
WhatsApp Business API для меню поддержки — интерактивные кнопки
Этот сценарий отправляет интерактивное сообщение с кнопкой с помощью sendButton в 24-часовое окно обслуживания клиентов.
Обслуживание клиентов
WhatsApp Business API для ответа в сессии — запрос данных
Этот сценарий отправляет бесплатное текстовое сообщение через WhatsApp с использованием sendMessage в рамках 24-часового окна обслуживания клиентов.
Обслуживание клиентов
WhatsApp Business API для уведомления об устранении проблемы
Сценарий отправляет клиенту персонализированный шаблон WhatsApp, когда их тикет поддержки решён.
Обслуживание клиентов
WhatsApp Business API для передачи — поделитесь контактной карточкой
Этот сценарий отправляет контактную карточку WhatsApp через sendContact в течение 24-часового окна обслуживания клиентов.
Обслуживание клиентов
WhatsApp Business API для напоминания об ожидании ответа
Сценарий отправляет клиенту персонализированный шаблон WhatsApp, когда поддержка заблокирована, ожидая ответ клиента.
Обслуживание клиентов
WhatsApp Business API для уведомления о назначении агента
Сценарий отправляет клиенту персонализированный шаблон WhatsApp, когда тикет назначен специалисту.
Обслуживание клиентов
WhatsApp Business API для уведомлений об изменении процесса сервиса
Сценарий отправляет клиенту персонализированный шаблон WhatsApp, когда компания меняет способ предоставления услуги или выполнения процесса.

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