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

WhatsApp Business API для обработки негативных отзывов

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

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

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

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

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

Поделиться отзывом
  • {{1}}
    имя клиента
  • {{2}}
    оцененная тема или контекст (например, недавняя доставка, закрытый запрос в поддержку, выезд специалиста сервиса)
  • {{3}}
    follow-up prompt or recovery line (e.g. we want to understand what went wrong and make it right)
  • “Поделиться отзывом”
    кнопка — закреплена в шаблоне Meta
WhatsApp Business API for negative feedback follow-up

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

Как это работает: используйте этот сценарий, когда клиент оставляет нейтральную или низкую оценку удовлетворенности, и команде нужно отправить эмпатичное сообщение через WhatsApp, а не сообщение от агента вручную или просто занести это в аналитику. Это подходит для программ CSAT и NPS, которые связываются с клиентами после получения низких оценок, контакт-центрам для исправления низких оценок поддержки, а также агентствам, которые подключают триггеры низких оценок из Zendesk, Freshdesk, аналитики продуктов или собственных процессов.

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

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

  1. Триггер

    Как это работает: триггер последующего действия в опросе или CRM срабатывает при низкой или нейтральной оценке, когда балл соответствует требованиям.

    event · triggered

  2. Фиксация события

    Система определяет номер телефона получателя и поля для последующих шагов.

    phone: "+…"

  3. Создать и отправить

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

    POST /sendTemplate

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

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

    delivered

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

    Результат доставки фиксируется; подробная обратная связь собирается вне WhatsApp в связанной форме.

    status: "read"

WhatsApp Business API for negative feedback follow-up

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

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

  1. Ключ API 1MSG · Как получить API Key
  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_TOPIC="___"         # {{2}} topic or subject
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_TOPIC=$TEST_TOPIC" \
            "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}} topic or subject → ${TEST_TOPIC}
# {{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_TOPIC}" },
        { "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

    Соотносит обратный вызов с id возвращаемым значением вызова send

  • timestamp

    Время в секундах Unix в виде строки

If you would rather not receive callbacks, poll GET {base}/{channel}/hookInfo?messageId=<id> instead. In practice delivery often completes within seconds — but the API contract does not guarantee it, so never block a flow waiting on it.

Распространенные ошибки

СтатусОтветПричина
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 за часы
без проблем с инфраструктурой