Сравнение провайдеров
Авторизация WhatsApp
WhatsApp поддерживает QR-сопряжение и сопряжение по номеру телефона через стандартные эндпоинты аутентификации. QR-поток также может перейти в дополнительную авторизацию Passkey через три публичных эндпоинта с X-Api-Key.
qrcode
WhatsApp QR-сопряжение: вызовите /auth/qr/start, чтобы начать сессию устройства. QR-токен приходит через account.auth.required и также доступен для опроса через /auth/qr/check.
- 1. POST /v1/accounts с provider=whatsapp, auth_mode=qrcode. device_os / device_platform задаются в provider_data, постоянная маршрутизация — верхнеуровневым proxy.
- 2. POST /v1/accounts/{account_id}/auth/qr/start запускает устройство. Возвращается status=awaiting_qr_scan, но сама строка QR приходит асинхронно.
- 3. Слушайте событие account.auth.required на webhook — auth_payload.qr_code содержит строку, которую UI должен отрисовать как сканируемый QR. Альтернатива — опрос /auth/qr/check.
- 4. После сканирования приходит account.auth.succeeded с provider_account_ref, обычно затем account.started. Проверьте runtime_status, прежде чем решать, нужен ли POST /v1/accounts/{account_id}/runtime/start.
provider_data.device_os— Метка ОС устройства, отображаемая на экране «Связанные устройства». По умолчанию MacOS. Нужно задавать вместе с device_platform — допустимые комбинации см. в таблице платформ выше по потоку.provider_data.device_platform— Числовой код платформы устройства (1=CHROME, 2=FIREFOX, 5=SAFARI, 14=IOS_PHONE, 16=ANDROID_PHONE, ...). Действует только в паре с device_os.proxy— Постоянный proxy верхнего уровня аккаунта; это не provider_data.proxy_config.
code
WhatsApp по номеру телефона: сохраните номер на аккаунте при создании, затем введите на телефоне 8-значный verify_code в «Связанные устройства → Связать по номеру телефона».
- 1. POST /v1/accounts с provider=whatsapp, auth_mode=code и provider_data.phone в формате E.164 (только цифры). Номер сохраняется на аккаунте и автоматически переиспользуется последующими действиями аутентификации.
- 2. POST /v1/accounts/{account_id}/auth/start с пустым телом. Сохранённый номер переиспользуется; в ответе под auth_payload приходит 8-значный verify_code.
- 3. Покажите verify_code пользователю. Телефон принимает его около 3 минут; по истечении этого времени поток нужно перезапустить.
- 4. После сопряжения приходят events.PairSuccess и events.Connected через webhook — как и в QR-потоке.
provider_data.phone— Номер телефона в E.164 (только цифры, например 15551234567). Указывается в provider_data.phone при создании аккаунта; последующие действия аутентификации автоматически переиспользуют его.
Passkey (ветвь QR)
Дополнительная ветка Passkey в WhatsApp: после начала QR-потока состояние может потребовать WebAuthn credential и, при необходимости, явного подтверждения.
- 1. Сначала запустите обычный WhatsApp QR-поток. Когда GET /v1/accounts/{account_id}/auth вернёт status=passkey_required, создайте POST /v1/accounts/{account_id}/auth-sessions.
- 2. Завершите размещённый authorize_url либо используйте auth_payload.public_key в WebAuthn API и отправьте сериализованный credential через POST /auth/passkey-response.
- 3. Если состояние станет passkey_confirmation, вызовите POST /v1/accounts/{account_id}/auth/passkey-confirm без JSON-тела.
- 4. Опрашивайте GET /v1/accounts/{account_id}/auth после каждого действия. passkey_pending и passkey_confirmation_sent являются промежуточными состояниями.
- 5. Завершите поток при status=authorized или обработайте last_error при status=failed. Для повтора начните новый QR-поток.
auth_payload.public_key— Публичные параметры WebAuthn challenge из auth_payload.public_key. Передавайте их только WebAuthn API в доверенном origin.authorize_url— Временная размещённая страница авторизации для завершения Passkey без собственной реализации WebAuthn UI.webauthn_response— Сериализованный credential WebAuthn. Передавайте его как строку без изменений; не записывайте и не публикуйте значение.
Примечания
- QR приходит через webhook-событие account.auth.required, а не синхронно в ответе на /auth/qr/start. Подключите webhook-приёмник до запуска потока.
- authorize_url, challenge и credential WebAuthn являются временными чувствительными данными. В документации используйте только плейсхолдеры; не записывайте значения в публичные логи и не передавайте их другим лицам.
- Полученный из /auth/start verify_code показывается конечному пользователю и НЕ возвращается обратно в API. WhatsApp ожидает, что пользователь введёт его на телефоне в течение ~3 минут.
- Кэшированный provider client не переключает proxy на лету. Во время авторизации выполните stop и перезапуск; для работающего аккаунта — runtime/reconnect.
- Реакции приходят в виде events.Message + Message.reactionMessage, но платформа отображает их как message.reaction (эмодзи в data.event.reaction, id исходного сообщения в data.message.target_message_id).
- Медиа, превышающее лимиты вышестоящего сервиса (аудио 50 MB / видео 60 MB / документы 50 MB), отдаётся с пустым url и metadata.is_big_file=true.