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

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

Этот сценарий объединяет sendReaction и readMessage в рамках 24-часового окна обслуживания клиентов.

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

Этот сценарий сочетает sendReaction и readMessage в течение 24-часового окна обслуживания клиентов. Реакция «палец вверх» на id входящего сообщения сигнализирует о признании без дополнительного текстового сообщения.

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

Ваше сообщение принято — мы готовим подробный ответ.

WhatsApp Business API for support acknowledgement — reaction and read receipt

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

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

Меньше лишних сообщений в переписке
sendReaction отправляет реакцию «большой палец вверх», связанную с идентификатором входящего сообщения из вебхука, чтобы подтверждение отображалось на их сообщении, а не открывало новую ветку переписки.
Быстрая воспринимаемая реакция
readMessage отмечает входящее сообщение как прочитанное сразу по его поступлении, поэтому клиент увидит уведомление о прочтении, пока ваш backend или агент готовит подробный ответ.
Шаблоны и переменные в теле не нужны
Реакция и уведомление о прочтении направлены только на id сообщения из груза вебхука — утверждённый шаблон и переменные в теле не нужны перед отправкой подтверждения.
Место для настоящего ответа позже
Подтверждение отправляется сначала в рамках 24-часового сеанса, затем ваша автоматизация или агент продолжает полным ответом, когда он готов.

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

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

    Сообщение клиента поступает через вебхук с id сообщения.

    status: "read"

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

    Ваш сервер отправляет реакцию «пальцы вверх» с цитированием этого id.

    POST /send_reaction

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

    readMessage помечает входящее сообщение как прочитанное.

    phone: "+…"

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

    Клиент видит подтверждение, пока готовится подробный ответ.

    delivered

WhatsApp Business API for support acknowledgement — reaction and read receipt

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

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

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



# === Test data ===
TEST_PHONE="___"                 # client phone in international format
INBOUND_MESSAGE_ID="___"                # inbound message ID for reaction/read

PHONE_NORM="$(printf '%s' "$TEST_PHONE" | tr -cd '0-9')"
REACTION_URL="${API_BASE_URL%/}/${CHANNEL_ID}/sendReaction"

read -r -d '' PAYLOAD <<JSON || true
{
  "phone": "${PHONE_NORM}",
  "body": "👍",
  "quotedMsgId": "${INBOUND_MESSAGE_ID}"
}
JSON

RESPONSE="$(curl -s -w '\n%{http_code}' -X POST "$REACTION_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" -lt 200 ] || [ "$HTTP_CODE" -ge 300 ] || [ "$ok" -ne 1 ]; then
  echo "$BODY" >&2
  exit 1
fi


READ_URL="${API_BASE_URL%/}/${CHANNEL_ID}/readMessage"
read -r -d '' SECONDARY_PAYLOAD <<JSON || true
{ "messageId": "${INBOUND_MESSAGE_ID}" }
JSON

READ_RESPONSE="$(curl -s -w '\n%{http_code}' -X POST "$READ_URL" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer ${API_TOKEN}" \
  -d "$SECONDARY_PAYLOAD")"

READ_CODE="$(printf '%s' "$READ_RESPONSE" | tail -n1)"
READ_BODY="$(printf '%s' "$READ_RESPONSE" | sed '$d')"

case "$READ_BODY" in
  *'"result":"success"'*) read_ok=1 ;;
  *) read_ok=0 ;;
esac

if [ "$READ_CODE" -lt 200 ] || [ "$READ_CODE" -ge 300 ] || [ "$read_ok" -ne 1 ]; then
  echo "$READ_BODY" >&2
  exit 1
fi


echo "Message sent to client."

Статус ответа и доставки

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: empty bodyNo body in the request.
200Message was not sent: provide chatId, phone, bsuid, or usernameNo recipient the channel could resolve.
200wrong fileThe media could not be fetched or uploaded — not a reachable URL, not valid base64.
403access deniedThe token is wrong, or belongs to a different channel than the URL.
200Message was not sent: filenamesendFile called without a filename, so the media has no extension to send.

ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ

Нет — в этом сценарии используется сессионное сообщение в течение 24 часов обслуживания клиентов.

Связанные

Обслуживание клиентов
WhatsApp Business API для запроса загрузки документа
Сценарий отправляет клиенту персонализированный шаблон WhatsApp, когда отсутствует необходимый документ, который нужно загрузить для продолжения.
Обслуживание клиентов
WhatsApp Business API для запроса дополнительных сведений по тикету
Сценарий отправляет клиенту персонализированный шаблон WhatsApp, когда для решения тикета нужна дополнительная информация, а сеансовое окно не открыто.
Обслуживание клиентов
WhatsApp Business API для уведомления о принятии тикета
Сценарий отправляет клиенту персонализированный шаблон WhatsApp, когда его запрос в поддержку принят на обработку.
Обслуживание клиентов
WhatsApp Business API для командной рассылки — создать группу WhatsApp
В этом сценарии используется API групп с операцией создания, чтобы создать именованную группу WhatsApp для рассылок команды.
Обслуживание клиентов
WhatsApp Business API для меню поддержки — интерактивные кнопки
Этот сценарий отправляет интерактивное сообщение с кнопкой с помощью sendButton в 24-часовое окно обслуживания клиентов.
Обслуживание клиентов
WhatsApp Business API для ответа в сессии — запрос данных
Этот сценарий отправляет бесплатное текстовое сообщение через WhatsApp с использованием sendMessage в рамках 24-часового окна обслуживания клиентов.
Обслуживание клиентов
WhatsApp Business API для уведомления об устранении проблемы
Сценарий отправляет клиенту персонализированный шаблон WhatsApp, когда их тикет поддержки решён.
Обслуживание клиентов
WhatsApp Business API для передачи — поделитесь контактной карточкой
Этот сценарий отправляет контактную карточку WhatsApp через sendContact в течение 24-часового окна обслуживания клиентов.

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