Сторонние сервисы для обмена сообщениями с Whatapp находятся сегодня на пике развития. Такие сервисы предлагают некоторые функции, недоступные в Whatsapp Business API, например история сообщений, список контактов, групповые чаты. Ключевым моментом в их работе является используемый метод авторизации. Самый популярный – это интеграция через WEB интерфейс Whatsapp путем сканирования QR кода в связанных устройствах мобильного приложения. Но есть и другой незаслуженной забытый способ — это интеграция через SMS-верификацию.
Данный способ отошел на второй план вместе с прекращением поддержки библиотеки Yowsup в 2021 г. Но сейчас наблюдаются предпосылки его второго рождения. Важным моментом в этом играет обратная совместимость. Независимо от выбранного способа авторизации, практически все функции Whatsapp, за исключением специфических для мобильного приложения (например, геолокации), будут работать одинаково, а значит API не будет отличаться. Рассмотрим оба способа подробнее:
Авторизация по QR
В Whatsapp заложена функция синхронизации мобильного приложения с Desktop и Web версиями. Эти версии не могут работать независимо от мобильного приложения. При первом запуске в них генерируется QR код, который нужно отсканировать в мобильном приложении на вкладке «связанные устройства» . QR код содержит публичный ключ клиента, идентификаторы клиента и сервера, версию ватсаппа и кое-что другое. Народные умельцы давно научились генерировать QR своими библиотеками и выдавать себя либо за Web, либо за Desktop версию клиента.
Авторизация по SMS
SMS-верификация в Whatsapp предназначена для проверки подлинности телефонного номера пользователя. Она основывается на отправке текстового кода подтверждения или получение кода через звонок на указанный номер телефона, который затем необходимо ввести в соответствующее поле в приложении. SMS верификация для API бота работает также. Важный момент – к одному номеру телефона может быть привязано только одно приложение Whatsapp, поэтому ввод SMS кода в API сервисе приводит к автоматическому выходу из приложения на телефоне.
QR против SMS
|
Критерий |
Авторизация по QR |
Авторизация через СМС / Звонок |
|
Легкость авторизации |
QR-коды легко получить с сервера Whatsapp. Нет таймаутов и задержек |
Есть жесткие ограничения на количество и задержки запросов кодов авторизации с одного номера. Желательно вводить код с первого раза |
|
Баны |
Есть проблема сброса авторизации по QR коду. Причем это может произойти как из-за неправильного использования протокола Whatsapp, так из-за ручных действий по невнимательности Можно легко подключить существующие номера с уже имеющейся базой контактов. Такие номера уже «прогреты» и риск бана на них снижен |
Нет проблемы со сбросом авторизации по QR коду |
|
Юзабилити |
Требуется обучение конечных клиентов. Многие пользователи не знают о наличии этой функции |
Ввод SMS кода более привычен для конечных пользователей, поэтому не требует обучения |
|
Поддержка нескольких устройств |
Можно работать на одном телефоне как через API с функцией чат-бота, так и в пользовательском режиме |
Невозможно использовать на одном номере телефона одновременно Whatsapp приложение и API сервис. |
|
Приватность данных |
Есть риск нарушения приватности личных данных, когда клиент по незнанию сканирует QR код с личного номера и все контакты с историей переписок оказываются на чьих-то серверах |
Практически исключен риск утечки приватных личных данных, т.к. нельзя на одном номере связать несколько приложений по этой технологии |
|
Стабильность технологии |
Технология давно используется |
Практически не используется |
|
Процент доставки сообщений |
Не всегда доставляются отправленные сообщения, т.к. отправка идет со связанного устройства, а не с основного. |
Теоретически процент доставки сообщений выше, т.к. отправка идет с основного устройства, а не со связанного |
|
Автономность |
Требует установленное приложения Whatsapp на телефоне. Не требуется, чтобы мобильный телефон находился в сети или был включен. |
Не требует установленного приложения Whatsapp. Физический телефон требуется только в процессе регистрации. Для виртуальных номеров и вовсе не требуется |
|
Привязка к телефону |
Нельзя зарегистрировать много номеров в качестве API используя один телефон |
Можно зарегистрировать любое количество номеров в качестве API, используя один лишь физический телефон или вообще обойтись без телефона, прибегая к услугам поставщика виртуальных номеров |
Пример использования API для регистрации телефона
С авторизацией по QR-коду все понятно. Есть бесчисленное количество сервисов, предоставляющих такой вариант подключения API. Но что насчет авторизации по СМС коду? API без телефона, чем-то напоминающий Whatsapp Business API, только с расширенными функциями по управлению чатами и контактами, казалось бы, это «вожделенный», хотя и «кусачий» способ авторизации для альтернативных сервисов Whatsapp API, должен найти своего клиента.
Но данный способ все еще не получил пока широкого распространения. Здесь я приведу последовательность выполнения запросов для авторизации по SMS, которые предоставляются:
Берем подходящий номер телефона и выполняем метод requestRegistrationCode, например, используя библиотеку baileys для nodejs, представляющую собой программную реализацию альтернативного мобильного и веб-клиента WhatsApp
import makeWASocket, { fetchLatestBaileysVersion, makeCacheableSignalKeyStore, useMultiFileAuthState } from "@whiskeysockets/baileys" const { state, saveCreds } = await useMultiFileAuthState('baileys_auth_info') const { version, isLatest } = await fetchLatestBaileysVersion() const sock = makeWASocket({ mobile: true, auth: { creds: state.creds, /** caching makes the store faster to send/recv messages */ keys: makeCacheableSignalKeyStore(state.keys, null), }, }) const { registration } = sock.authState.creds || { registration: {} } await sock.requestRegistrationCode(registration)
В качестве ответа приходит сырой json из Whatsapp примерно следующего содержания:
{ "flash_type": 0, "length": 6, "login": "790012345673442", "method": "sms", "notify_after": 86400, "retry_after": 172805, "sms_wait": 172805, "status": "sent", "voice_wait": -1, "wa_old_wait": 65 }
Если «status»: «sent», то в течение нескольких секунд мы должны получить SMS сообщение на телефон с проверочным кодом:

Далее выполняем второй запрос register, куда передаем сам код:
const response = await sock.register(whatsappCode)
В ответ получаем json
{ "autoconf_type": 1, "lid": "64832766259272", "login": "790012345673442", "security_code_set": false, "status": "ok", "type": "existing" }
Поле «status»: «ok» означает, что номер зарегистрирован в качестве клиента Whatsapp и теперь можно использоваться как API.
Заключение
В заключение следует отметить, что при выборе стороннего сервиса Whatsapp необходимо понимать плюсы и минусы использования QR и SMS авторизации. Если требуется максимальная универсальность, то QR-верификация является более предпочтительным решением. Если же нужно обеспечить максимальную бесшовность и удобство для пользователей, то использование SMS-кодов может быть более подходящим вариантом. Что касается этической стороне вопроса, то зная номера телефонов, есть риск злоупотребления запросами смс-ок, и голосовыми звонками, что несомненно будет раздражать пользователей. Именно поэтому в Whatsapp применяется очень суровый лимит на запрос кодов для одного номера.
ссылка на оригинал статьи https://habr.com/ru/articles/726782/
Добавить комментарий