Блог
hidden-dummy
OTP-коды в WhatsApp*: как отправлять одноразовые пароли через WABA и шлюз
Как сделать рассылку в MAX
SIM-SIM, откройся: страны ставят замок на мессенджеры
WhatsApp* добавил звуковые стикеры — теперь они будут говорить
Новинка! Звонки в WhatsApp* через API без подключения к WABA
GREEN-API – в числе тех, кто помогает решать задачи IT-рынка. Как прошел Impact Industry от Astana Hub
WhatsApp* расширяет границы
WhatsApp* «организовывает» сообщества
Бесплатные MCP-серверы: подборка по задачам и где искать новые
MCP-сервер для мессенджеров: подключаем Telegram, WhatsApp* и MAX к Claude

OTP-коды в WhatsApp*: как отправлять одноразовые пароли через WABA и шлюз

OTP-код — это одноразовый пароль, которым клиент подтверждает вход, регистрацию или оплату. В WhatsApp такой код можно отправить двумя способами: через официальный WhatsApp Business API (WABA) специальным шаблоном или через шлюз обычным сообщением. Официальный путь надёжнее, но доступен не каждой компании. Ниже — как устроены оба способа, сколько они стоят и как не открыть мошенникам дорогу к аккаунтам клиентов.

Содержание

Что такое OTP в WhatsApp и зачем он нужен

OTP (one-time password) — код из цифр или из букв и цифр, который действует заданный промежуток времени и только один раз. Он подтверждает, что действие выполняет владелец номера телефона. Например, клиент вводит номер на сайте, получает код в WhatsApp и вводит его в форму.

Чаще всего OTP нужен в следующих сценариях:

  • вход в личный кабинет или второй шаг входа после пароля;
  • регистрация и проверка номера телефона;
  • восстановление доступа к аккаунту;
  • подтверждение оплаты или привязки карты;
  • смена телефона, email или адреса доставки.

По сравнению с SMS у WhatsApp три преимущества. Клиент видит название компании, а не безымянный номер. Код можно скопировать одной кнопкой. Не нужно регистрировать имя отправителя. В SMS название компании вместо номера показывается, только если зарегистрировать его у мобильных операторов, и во многих странах за это платят отдельно. По цене WhatsApp выгоднее не везде: сравните цену сообщения в WhatsApp со своим тарифом на SMS.

Как OTP устроен в официальном WhatsApp Business API

В WABA коды отправляют только шаблоном категории authentication. Meta** прямо требует: если приложение отправляет коды в WhatsApp, нужен именно такой шаблон. Отправить код маркетинговым или utility-шаблоном нельзя.

Шаблон можно взять из библиотеки Meta или составить самому. Шаблоны из библиотеки уже одобрены: их можно отправлять сразу, но текст в них менять нельзя. Если составить шаблон самому, текст с кодом вы пишете сами, но перед отправкой его должна одобрить Meta.

Из чего состоит шаблон из библиотеки:

  • готовая фраза Meta «Здравствуйте! <код> — ваш код подтверждения», переведённая на язык, который вы выбрали при создании шаблона;
  • по желанию — срок действия кода, от 1 до 90 минут;
  • кнопка для кода: копирование, автозаполнение или вариант без кнопки — какую выбрать, показано в таблице ниже.

Из чего состоит свой шаблон:

  • ваш текст с переменной для кода. Например, «Ваш код подтверждения — {{1}}», где {{1}} — переменная, которая будет содержать код;
  • по желанию — предупреждение «Никому не сообщайте этот код». Meta добавит его сама, если при создании шаблона указать addSecurityRecommendation: true;
  • кнопка для кода: копирование, автозаполнение или вариант без кнопки — какую выбрать, показано в таблице ниже.

Ссылки, картинки и эмодзи в шаблон добавить нельзя, а сам код — не длиннее 15 символов. Требования описаны в документации Meta об authentication-шаблонах.

Тип кнопки выбирают при создании шаблона: автоматическое заполнение кода (One-tap), копирование кода (Copy code) или шаблон без кнопки (Zero-tap).

КнопкаГде работаетЧто необходимо сделать
Копирование кода (Copy code)iOS и AndroidДоработок не требуется
Автозаполнение в одно касание (One-tap)Только AndroidДоработать интеграцию под обмен данными с WhatsApp
Без кнопки (Zero-tap)Только AndroidДоработать интеграцию и принять условия Meta

