Содержание
Что такое APIВотсап?
Ватсап API –приложение программного интерфейса, представляющее список специальных инструкций, с помощью которых возможно встраивание модулей в другие приложения. Он активно используется большим количеством разработчиков по всему миру в основном для создания чатов с ботами в целях предоставления сведений клиентам в удобном формате, например, когда неудобно позвонить и разговаривть вживую.
В мессенджере Ватсап Апи предоставляется возможность интеграции опции автоматической пересылки сообщений в программное обеспечение или сетевой ресурс. Официально разработчики мессенджера никакой поддержки в такой сфере и использовании программы в подобных целях не оказывают, даже выступают против стороннего программного обеспечения. Это объясняется стремлением обеспечить заявленный высокий уровень защищенности мессенджера и переписок.
Но в любом случае область таких разработок процветает и в сети есть множество программных средств для организации этого процесса. На текущий момент особой популярностью пользуется WhatsMate.
Встраивание Апи происходит не напрямую в приложении мессенджера, в при помощи серверов программных средств ВатсМэйт, которые представляют собой третье независимое лицо. Для работы с инструментами Апи необходимо обладать специальными знаниями в программировании на популярных языках пхп и питон.
WhatsAppBusinessAPI
Базнес Ватсап апи предоставляет уникальную возможность для компаний разного уровня в целях коммуникации с клиентами на мировом уровне. Все связи защищены и используются только простые и надежные методы.
Возможности:
- Создание «Профиля компании», который будет содержать подробные сведения об организации, полезной для клиентов: шапку-фото, фактический адрес, описание, контактную информацию и адрес веб-сайта.
- Эффективная организация коммуникации с клиентами. Благодаря качественным инструментам для общения Вы можете оправлять данные в удобном для просмотра виде и месте, есть возможность отвечать на сомнения и вопросы покупателей, осуществлять всестороннюю поддержку.
Читайте также: Что означают одна и две галочки Whatsapp? Значки в Whatsapp
API для разработки бота для Ватсап на php и python
Вотсап API в бизнес секторе создается исключительно от имени фирм, это повышает узнаваемость бренда, упрощает поиск. Подобные сервисы популярны в социальных сетях, мессенджерах и называются чат-ботами.
Бот может работать круглосуточно и при этом ему не требуется платить заработную плату. Максимально быстро (в течение 2-3 минут) приходит автоматический ответ из чата компании, при условии, что проблема стандартизированная. В случае, когда вопрос охватывает сверх базового функционала опросника, то бот предложит перезвонить удобным способом: самостоятельно оператору по единому номеру или указать свой мобильный телефон и время. Все вопросы и ответы автоматически архивируются и благодаря этому можно контролировать работу, совершенствовать ответы, расширять функционал.
Весь размещенный контент не является официальными и не подтвержден разработчиками Ватсапа. Рекомендации и помощь по разным сферам решения вопроса есть в специальных профильных темах на ГитХаб.
Проекты на Github (дать несколько ссылок на темы с сайта github.com):
- com/tgalal/yowsup;
- ru/programming/php/whatsapp-api-the-library-works-with-messenger/;
- com/mgp25/Chat-API.
Whatsapp шлюз что это и список сервисов
Шлюз – это программное средство, которое помогает осуществлять отправку сообщений в приложении при помощи коммуникации Ватсап со сторонними ресурсами.
Для установки Апи требуется наличие шлюза, обеспечивающего взаимодействие приложения с внешними ресурсами. Делается это следующим образом:
- Разрабатывается базовая форма, предназначенная для заполнения пользователем, чтобы бот в дальнейшем мог обработать информацию.
- Необходимо предусмотреть обязательный ввод контактов, чтобы иметь возможность в дальнейшем связаться с клиентом.
- Можно осуществить одноразовую или регулярную рассылку.
Официальные ресурсы мессенджера не планируют публиковать руководство по настройке и использованию этих сервисов и организации взаимодействия.
Список популярных сервисов для создания бота:
- API Bot.
- chat-api.com.
- com.
- api-messenger.com.
На официальных сайтах этих сервисов, которые указаны в списке, есть подробные инструкции по использованию и даже код для интеграции с фронтенд и бэккенд частями.
Приветствую! Нарисовалась у меня задача: нужно интегрировать в CRM систему мессенджеры, а то трудно анализировать работу менеджеров, когда они общаются с клиентами используя один общий «рабочий» телефон. И первым делом нужно было подключить WhatsApp, как один из самых популярных мессенджеров у нашей целевой аудитории.
Анализ ситуации…
Казалось, требуется всего лишь отправлять и принимать сообщения. А столько подводных камней…
1. Официальный API
Официального API в релизе тогда ещё не было. Но Facebook успел прислать ссылку на форму, для подключения официального API, находящегося в тестировании.
2. Сторонний сервис. Подключение через WhatsApp WEB
Рассматривал вариант «серого» способа, использование неофициального сервиса, который отправляет сообщения через WEB интерфейс, подключается сканированием QR кода. Но это зависимость от чужого API, в любой момент может всё отвалиться, да и передавать чужому сервису номера клиентов не хотелось. А ещё писать под чужой авторский API, да ещё который придётся переписывать, при переезде на другой сервис, тоже такое себе удовольствие. Ну и ещё требуется держать телефон включенным (хотя некоторые сервисы за доп плату решали эту проблему 🙂
3. Ручной режим
Посадить человека, пускай копипастит сообщения клиентам. Шутки шутками, а из этой идеи родилось решение!
Решение
Отправка сообщения
Есть такая программка для автоматизации действий под Android, называется Tasker, одна из первых подобных программ. Но я в ней не разобрался с первого раза… Поискал аналоги, наткнулся на программу Automagic. В ней события, действия и ветвления рисуются как блок схема. ОффтопПередаю привет конструктору HiAsm, благодаря которому когда то научился понимать концепцию программирования. И вот в ней я то и придумал решение, root права нам не нужны. Получилось методом научного тыка нарисовать скрипт отправки сообщения, далее буду называть поток, так именуется каждый отдельный нарисованный алгоритм в данной программе. А теперь разберём его работу:Скриншот потока отправки сообщения в WhatsApp
- Каждые 5 секунд периодичным таймером генерируется событие и передаётся следующему блоку.
- Блок HTTP Request спрашивает у сервера, есть ли в очереди следующее сообщение, которое нужно отправить? Бэкенд написан на PHP.
- Парсим ответ сервера JSON.
- Если от сервера в ответе пришла метка, что нужно отправить сообщение, идём дальше.
- Проверяем, включен ли экран устройства, если нет, отправляем уведомление, с целью разбудить телефон. Если же экран включен, и не выполняется другой поток, проверяющий статус, доставлено ли сообщение, то:
- Генерируем ссылку и открываем её, что бы инициировать диалог с полученным от сервера номером телефона в WhatsApp’е
- Самое интересное. Блок Control UI. В нём в виде кода реализована логика проверки успешности открытия чата (проверка регистрации в мессенджере), вставка текста в окно ввода и клацанье по кнопке Отправить.Код писал с мобильного, как заработал, больше не трогал
sleep(2000); // 2 секунды на запуск вацапа sle = 200; ch_c = 0; ch = false; is_sended = false; sleep(sle); ch = existsElementById("com.whatsapp:id/entry"); // Проверяем, появилась ли на экране кнопка отправить sleep(sle); if (ch == false) { ch = existsElementById("com.whatsapp:id/entry"); // Снова проверяем ch_c = ch_c + 1; sleep(1500); } if (ch == false) { ch = existsElementById("com.whatsapp:id/entry"); ch_c = ch_c + 1; sleep(5500); } ch = existsElementById("com.whatsapp:id/entry"); sleep(sle); setText2ById("com.whatsapp:id/entry",text); // Вставляем сообщение sleep(sle); clickById("com.whatsapp:id/send"); // Жмём кнопку отправить sleep(sle); back(); sleep(sle); back(); status = 2; if(ch == true) { // Если всё хорошо, запоминаем, для отправки на сервер is_sended = true; status = 1; }
- Отправляем результаты отправки сообщения на сервер.
- Возвращаемся на домашний экран.
Приём сообщений
Принимать сообщения на много проще. Ставим событие на уведомление от мессенджера. Как только приходит уведомление, помечаем его прочитанным, и отправляем его на сервер как есть. Тот уже спарсит адресата и текст.Скриншот алгоритма приёма сообщений
Плюсы, минусы, доработка и планы
Основную функцию отправки сообщения алгоритм выполняет отлично. Так как не используется WEB интерфейс, схватить баню от мессенджера тут меньше рисков, как мне кажется. Арендовал слабенький виртуальный сервер, установил туда Android и перенёс всё. На отправку одного сообщения новому контакту уходит ~5 сек. Для проверки доставки и прочтения сообщения, разработал отдельный поток, но он в черновом варианте и иногда не срабатывает. Поэтому о нём позже. В данный момент не реализована функция приёма медиа сообщений (фото, аудио, вложения), но это можно выгружать из WhatsApp, используя кнопку поделиться сообщением в будущем. Чуть позже хочу сверху виртуальной машины, где запущен мессенджер, написать SIP транк, через который можно будет звонить через WhatsApp как через SIP ^.^ что может сэкономить расходы на связь. Ещё хочу делать скриншоты аватарок и отправлять их на сервер, для прикрепления миниатюры к контакту в CRM системе. Ну и вообще самое интересное: Данный способ обёртывания в API подойдёт почти для любого приложения под Android 🙂 Всё изначально разрабатывал и запускал на Android 9, xiaomi mi 9 se, root прав нет. UPD: Пример на Python3.8 в качестве бекенда доступен на GitHub, доработан алгоритм ловли уведомлений и код отправки из комментариев от Скрин из примера
Если используете отправку из WhatsApp, то какой API?
- 33,3%Официальный API
- 25,9%Через WhatsApp WEB (QR код)
- 24,1%Отправляю вручную
- 16,7%Придумал своё
Проголосовали 54 пользователя. Воздержались 72 пользователя.
Отправка¶
Для отправки WHATSAPP-сообщения необходимо вызвать POST /whatsapp/messages, передавая в теле параметры сообщения с указанием данных авторизации в заголовке.
Параметры запроса¶
Параметр | Тип данных | Описание и Допустимые значения |
---|---|---|
from | string | |
to | string | |
text(optional) | string | |
validity(optional) | integer | Указывается только в случае отправки сообщения по шаблону. Возможное значние – сутки. |
contentUrl(optional) | string | |
contentName(optional) | string | |
contentType(optional) | string | MimeType контентаСуществующий Mime Type |
callbackUrl(optional) | string | |
callbackData(optional) | string | Данные, которые будут указаны в обратном вызове со статусом сообщения. |
templateId(optional) | string | Идентификатор шаблона в системе поставщика |
templateParams(optional) | object | |
languageCode(optional) | string | Код языка, по умолчанию ‘EN’ |
MIMEType¶
Медиа | Расширения файлов | Ограничения размера | Комментарий |
---|---|---|---|
audio | 16Mb | codecs=opus | |
document | 100 Mb | ||
image | 16 Mb | GIF-изображения автоматически будет преобразован в MP4-видео на стороне WhatsApp | |
video | 5 Mb | Поддерживаются только H.264 и AAC видео-кодеки | |
voice | auidio/ogg | .ogg | 16 Mb |
Пример запроса¶
curl -X POST /whatsapp/messages -H 'Authorization: Key QWxhZGRpbjpvcGVuIHNlc2FtZQ==' -H 'Content-Type: application/json' -d '{ "messages": [ { "from": "MyCompany", "to": "79034567890", "text": "Code: 1234" }, { "from":"MyCompany", "to":"79034567888", "templateId": "account_activated", "templateParams":{ "1": "+7(495) 646 00 54", "2": "https://devino.online" }, "languageCode": "ru", "validity":86400, "callbackUrl":"https://test_callback_url.site" } ] }' https://api.devino.online/whatsapp/messages
Пример ответа¶
{ "result": [ { "code": "OK", "messageId": "3482512350952730368" }, { "code": "OK", "messageId": "3482512350952730369" } ] }
Параметры ответа¶
Параметр | Тип данных | Описание и допустимые значения |
---|---|---|
code | string | |
reasons(optional) | Array[String, String] | Массив ошибок, произошедших во время обработки сообщения. Указывается только при code=REJECTED |
reasons.key | string | Код ошибки. |
reasons.ref(optional) | string | Ссылка на параметр, в котором произошла ошибка. |
messageId(optional) | string | Идентификатор сообщения.Указывается только при code=OK |
description(optional) | string | Описание ошибки. Указывается только при code=REJECTED |
Коды ошибок¶
Key | Ref | Описание |
---|---|---|
billing.error | Payment is required | |
forbidden | Отправка запрещена | |
unknown | Unknown error | |
invalid | messages[i].to | Неправильно указан номер телефона |
invalid | messages[i].validity | Неправильно указан срок жизни |
invalid | messages[i].callbackUrl | Неправильно указан URL |
invalid | messages[i].contentUrl | Неправильно указан URL контента |
invalid | messages[i].contentType | Неправильно тип контента |
invalid | messages[i].from | Неправильно указан отправитель |
invalid | messages[i].languageCode | Неправильно указан код языка |
length.too.long | messages[i].to | Превышена максимальная длина номера телефона |
length.too.long | messages[i].text | Превышена максимальная длина текста сообщения |
length.too.long | messages[i].languageCode | Слишком длинный код языка |
length.too.short | messages[i].contentName | Слишком короткое имя контента |
length.too.short | messages[i].languageCode | Слишком короткий код языка |
must.be.not.null | messages[i].to | Получатель не указан |
must.be.not.null | messages | Массив messages не может быть пустым |
must.be.not.null | messages[i].from | Отправитель не указан |
must.be.not.null | messages[i] | Поле текста и контента не указано |
not.available | messages[i].from | некорректный адрес отправителя |
too.many.messages | messages | Превышен максимальный размер массива messages |
Webhook статусов¶
Для получения статусов WHATSAPP-сообщений необходимо при отсылке сообщения методом POST /whatsapp/messages указать параметр callbackUrl.
Параметры получения статуса¶
Параметр | Тип данных | Описание |
---|---|---|
messageId | long | Индификатор сообщения |
ts | long | Timestamp с миллисекундами получения статуса |
status | string | Статус сообщения |
errorCode | integer | Код ошибки |
ip | string | IP адрес |
browser | string | Имя браузера |
os | string | Название операционной системы |
userAgent | string | UserAgent |
options | string | Данные, которые были указаны в callbackData при отправке запроса |
Пример получения статуса¶
[ { "messageId": 1, "ts": 0, "status": "DELIVERED", "errorCode": 0, "ip": "127.0.0.1", "browser": "string", "os": "string", "userAgent": "string", "options": "string" } ]
Коды ошибок¶
Код | Описание |
---|---|
2000 | Не определен оператор получателя |
2001 | Отклонено как спам |
2002-2004 | Ошибка тарификации |
2005 | Недостаточно средств |
2006-2008 | Ошибка тарификации |
2009 | Отклонено как дубликат |
2010, 2011 | Исткело время жизни |
2012 | Ошибка тарификации |
2017 | Отклонено как спам |
2300 | Превышен лимит длины текста сообщения |
2301 | За короткий промежуток времени было отправлено слишком много сообщений. Повторите отправку |
2302 | Отклонено как спам |
2303 | Указанный MIME-Type не поддерживается или изображение слишком больше (более или равно 5МБ) |
2304 | Превышен лимит длины текста сообщения |
2305 | Пользователь не использовал или более не использует WhatsApp |
2307 | Возникает при попытке отправить сообщение на номер телефона бизнес-аккаунта, с которого производится отправка |
2308 | Количество указанных параметров шаблона не соответствует их ожидаемому количеству |
2309, 2310 | Шаблон не существует для указанного языка или локали |
2311 | Превышение длины параметра шаблона |
2312 | Сообщение отправлено вне диалога и без указания шаблона |
2313 | Неизвестная ошибка |
Webhook входящих сообщений¶
Внимание
Для получения входящих WhatsApp-сообщений необходимо:
- связаться с менеджером компании или обратиться в техническую поддержку,
- сообщить URL, на который система будет отправлять входящие WhatsApp-сообщения.
Параметры получения входящего сообщения¶
Параметр | Тип данных | Описание |
---|---|---|
incomingMessageId | long | Индификатор сообщения |
to | string | Адрес получателя |
from | string | Адрес отправителя |
ts | long | Timestamp с миллисекундами получения сообщения |
text(optional) | string | Текст сообщения |
contentUrl(optional) | string | URL на контент в сообщении |
contentType(optional) | string | Тип контента в сообщении |
contentName(optional) | string | Имя контента в сообщении |
profileName(optional) | string | Имя профиля отправителя |
whatsAppGeoLocation(optional) | WhatsAppGeolocation | Содержит в себе геопозицию, отправленную пользователем |
whatsAppContacts(optional) | List[WhatsAppContact] | Список контактов, отправленных пользователем |
WhatsAppGeolocation¶
Информация
Входящие сообщения с текущими геоданными в настоящее время не поддерживаются.
Параметр | Тип данных | Описание |
---|---|---|
latitude | double | Широта |
longitude | double | Долгота |
address | string | Адрес, по которому находится пользователь |
addressName | string | Название местонахождения пользователя |
addressurl | string | URL, откуда пользователь получил свои геоданные |
WhatsAppContact¶
Информация
Все элемены Массив
ов имеют тип данных string
.
Параметр | Тип данных | Описание |
---|---|---|
addresses | Массив | Полные адреса контакта. Каждый адрес может содержать поля street , city , state , zip , country , countryCode и type . |
birthday | string | День рождения контакта в формате YYYY-MM-DD . |
emails | Массив | Email-адреса. Каждый адрес может содержать email и type . |
contactName | Массив | Полное имя контакта. Каждый объект contactName может содержать поля firstName , middleName , lastName , formattedName , namePrefix и nameSuffix . |
contactCompany | Массив | Информация о месте работы контакта. Каждый объект может содержать поля company , department и title . |
phones | Массив | Номера телефонов контакта. Каждый объект может содержать поля phone , waId и type . |
urls | Массив | URL контакта. Каждый объект может содержать поля url и type . |
Пример получения входящего сообщения¶
{ "incomingMessageId": 0, "to": "str", "from": "str", "text": "str", "contentUrl": "str", "contentType": "str", "contentName": "str", "profileName": "str", "ts": 0 }
Используемые источники:
- https://what-is-app.ru/whatsapp/chto-takoe-whatsapp-api/
- https://habr.com/ru/post/487182/
- https://docs.devino.online/ru/http/whatsapp/