PD Документация ← На главную

Telegram Gateway

Коды подтверждения на номер телефона через сам Telegram — без бота, без chat id, без «Start» от человека. У контакта должен быть только телефон; сообщение с кодом собирает Telegram и показывает его как системное уведомление. Стоимость — $0,01 за доставленный код (недоставленный возвращается, когда истечёт срок), и код приходит туда, где SMS фильтруется или стоит в несколько раз дороже.

Канал — для одноразовых кодов: вход, подтверждение покупки, проверка телефона. Это не мессенджер: маркетинговый текст через него не отправить, шлюз принимает только код. Для сообщений людям есть Telegram (бот), MAX и VK.

Шаг 1 — Токен шлюза

  1. Откройте gateway.telegram.org, войдите через свой Telegram и пополните баланс
  2. Settings → API token — скопируйте токен
  3. Необязательно: верифицируйте там свой канал, чтобы код приходил «от него» (sender_username)

Шаг 2 — Добавьте канал

Каналы → Новый канал → Telegram Gateway, вставьте токен и сохраните. Проверить связь спрашивает номер телефона и вызывает checkSendAbility: подтверждает, что номер может получить код, ничего не отправляя (для номера самого аккаунта — бесплатно). Три настройки:

ПолеПо умолчаниюОписание
Срок кода300 с30–3600. Недоставленный код истекает через этот срок, и деньги возвращаются
Длина кода64–8 цифр, если код генерирует шлюз
Канал-отправительUsername верифицированного канала аккаунта, от чьего имени показывается код

Шаг 3 — Отправьте код

Отправка — обычное уведомление с типом канала telegram_gateway одному контакту с телефоном. Два способа получить код:

Код знаете вы — передайте его в data.code (4–8 цифр). Сверяйте введённое человеком у себя:

bash
curl -X POST https://api.pushdata.ru/api/v1/notifications \
  -H "Authorization: Bearer pd_live_…" -H "Content-Type: application/json" \
  -d '{ "channel_type": "telegram_gateway", "target": { "user_ids": ["user-42"] },
        "title": "Код входа", "data": { "code": "482913" }, "transactional": true }'

Код придумывает шлюз — отправьте без data.code (применится длина кода канала) и проверьте введённое через verify:

bash
curl -X POST https://api.pushdata.ru/api/v1/notifications/<id>/verify \
  -H "Authorization: Bearer pd_live_…" -H "Content-Type: application/json" \
  -d '{ "code": "482913" }'
# → { "status": "code_valid" }    или   code_invalid · code_max_attempts_exceeded · expired

Заголовок и текст уведомления не доставляются — сообщение собирает Telegram. transactional: true подразумевается: отправка не смотрит на отписки и реестр согласий (код, который человек запросил, — не реклама). Контакт без телефона пропускается с has no phone; несколько контактов в цели получают каждый свой запрос.

Отчёты о доставке

Шлюз присылает PushData отчёты (URL колбэка передаётся с каждым запросом): delivered и read помечают доставку доставленной (read — ещё и открытой), expired и revoked переводят её в ошибку с причиной. В журнале доставок request_id шлюза показан как id сообщения провайдера, а вебхуки срабатывают как для любого канала.

Соответствие закону

Канал — это Telegram: приложение с профилем 41-ФЗ (Настройки → Соответствие закону) отклоняет его с 400 channel_restricted, как и отправку через бота. Код через шлюз — не реклама, но закон называет мессенджер, а не сообщение.

Ошибки

Текст в журналеЗначение
recipient must be a phone number / has no phoneу контакта нет телефона в формате E.164
Telegram Gateway error: ACCESS_TOKEN_INVALIDтокен отозван — пересохраните канал
Telegram Gateway error: PHONE_NUMBER_INVALIDномер не известен Telegram как телефон
Telegram Gateway error: BALANCE_NOT_ENOUGHпополните баланс на gateway.telegram.org
Telegram Gateway HTTP 429 / 5xxшлюз занят — доставка будет повторена
the code was expired before deliveryчеловек не получил код за его срок; деньги возвращены