На iPhone с iOS 26 и новее система сама предлагает подставить код из уведомления, дорабатывать ничего не нужно.

Ещё четыре особенности, которые стоит учесть заранее:

  • Код приходит только на телефон. В WhatsApp Web и на компьютере сообщение скрыто, и клиента просят открыть его на основном устройстве.
  • Нужен номер телефона клиента. Клиент может написать компании со скрытым номером телефона, показывая только своё имя пользователя (username). Тогда вместо номера компания видит BSUID — уникальный идентификатор, который Meta присваивает каждой паре «пользователь — бизнес». Authentication-шаблоны на BSUID отправить нельзя: Meta вернёт ошибку 131062. Поэтому для отправки authentication-шаблона всегда запрашивайте у клиента номер телефона.
  • Сообщение живёт ограниченное время. Если WhatsApp не доставил код за 10 минут, сообщение удаляется. Этот срок можно изменить от 30 секунд до 15 минут. Ставьте его не больше срока действия кода, чтобы клиент не получил уже бесполезный код.
  • Кнопка «Я не запрашивал код». Meta постепенно добавляет её в шаблоны. Если клиент её нажал, кто-то мог пытаться войти в его аккаунт.

Кто может отправлять OTP через WABA

Доступ к authentication-шаблонам ограничен. По документации GREEN-API об authentication-шаблонах компания должна выполнить два условия:

  1. Пройти верификацию через Meta или её официального партнёра.
  2. Иметь лимит не меньше 2000 сообщений в сутки. Это второй уровень лимита (Tier 2): компания может первой написать 2000 разным клиентам за 24 часа. Верифицированная компания с одобренным наименованием аккаунта обычно получает такой лимит сразу.

Если условия не выполнены, Meta отклонит шаблон с ошибкой о нехватке прав. Поэтому компании без верификации официальный путь недоступен. Для неё остаются шлюз WhatsApp API от GREEN-API и SMS.

Сколько стоит OTP в WhatsApp

Модель оплаты зависит от способа отправки. В WABA плата берётся за каждое доставленное authentication-сообщение, а цена зависит от страны клиента.

Страна клиентаЦена за сообщение
Казахстан11 ₸
Россия5 ₽
Израиль$0,0072
Индия$0,0019

Цены указаны по тарифам GREEN-API для WABA. Данные актуальны на октябрь 2026 года.

В 18 странах, среди них Индия и Казахстан, Meta применяет повышенную ставку — authentication-international. Она действует только для компаний, которые отправляют больше 750 тысяч сообщений в течение 30 дней клиентам из этих стран. Например, компания из Индии, соответствующая этим условиям, заплатит повышенную ставку за отправку кодов клиентам в Казахстане, но за отправку кодов клиентам в Индии — обычную ставку. О переходе на повышенную ставку Meta предупреждает за 30 дней, полный список стран — в документации Meta о международной ставке.

Через шлюз WhatsApp API от GREEN-API оплата устроена иначе: вы платите фиксированный тариф за номер, без ограничений по чатам и сообщениям.

Как выбрать способ отправки OTP

Шлюз называют «серым» решением, а официальный WABA — «белым». Для OTP разница между ними особенно важна: если номер заблокируют, клиенты не смогут войти в аккаунты.

КритерийWABA («белое»)Шлюз («серое»)
ДоступВерификация и лимит от 2000 сообщений в суткиЛюбой номер, привязка по QR-коду
Как выглядит кодШаблон Meta с кнопкой «Копировать код»Обычное сообщение, можно добавить кнопку копирования
ОплатаПлата за каждое доставленное сообщениеФиксированный тариф
Риск блокировкиНизкий, если соблюдать правила MetaПри блокировке и ограничениях номера отправлять сообщения будет невозможно

У GREEN-API есть оба решения: официальный WhatsApp Business API (WABA) и шлюз WhatsApp API. Например, онлайн-сервис может начать со шлюза, пока проходит верификацию в Meta, и перейти на WABA, когда получит доступ к authentication-шаблонам. В любом случае держите SMS как резервный канал.

Как отправить OTP через WABA

  1. Подключите WABA и пройдите верификацию компании.
  2. Используйте готовый или создайте свой authentication-шаблон с кнопкой «Копировать код» и сроком действия, например 5 минут. В GREEN-API шаблоны создают методом CreateTemplate.
  3. Дождитесь одобрения шаблона Meta, если составляли его сами. Шаблон из библиотеки можно отправлять сразу.
  4. Отправляйте код методом SendTemplate. Код передаётся в переменной шаблона, а текст и кнопка уже заданы в нём.
  5. Следите за статусом доставки. Если статус «доставлено» не пришёл за минуту, предложите клиенту получить код по SMS.

