Как стать автором
Обновить

QR-коды против SMS: Какой способ подключения к WhatsApp лучше?

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров1.8K

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

Теги:
Хабы:
Всего голосов 2: ↑1 и ↓10
Комментарии0

Публикации