💰 Бесплатные сервисные ответы заканчиваются 1 октябряЕщё
1msg official logo

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

Этот сценарий отправляет точку входа WhatsApp Flow с sendFlow в течение 24-часового окна обслуживания клиентов.

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

Этот сценарий отправляет точку входа Flow WhatsApp с sendFlow в течение 24 часов обслуживания клиентов. Персонализированное приветствие и призыв к действию «Забронировать сейчас» открывают опубликованную форму потока.

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

{{1}}Запишитесь на приём:

  • {{1}}
    имя клиента в тексте приглашения в сценарий
WhatsApp Business API for appointment booking — whatsapp flow

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

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

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

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

  1. Триггер

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

    event · triggered

  2. Зафиксировать событие

    Ваш бэкенд определяет имя клиента и ID потока.

    phone: "+…"

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

    sendFlow отправляет приветствие с кнопкой «Забронировать».

    POST /send_flow

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

    Клиент заполняет форму потока, и данные о бронировании возвращаются в вашу систему.

    delivered

WhatsApp Business API for appointment booking — whatsapp flow

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

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

  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
FLOW_TOKEN="___"                         # flow token from your backend

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

read -r -d '' PAYLOAD <<JSON || true
{
  "phone": "${PHONE_NORM}",
  "body": "Hi Alex, book your appointment:",
  "flowId": "1234567890",
  "flowToken": "${FLOW_TOKEN}",
  "flowCta": "Book now",
  "flowAction": "navigate"
}
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."
else
  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: 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, когда бронирование отменено.
Записи и напоминания
WhatsApp Business API для подтверждения явки
Сценарий отправляет клиенту персонализированный шаблон WhatsApp с вопросом, придёт ли он на запланированный визит.
Записи и напоминания
WhatsApp Business API для напоминания о будущих бронированиях
Сценарий отправляет клиенту персонализированный шаблон WhatsApp за несколько дней до назначенного визита.
Записи и напоминания
WhatsApp Business API для запроса подтверждения от клиента
Сценарий отправляет клиенту персонализированный шаблон WhatsApp с просьбой подтвердить или отменить планируемое действие.
Записи и напоминания
WhatsApp Business API для подтверждения бронирования
Сценарий отправляет клиенту персонализированный шаблон WhatsApp сразу после того, как бронирование подтверждено.

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