Как отправить OTP через шлюз

Через шлюз код отправляется как обычное сообщение. Чтобы клиенту было удобно, добавьте кнопку копирования — в GREEN-API это метод SendInteractiveButtons.

Пример на Python: скрипт создаёт код, запоминает его и срок действия, отправляет клиенту и проверяет при вводе.

import hashlib
import hmac
import os
import secrets
import time

import requests

API_URL = os.environ["API_URL"]
ID_INSTANCE = os.environ["ID_INSTANCE"]
API_TOKEN = os.environ["API_TOKEN_INSTANCE"]

codes = {}  # в рабочем проекте храните коды в базе данных или Redis

def code_hash(code: str) -> str:
return hashlib.sha256(code.encode()).hexdigest()

def send_otp(phone: str) -> None:
code = f"{secrets.randbelow(10**6):06d}"
codes[phone] = {"hash": code_hash(code), "expires": time.time() + 300, "attempts": 0}

url = f"{API_URL}/waInstance{ID_INSTANCE}/sendInteractiveButtons/{API_TOKEN}"
body = {
"chatId": f"{phone}@c.us",
"body": f"Ваш код подтверждения: {code}. Никому его не сообщайте.",
"footer": "Код действует 5 минут",
"buttons": [{"buttonId": "1", "buttonText": "Копировать код", "copyCode": code}],
}
requests.post(url, json=body, timeout=10).raise_for_status()

def check_otp(phone: str, code: str) -> bool:
entry = codes.get(phone)
if not entry or time.time() > entry["expires"] or entry["attempts"] >= 5:
return False
entry["attempts"] += 1
if hmac.compare_digest(entry["hash"], code_hash(code)):
del codes[phone]  # код одноразовый
return True
return False

Для такой схемы нужен тариф Business: на бесплатном тарифе Developer можно писать только в три чата. Учтите, что шлюз работает с обычным номером: если его заблокируют, коды перестанут приходить. Поэтому без резервного канала, например SMS, через шлюз отправлять коды не стоит.

Правила безопасности для OTP

Надёжность OTP зависит не только от канала, но и от того, как вы обрабатываете коды на своей стороне.

  • Проверьте номер до отправки. Убедитесь, что у клиента есть WhatsApp, и предупредите его, куда придёт код.
  • Ограничьте срок действия. Например, 5 минут. После этого код не должен работать, даже если его ввели правильно.
  • Ограничьте попытки. Например, не больше 5 попыток ввода и не больше одной повторной отправки в минуту.
  • Делайте код одноразовым. После успешного ввода удаляйте его.
  • Храните не сам код, а его хеш. Тогда утечка базы не раскроет действующие коды.
  • Держите резервный канал. Если код не доставлен, предложите SMS.
  • Не добавляйте рекламу. Сообщение с кодом должно содержать только код и предупреждение.

Частые вопросы

Безопасно ли отправлять OTP в WhatsApp?

Да, если соблюдать правила на своей стороне. В WABA код показывается только на основном телефоне клиента, а кнопка «Я не запрашивал код» помогает заметить попытку взлома. Но срок действия, лимит попыток и одноразовость кода обеспечивает ваш сервер, а не WhatsApp.

Можно ли отправить код обычным шаблоном?

Нет. Meta требует отправлять коды подтверждения только шаблоном категории authentication. Код в маркетинговом или utility-шаблоне нарушает правила, и такой шаблон могут отклонить или переклассифицировать.

Сколько должен действовать код?

В шаблоне WABA срок действия задаётся от 1 до 90 минут. На практике хватает 5–10 минут: этого достаточно, чтобы открыть WhatsApp и ввести код. Время жизни самого сообщения ставьте не больше срока действия кода.

Что делать, если код не пришёл?

Проверьте, что номер введён в международном формате и у клиента есть WhatsApp. Посмотрите статус доставки: если сообщение не доставлено за минуту, предложите отправить код по SMS. Повторную отправку в WhatsApp разрешайте не чаще раза в минуту.

Facebook
Twitter
LinkedIn

Содержание раздела

Scroll to Top