1msg official logo

WhatsApp Business API для запроса отзыва после обслуживания

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

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

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

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

Здравствуйте, {{1}}! Услуга «{{2}}» завершена. {{3}}Пожалуйста, оцените качество обслуживания — это займет примерно минуту.

Оценка сервиса
  • {{1}}
    имя клиента
  • {{2}}
    завершенная услуга (например, ремонт ноутбука, чистка зубов, доставка на дом)
  • {{3}}
    оценка запроса или инструкции (например, оцените свой опыт от 1 до 5, это займет 1 минуту)
  • “Оценка сервиса”
    кнопка — исправлено в шаблоне Meta
WhatsApp Business API for post-service rating request

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

Используйте этот сценарий, когда встреча по оказанию услуги, доставка или выездное посещение завершены, и команде нужен структурированный рейтинг качества в WhatsApp вместо ручного сообщения или опроса только по электронной почте. Это подходит для сервисных и ремонтных компаний, которые собирают отзывы в виде 1–5 звезд после выполнения работы, а также агентств, подключающих триггеры завершенной услуги из CRM, системы бронирования или пользовательских процессов как это работает.

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

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

  1. Триггер

    Система управления запускает событие service-completed, когда задача или визит отмечены как выполненные.

    event · triggered

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

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

    phone: "+…"

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

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

    POST /sendTemplate

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

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

    delivered

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

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

    status: "read"

WhatsApp Business API for post-service rating request

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

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

  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_SERVICE="___"         # {{2}} service 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_SERVICE=$TEST_SERVICE" \
            "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}} service name → ${TEST_SERVICE}
# {{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_SERVICE}" },
        { "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>вместо этого опрашивайте. На практике доставка часто завершается в течение нескольких секунд — но 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 для опроса NPS после взаимодействия
Сценарий отправляет клиенту персонализированный шаблон WhatsApp после завершения взаимодействия, предлагая оценить, насколько они вероятно порекомендуют бизнес.
Опросы и отзывы
WhatsApp Business API для запроса CSAT по поддержке
Сценарий отправляет клиенту персонализированный шаблон WhatsApp после завершения поддержки, предлагая оценить качество обслуживания.

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