1msg official logo

WhatsApp Business API для опроса после доставки

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

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

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

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

Здравствуйте, {{1}}! Заказ #{{2}} доставлен. {{3}} Пожалуйста, оцените качество доставки — это займет около минуты.

Оценить доставку
  • {{1}}
    имя клиента
  • {{2}}
    номер заказа
  • {{3}}
    Оцените опыт доставки по шкале от 1 до 5. Это займет всего 1 минуту
  • “Оценить доставку”
    кнопка — закреплено в шаблоне Meta
WhatsApp Business API for post-delivery survey

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

Этот сценарий используют, когда заказ помечен как доставленный, и необходимо провести структурированный опрос удовлетворенности доставкой через WhatsApp, а не отправлять ручное сообщение или опрос только по электронной почте. Он подходит для брендов в сфере e-commerce и D2C, собирающих отзывы от 1 до 5 звезд или по шкале NPS после последней мили доставки, для логистических команд, проводящих стандартизированные опросы после доставки, и агентств, подключающих триггеры завершения доставки из OMS, WMS или пользовательских процессов Как это работает e-commerce.

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

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

  1. Триггер

    Перевозчик или OMS отправляет событие о завершении доставки, когда заказ достигает клиента.

    event · triggered

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

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

    phone: "+…"

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

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

    POST /sendTemplate

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

    Клиент получает в WhatsApp запрос опроса о доставке с контекстом заказа.

    delivered

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

    Результат доставки записывается в журнал, завершение опроса отслеживается вне WhatsApp.

    status: "read"

WhatsApp Business API for post-delivery survey

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

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

  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_INFO="___"         # {{3}} additional info

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_INFO=$TEST_INFO"; 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}} additional info → ${TEST_INFO}
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_INFO}" }
      ]
    }

  ]
}
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 отправляет обновления статуса на ваш 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>Если вы предпочитаете не получать обратные вызовы, вместо них используйте polling. На практике доставка часто завершается в течение нескольких секунд, но контракт 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 для подтверждения удовлетворенности
Этот сценарий отправляет клиенту короткий персонализированный шаблон 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 за часы
без проблем с инфраструктурой