Встретил вот эту тему про
отправку сообщений в Viber, значит интерес к вопросу интеграции с мессенджерами у участников форума есть. Этот замечательный форум не раз выручал меня, поэтому хочу быть тоже чем то полезен, и делюсь своими наработками по этой теме. У меня встала задача отправки сообщений в WhatsApp из CRM системы на Harbour.
Первые результаты гугления несколько расстроили, так как выяснилось, что WhatsApp бережет свой API прямо как девственность и безоговорочно дает только крупным клиентам типа Сбера и ВТБ.
Но на Гитхабе была найдена
имплементация API на языке Go (Golang).
Язык очень близок по парадигме и синтаксису к нашему любимому Harbour, поэтому никаких трудностей с пониманием кода там не возникнет. И главное, что нет никаких зависимостей - только загрузочный модуль.
Постановка задачи. В системе на Harbour идет ввод в базу так называемых записок (распоряжений, уведомлений и т.д.), которые связаны с сущностями системы (документы, контрагенты, договора и т.д.) Эти записки надо посылать в виде сообщений WhatsApp определенным сотрудникам, те могут с телефона ответить и система встроит ответ в базу, привязав его к нужной сущности.
Архитектура реализации достаточно простая. Программа листенер на Harbour постоянно находится в ожидании новых данных из базы и как только они появляются выжимает их в текстовые файлы формата .csv. Его содержимое: телефон адресата, текст сообщения, ФИО отправителя.
Программа бот на Go постоянно находится в ожидании этих файлов и при их появлении читает оттуда данные и посылает сообщение в WhatsApp. Также можно посылать любые вложения (документы, фото, аудио, видео файлы). Бот на Go в свою очередь стоит на прослушке новых входящих сообщений и при их появлении формирует текстовые файлы, которые потом забираются листенером на Harbour и встраиваются в ERP систему.
Документации на пакет практически нет, только README.md на Гитхабе, но там же есть примеры, из которых можно по крайней мере стартовать. И еще много информации можно получить из прочтения Issues и их обсуждения там же. Разработчики охотно отвечают на вопросы и фиксят баги.
Итак, установка и начало работы.
1. Скачиваем и устанавливаем Go -
https://github.com/golang/go Вот хорошая инструкция по быстрому старту на Хабре
https://habr.com/ru/post/133281/ 2. Пакет Rhymen/go-whatsapp и исходный код бота WhatsApp можно
скачать вот здесь.
Там же есть пример .csv файла и готовый загрузочник, который можно запустить и попробовать.
3. Допиливаем под себя код бота, собираем из всего этого загрузочник и кладем его в папку где будет происходить обмен текстовыми сообщениями.
4. Для организации взаимодействия с API WhatsApp нужен телефон с активной сим-картой и аккаунт WhatsApp.Все дополнительные сессии, подключенные к WhatsApp кроме телефона (например, с компьютера), должны быть выключены.
5. Запускаем загрузочник. Для установления первоначального соединения необходимо с телефона в течение 20 секунд отсканировать появившийся QR-код. В телефоне при входе в WhatsApp – раздел WhatsApp Web должны появиться данные новой сессии - github.com/Rhymen/go-whatsapp.
В результате в нашем рабочем каталоге будет создан файл whatsappSession.gob, с данными текущей сессии, которые будут использованы при последующих входах чтобы не сканировать каждый раз QR-код. Раз в час бот перелогинивается (это надо чтобы не нарваться на бан от WhatsApp) и данные новой сессии перезаписываются в файл whatsappSession.gob.
6. Для проверки работы берем пример .csv файла с сообщением и меняем в нем номер телефона адресата. Для тестирования можно посылать самому себе, то есть на тот же самый номер телефона что был залогинен.
Описанная система у нас нормально функционирует уже полгода. Дополнительно сканировать QR-код пришлось за все время только один раз при замене телефона на новый. Так как сообщений очень много и ранее использовались платные СМС, то удалось хорошо съэкономить на этом. Также в пакете есть много дополнительных возможностей (отслеживание статуса сообщений, рассылка группе адресатов, контроль уровня зарядки батареи и т.д.)
Кроме того, кого то может заинтересовать более плотно подружить Harbour и Go используя продукт Александра Кресина
Guiserver, который можно
собрать как библиотеку, чтобы удобнее было писать Harbour приложения, используя возможности Go.