Сторонние сервисы для обмена сообщениями с 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 применяется очень суровый лимит на запрос кодов для одного номера.
