Быстрый старт для разработчиков с использованием WhatsApp API
Используйте это руководство, чтобы добавить функцию обмена сообщениями WhatsApp в ChatArchitect в любой сторонний сервис. Оно охватывает учетные данные, исходящие сообщения, шаблоны, статусы доставки, входящие сообщения и базовый сценарий тестирования.
Что вы построите
К концу этого руководства ваша служба сможет:
- Отправляйте текстовые сообщения WhatsApp и сообщения по утвержденным шаблонам.
- Получайте асинхронные статусы доставки через веб-перехватчик:
отправлено, затемне выполнено,отправлено,доставленоилипрочитано. - Получайте входящие сообщения от клиентов через тот же веб-хук.
- Получайте одобренные шаблоны WhatsApp из API ChatArchitect.
Если клиент пишет первым, вы можете ответить без использования шаблона в активном окне службы поддержки. Если же разговор инициирует ваша компания, используйте утвержденный шаблон WhatsApp.
Предварительные требования и квалификация
Клиенту необходимо подключить WhatsApp Business API через службу поддержки ChatArchitect и Meta. После настройки ChatArchitect предоставит:
| Удостоверение личности | Цель |
|---|---|
APP_ID |
Имя пользователя для базовой аутентификации при запросах к API ChatArchitect. |
APP_SECRET |
Пароль для базовой аутентификации при запросах к API ChatArchitect. |
Оба значения следует хранить на стороне сервера. Не раскрывайте значение APP_SECRET в коде браузера, публичных журналах, конфигурации на стороне клиента или URL-адресах.
Во всех приведенных ниже примерах используется:
Базовый URL API: https://api.chatarchitect.com Аутентификация: Базовая аутентификация с<APP_ID> :<APP_SECRET> Телефон получателя:<recipient_phone> URL веб-перехватчика:<webhook_url>
Используйте телефонные номера в международном формате без знаков +, пробелов или скобок, например, 421233221242.
Быстрый старт: 3 вызова API
Шаг 1 — Зарегистрируйте веб-перехватчик
Зарегистрируйте URL-адрес веб-перехватчика HTTPS для отслеживания статусов доставки и входящих сообщений.
POST https://api.chatarchitect.com/webhook Authorization: Basic base64(<APP_ID> :<APP_SECRET> Content-Type: application/json
Текст запроса:
{ "канал": "whatsapp", "назначение": "<recipient_phone> ", "webhook_separate": "false", "webhook": "<webhook_url> " }
В качестве адресата может быть указан любой номер WhatsApp, привязанный к учетной записи. Веб-хук должен представлять собой HTTPS-адрес, доступный из общедоступного интернета.
Пример использования cURL:
curl -X POST "https://api.chatarchitect.com/webhook" \ -u "<APP_ID> :<APP_SECRET> " \ -H "Content-Type: application/json" \ -d '{ "channel": "whatsapp", "destination": "<recipient_phone> ", "webhook_separate": "false", "webhook": "<webhook_url> " }'
Шаг 2 — Отправьте текстовое сообщение
Отправьте исходящее сообщение в WhatsApp.
POST https://api.chatarchitect.com/whatsappmessage Authorization: Basic base64(<APP_ID> :<APP_SECRET> Content-Type: application/json
Текст запроса:
{ "канал": "whatsapp", "назначение": "<recipient_phone> ", "payload": { "type": "text", "message": "Привет, Джон, как дела?" } }
Синхронный ответ подтверждает, что сообщение было принято в очередь:
{ "status": "submitted", "messageId": "21110c1d-53e1-42b5-9454-1de9a09d4777" }
Окончательный статус доставки будет сообщен позже через ваш веб-хук.
Пример использования cURL:
curl -X POST "https://api.chatarchitect.com/whatsappmessage" \ -u "<APP_ID> :<APP_SECRET> " \ -H "Content-Type: application/json" \ -d '{ "channel": "whatsapp", "destination": "<recipient_phone> ", "payload": { "type": "text", "message": "Привет, Джон, как дела?" } }'
Шаг 3 — Получите утвержденные шаблоны
Получите одобренные шаблоны WhatsApp, доступные для подключенного аккаунта.
POST https://api.chatarchitect.com/getHSM Authorization: Basic base64(<APP_ID> :<APP_SECRET> Content-Type: application/json
Текст запроса:
{ "канал": "whatsapp", "назначение": "<recipient_phone> ", "getHSM": "true" }
Фрагмент ответа:
{ "status": "submitted", "templates_status": true, "templates": [ { "appId": "abcf5776-29e0-4e3a-a8ed-09c51e69d53e", "category": "MARKETING", "data": "{{26815959-f5b8-49b4-9b0e-7458d34777cc}}\nHello{{1}}" } ] }
Файл templates.data содержит синтаксис отправки шаблонов. Сохраните или кэшируйте этот список в вашем сервисе, чтобы пользователи могли выбирать одобренные шаблоны.
Пример использования cURL:
curl -X POST "https://api.chatarchitect.com/getHSM" \ -u "<APP_ID> :<APP_SECRET> " \ -H "Content-Type: application/json" \ -d '{ "channel": "whatsapp", "destination": "<recipient_phone> ", "getHSM": "true" }'
Правила шаблона
Типы шаблонов
| Тип | Вариант использования |
|---|---|
| Только текст | Стандартные уведомления, подтверждения, напоминания и обновления. |
| СМИ | Сообщения, содержащие текст и изображение, видео или документ. |
Для большинства уведомлений достаточно шаблонов, содержащих только текст.
Категории шаблонов
| Категория | Типичное использование |
|---|---|
МАРКЕТИНГ |
Рекламные акции, предложения, сообщения о возобновлении подписки и другие сообщения, не связанные с совершением транзакций. |
КОММУНАЛЬНЫЕ УСЛУГИ |
Транзакционные или служебные сообщения без рекламного контента. |
ОТП |
Одноразовые пароли и коды подтверждения. |
Категория шаблона влияет на утверждение и ценообразование. Не используйте рекламный контент в UTILITY и OTP .
Утверждение шаблона
Клиенты могут отправлять шаблоны через приложение ChatArchitect или через службу поддержки ChatArchitect. Если вашему сервису требуется более глубокая интеграция, вы можете добавить отправку шаблонов через API в качестве отдельной функции.
Синтаксис отправки шаблона
Шаблон, возвращаемый функцией /getHSM, может выглядеть следующим образом:
{{26815959-f5b8-49b4-9b0e-7458d34777cc}}\nПривет{{1}}
Правила:
- Первый
{{...}}содержит обязательный идентификатор шаблона. {{1}},{{2}}, а другие пронумерованные заполнители являются переменными шаблона.- Значения переменных могут содержать пробелы и несколько слов.
- Значения переменных не должны содержать переносов строк.
Для отправки шаблонного сообщения используйте тот же /whatsappmessage . Отличие от обычного текстового сообщения заключается в значении параметра payload.message.
Пример шаблона для отправки тела сообщения:
{ "канал": "whatsapp", "назначение": "<recipient_phone> ", "payload": { "type": "text", "message": "{{26815959-f5b8-49b4-9b0e-7458d34777cc}}\nПривет, Джон" } }
События веб-перехватчика
События состояния
Ошибки доставки происходят асинхронно. Запрос на отправку может вернуть статус «отправлено», а окончательные сведения об ошибке поступают позже через веб-перехватчик.
Пример события состояния:
{ "app": "aQWPjCAmjav", "timestamp": 1580311136040, "version": 2, "type": "message-event", "payload": { "id": "ee4a68a0-1203-4c85-8dc3-49d0b3226a35", "type": "failed", "destination": "<recipient_phone> ", "payload": { "code": 1008, "reason": "Пользователь не дал согласия и неактивен" } } }
Важные поля:
| Поле | Значение |
|---|---|
Тип корня |
Событие сообщения для обновления статуса. |
payload.type |
Итоговый статус: неудача, отправлено, доставленоили прочитано. |
полезная нагрузка.назначение |
Номер телефона клиента. |
полезная нагрузка.полезная нагрузка.причина |
Причина сбоя указывается для сообщений, в которых произошел сбой, если она доступна. |
События входящих сообщений
Пример входящего текстового сообщения:
{ "app": "aQWPjCAmjav", "timestamp": 1580227766370, "version": 2, "type": "message", "payload": { "id": "ABEGkYaYVSEEAhAL3SLAWwHKeKrt6s3FKB0c", "source": "<recipient_phone> ", "type": "text", "payload": { "text": "Hi" } } }
Важные поля:
| Поле | Значение |
|---|---|
Тип корня |
Сообщение для входящих сообщений от клиентов. |
payload.source |
Номер телефона клиента. |
payload.type |
Тип входящего сообщения. |
payload.payload.text |
Текстовое содержимое для текстовых сообщений. |
Корреляция
Сохраняйте метаданные исходящих запросов вместе с синхронным messageId. Для обработки веб-хуков также используйте номер телефона клиента и payload.id чтобы сопоставить события статуса и входящие ответы с вашими внутренними записями.
Основные положения политики WhatsApp
При разработке системы обмена сообщениями в вашем сервисе следуйте этим практическим правилам:
- Отправляйте рекламные сообщения только тем клиентам, которые ожидают от компании подобных сообщений.
- Используйте утвержденные шаблоны, когда компания начинает общение.
- Добавьте возможность отписки от рассылки в маркетинговые шаблоны, если это необходимо.
- Избегайте использования списков рассылки, не соответствующих вашим интересам. Высокий уровень жалоб может привести к ограничениям на использование шаблонов или временным лимитам на отправку сообщений.
- Разделяйте маркетинговый, вспомогательный и OTP-контент по категориям шаблонов.
- Перед увеличением объёма поставок отслеживайте случаи неудачных доставок и жалобы.
Что внедрить в вашу услугу
Полезная интеграция обычно включает в себя следующие компоненты:
| Особенность | Рекомендуемое поведение |
|---|---|
| Реквизиты для входа | Для каждой учетной записи клиента на стороне сервера хранятся APP_ID и APP_SECRET |
| Список шаблонов | Получать шаблоны из /getHSM, показывать предварительный просмотр категорий и текста, а также позволять пользователям обновлять список. |
| Переменные шаблона | Обнаруживайте {{1}}, {{2}}и другие заполнители и позволяйте пользователям сопоставлять их с полями сервиса. |
| Выбор аудитории | Предоставьте пользователям возможность выбирать получателей и просматривать персонализированные сообщения перед отправкой. |
| Отправить историю | Сохраните время исходящего запроса, идентификатор синхронного сообщения, окончательный статус веб-перехватчика и причины сбоя. |
| Входящие сообщения | Ответы можно перенаправить в другой канал или отобразить в собственном интерфейсе диалога. |
| Обработка веб-хуков | Принимать статусные и входящие события по протоколу HTTPS, проверять структуру данных и безопасно обрабатывать повторяющиеся события. |
Примеры кода
cURL - отправить текст
curl -X POST "https://api.chatarchitect.com/whatsappmessage" \ -u "<APP_ID> :<APP_SECRET> " \ -H "Content-Type: application/json" \ -d '{ "channel": "whatsapp", "destination": "<recipient_phone> ", "payload": { "type": "text", "message": "Привет, Джон, как дела?" } }'
Node.js - отправка текста с помощью функции fetch
const APP_ID = process.env.APP_ID; const APP_SECRET = process.env.APP_SECRET; const auth = Buffer.from(`${APP_ID}:${APP_SECRET}`).toString('base64'); async function sendText(destination, text) { const response = await fetch('https://api.chatarchitect.com/whatsappmessage', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': `Basic ${auth}` }, body: JSON.stringify({ channel: 'whatsapp', destination, payload: { type: 'text', message: text } }) }); if (!response.ok) { throw new Error(`Ошибка API ChatArchitect: ${response.status}`); } return response.json(); } sendText('<recipient_phone> ', 'Привет, Джон, как дела?') .then(console.log) .catch(console.error);
Python - отправка текста с помощью запросов
import os import requests APP_ID = os.environ["APP_ID"] APP_SECRET = os.environ["APP_SECRET"] response = requests.post( "https://api.chatarchitect.com/whatsappmessage", auth=(APP_ID, APP_SECRET), headers={"Content-Type": "application/json"}, json={ "channel": "whatsapp", "destination": "<recipient_phone> ", "payload": { "type": "text", "message": "Привет, Джон, как дела?", }, }, timeout=30, ) response.raise_for_status() print(response.json())
Контрольный список тестов
Перед демонстрацией интеграции клиентам воспользуйтесь этим контрольным списком:
- Зарегистрируйте HTTPS-вебхук с помощью
/webhook. - Отправьте обычное текстовое сообщение с помощью
/whatsappmessage. - Убедитесь, что синхронный ответ содержит
статус: отправлено. - Получите заключительный
-хук события сообщенияс пометками"неудачно,"отправлено","доставлено"или"прочитано". - Получите шаблоны с помощью команды
/getHSM. - Отправьте одно утвержденное шаблонное сообщение с реальным значением переменной.
- Функция «Подтвердить неудачную отправку шаблона» отображает причину сбоя веб-перехватчика в вашем сервисе.
- Отправьте входящее сообщение WhatsApp с телефона клиента и подтвердите, что ваш веб-хук получает сообщение root
типа: message.
параметры обработки сообщений клиента
| Вариант | Поведение | Лучше всего подходит для |
|---|---|---|
| Минимальный | Игнорируйте входящие сообщения в вашей службе и перенаправляйте оперативные ответы по другому каналу, например, в службу поддержки, на электронную почту или в командный чат. | Быстрый запуск, сценарии использования только с уведомлениями. |
| Передовой | Отображайте входящие сообщения в вашем сервисе и позволяйте пользователям отвечать без шаблонов, если клиент написал первым. | Полный цикл обработки диалогов. |
Вы можете начать с минимального варианта, а интерфейс для диалогов добавить позже.
Пример описания интеграции с партнерами
При презентации этой функции клиентам используйте краткое описание, подобное этому:
ChatArchitect.com WhatsApp для<Your Service> Отправляйте и получайте сообщения WhatsApp напрямую из<Your Service> Начинайте диалоги с помощью утвержденных шаблонов WhatsApp, получайте ответы от клиентов и автоматически отслеживайте статус доставки с помощью веб-хуков.
Рекомендуемые пункты описания функций:
- Входящие и исходящие сообщения WhatsApp.
- Сообщения, инициированные бизнесом, с использованием утвержденных шаблонов.
- Отслеживание статуса доставки: отправлено, доставлено, прочитано и не доставлено.
- Предварительный просмотр шаблона и сопоставление переменных.
- Дополнительная функция массовой рассылки сообщений с использованием фильтров вашей аудитории.
Рекомендуемый расход
Участник sequenceDiagram Service как Ваш участник сервиса CA как Участник API ChatArchitect WA как Пользователь WhatsApp Service->>CA: POST /webhook CA-->>Service: Webhook saved Service->>CA: POST /getHSM CA-->>Service: Approved templates Service->>CA: POST /whatsappmessage CA-->>Service: status=submitted, messageId CA->>Service: message-event sent/delivered/read/failed WA->>CA: Customer reply CA->>Service: inbound message webhook
Комментарии отсутствуют
Комментарии отсутствуют