Как сделать API на любое Android приложение. На примере WhatsApp
Приветствую! Нарисовалась у меня задача: нужно интегрировать в CRM систему мессенджеры, а то трудно анализировать работу менеджеров, когда они общаются с клиентами используя один общий «рабочий» телефон. И первым делом нужно было подключить WhatsApp, как один из самых популярных мессенджеров у нашей целевой аудитории.
Анализ ситуации...
Казалось, требуется всего лишь отправлять и принимать сообщения. А столько подводных камней…
1. Официальный API
Официального API в релизе тогда ещё не было. Но Facebook успел прислать ссылку на форму, для подключения официального API, находящегося в тестировании.
2. Сторонний сервис. Подключение через WhatsApp WEB
Рассматривал вариант «серого» способа, использование неофициального сервиса, который отправляет сообщения через WEB интерфейс, подключается сканированием QR кода.
Но это зависимость от чужого API, в любой момент может всё отвалиться, да и передавать чужому сервису номера клиентов не хотелось. А ещё писать под чужой авторский API, да ещё который придётся переписывать, при переезде на другой сервис, тоже такое себе удовольствие.
Ну и ещё требуется держать телефон включенным (хотя некоторые сервисы за доп плату решали эту проблему)
3. Ручной режим
Посадить человека, пускай копипастит сообщения клиентам. Шутки шутками, а из этой идеи родилось решение!
Решение
Есть такая программка для автоматизации действий под Android, называется Tasker, одна из первых подобных программ. Но я в ней не разобрался с первого раза… Поискал аналоги, наткнулся на программу Automagic. В ней события, действия и ветвления рисуются как блок схема.
Оффтоп
Передаю привет конструктору HiAsm, на котором когда то научился понимать концепцию программирования.
И вот в ней я то и придумал решение. Получилось методом научного тыка нарисовать скрипт отправки сообщения, далее буду называть поток, так именуется каждый отдельный нарисованный алгоритм в данной программе. А теперь разберём его работу:
Скриншот потока отправки сообщения в WhatsApp
1. Каждые 5 секунд периодичным таймером генерируется событие и передаётся следующему блоку.
2. Блок HTTP Request спрашивает у сервера, есть ли в очереди следующее сообщение, которое нужно отправить? Бэкенд написан на PHP.
3. Парсим ответ сервера JSON
4. Если от сервера в ответе пришла метка, что нужно отправить сообщение, идём дальше
5. Проверяем, включен ли экран устройства, если нет, отправляем уведомление, с целью разбудить телефон. Если же экран включен, и не выполняется другой поток, проверяющий статус, доставлено ли сообщение, то:
6. Генерируем ссылку и открываем её, что бы инициировать диалог с полученным от сервера номером телефона в WhatsApp'е
7. Самое интересное. Блок Control UI. В нём в виде кода реализована логика проверки успешности открытия чата (проверка регистрации в мессенджере), вставка текста в окно ввода и клацанье по кнопке Отправить.