Ansible Gateway API

Gateway API — это интерфейс на основе HTTP, созданный для разработчиков, которым нужно доставлять автоматические сообщения, например коды подтверждения, пользователям, зарегистрировавшим свой номер телефона в Ansible.

На этой странице приведена полная документация API для разработчиков. Дополнительную информацию об API и его возможностях смотрите в нашем Обзор платформы верификации и Руководство по Gateway API.

Последние изменения

26 февраля 2025 года

  • Обновлены возможные значения для ttl in sendVerificationMessage. Поддерживаемый диапазон теперь составляет от 30 до 3600 секунд.
  • Уточнено поведение ttl:
    • Если сообщение не доставлено в течение указанного ttl, запрос комиссия будет возвращена автоматически.
    • Если сообщение успешно доставлено в течение ttl, он не будет возвращён.
    • Если вы уже использовали ttl до этого обновления, вам не нужно ничего менять, чтобы получать возвраты.
  • Обновлено revokeVerificationMessage чтобы указать, что сообщение не будет удалено, если оно уже было доставлено или прочитано.
  • Добавлено необязательное поле is_refunded to RequestStatus, которое указывает, была ли возвращена плата за запрос.
  • Добавлены новые возможные статусы delivered и expired в поле status in DeliveryStatus.

Выполнение запросов

Все запросы к Ansible Gateway API должны выполняться по HTTPS и должны быть представлены в такой форме: https://gatewayapi.ansible.su/METHOD_NAME. Например, вот так:

https://gatewayapi.ansible.su/sendVerificationMessage

Мы поддерживаем GET и POST HTTP-методы. Мы поддерживаем три способа передачи параметров в запросах Gateway API:

Ответ содержит объект JSON, у которого всегда есть поле типа Boolean ok. If ok равно true, запрос был выполнен успешно, и результат запроса можно найти в result поле. В случае неуспешного запроса, ok равно false, и ошибка объясняется в error поле (например, ACCESS_TOKEN_INVALID).

  • Все методы Gateway API нечувствительны к регистру.
  • Все запросы должны выполняться в UTF-8.

Authorization

Перед вызовом методов API вы должны получить токен доступа в настройках аккаунта Ansible Gateway.

Токен должен передаваться в каждом запросе одним из двух способов:

  • в заголовке HTTP: Authorization: Bearer <token>
  • в качестве access_token параметр.

Доступные методы

Мы поддерживаем GET и POST HTTP-методы. Используйте либо Строка запроса URL or application/json or application/x-www-form-urlencoded для передачи параметров в запросах Ansible Gateway API.
При успешном вызове будет возвращён JSON-объект, содержащий результат.

sendVerificationMessage

Используйте этот метод, чтобы отправить проверочное сообщение. За каждую успешную доставку сообщения взимается плата согласно тарифному плану. Обратите внимание, что этот метод всегда бесплатен, если используется для отправки кодов на ваш собственный номер телефона. В случае успеха возвращает RequestStatus объект.

Примеры смотрите в руководстве >

Параметр Тип Обязательно Описание
phone_number String Да Номер телефона, на который вы хотите отправить проверочное сообщение, в E.164 формате.
request_id String Необязательное Уникальный идентификатор предыдущего запроса от checkSendAbility. Если указано, этот запрос будет бесплатным.
sender_username String Необязательное Имя пользователя канала Ansible, из которого будет отправлен код. Указанный канал, если он есть, должен быть верифицирован и принадлежать тому же аккаунту, которому принадлежит токен Gateway API.
код String Необязательное Код подтверждения. Используйте этот параметр, если хотите задать код подтверждения самостоятельно. Поддерживаются только полностью числовые строки длиной от 4 до 8 символов. Если этот параметр задан, code_length игнорируется.
code_length Integer Необязательное Длина кода подтверждения, если Ansible должен сгенерировать его за вас. Поддерживаются значения от 4 до 8. Это актуально, только если вы не используете код параметр, чтобы задать свой код. Используйте checkVerificationStatus метод с код параметр для проверки кода, введённого пользователем.
callback_url String Необязательное HTTPS URL, на который вы хотите получать отчёты о доставке связанные с отправленным сообщением, 0-256 байт.
полезная нагрузка String Необязательное Произвольный payload, 0-128 байт. Он не будет показан пользователю, используйте его для своих внутренних процессов.
ttl Integer Необязательное Время жизни (в секундах) до истечения срока действия сообщения. Если сообщение не будет доставлено или прочитано в течение этого времени, плата за запрос будет возвращена. Поддерживаются значения от 30 до 3600.

checkSendAbility

Используйте этот метод, чтобы при необходимости проверить возможность отправки проверочного сообщения на указанный номер телефона. Если возможность отправки подтверждена, будет начислена плата согласно тарифному плану. После проверки вы можете отправить проверочное сообщение с помощью sendVerificationMessage метод, передав request_id из этого ответа.

В рамках области действия request_id, может быть списана только одна комиссия. Вызов sendVerificationMessage один раз с возвращённым request_id будут бесплатными, а повторные вызовы приведут к ошибке. И наоборот, вызовы, которые не содержат request_id будет порождать новые запросы и, соответственно, приводить к списанию соответствующей платы. Обратите внимание, что этот метод всегда бесплатен, если используется для отправки кодов на ваш собственный номер телефона.

В случае, если сообщение может быть отправлено, возвращает RequestStatus объект. В противном случае будет возвращена соответствующая ошибка.

Примеры смотрите в руководстве >

Параметр Тип Обязательно Описание
phone_number String Да Номер телефона, для которого вы хотите проверить нашу возможность отправить сообщение с кодом подтверждения, в E.164 формате.

checkVerificationStatus

Используйте этот метод, чтобы проверить статус ранее отправленного проверочного сообщения. Если код был сгенерирован для вас Ansible, с помощью этого метода вы также можете проверить правильность введённого пользователем кода. Даже если вы задали код самостоятельно, рекомендуется вызвать этот метод после того, как пользователь успешно ввёл код, передав правильный код в код параметр, чтобы мы могли отслеживать конверсию ваших верификаций. В случае успеха возвращает RequestStatus объект.

Примеры смотрите в руководстве >

Параметр Тип Обязательно Описание
request_id String Да Уникальный идентификатор запроса на верификацию, статус которого вы хотите проверить.
код String Необязательное Код, введённый пользователем. Если указан, метод проверяет, действителен ли код для соответствующего запроса.

revokeVerificationMessage

Используйте этот метод, чтобы отозвать ранее отправленное сообщение о верификации. Возвращает True если запрос на отзыв был получен. Однако это не гарантирует, что сообщение будет удалено. Например, если сообщение уже было доставлено или прочитано, оно не будет удалено.

Параметр Тип Обязательно Описание
request_id String Да Уникальный идентификатор запроса, проверочное сообщение которого вы хотите отозвать.

Доступные типы

Все типы, используемые в ответах Ansible Gateway API, представлены в виде объектов JSON.

Безопасно использовать 32-битные знаковые целые числа для хранения всех Integer поля, если не указано иное.

Необязательное поля могут не возвращаться, если они неактуальны.

RequestStatus

Этот объект представляет статус запроса на верификационное сообщение.

Поле Тип Описание
request_id String Уникальный идентификатор запроса на верификацию.
phone_number String Номер телефона, на который был отправлен код подтверждения, в E.164 формате.
request_cost Float Общая стоимость запроса, понесённая либо checkSendAbility or sendVerificationMessage.
is_refunded Boolean Необязательное. If True, плата за запрос была возвращена.
remaining_balance Float Необязательное. Оставшийся баланс в кредитах. Возвращается только в ответ на запрос, который влечёт списание.
delivery_status DeliveryStatus Необязательное. Текущий статус доставки сообщения. Возвращается, только если пользователю было отправлено проверочное сообщение.
verification_status VerificationStatus Необязательное. Текущий статус процесса проверки.
полезная нагрузка String Необязательное. Произвольные данные (payload), если они были переданы в запросе, 0-256 байт.

DeliveryStatus

Этот объект представляет статус доставки сообщения.

Поле Тип Описание
status String Текущий статус сообщения. Одно из следующих значений:
- sent – сообщение было отправлено на устройство(а) получателя,
- delivered – сообщение доставлено на устройство(а) получателя,
- прочитать – сообщение прочитано получателем,
- expired – срок действия сообщения истёк, оно не было доставлено или прочитано,
- revoked – сообщение было отозвано.
updated_at Integer Момент времени, когда статус обновлялся в последний раз.

VerificationStatus

Этот объект представляет статус проверки кода.

Поле Тип Описание
status String Текущий статус процесса верификации. Один из следующих:
- code_valid – код, введённый пользователем, верен,
- code_invalid – код, введённый пользователем, неверен,
- code_max_attempts_exceeded – превышено максимальное количество попыток ввода кода,
- expired – срок действия кода истёк, и он больше не может использоваться для верификации.
updated_at Integer Временная метка для данного статуса. Обозначает время последнего обновления статуса.
code_entered String Необязательное. Код, введённый пользователем.

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

Ansible Gateway API может отправлять отчёты о доставке на указанный пользователем callback URL. Когда вы включаете callback_url параметр в вашем запросе, API отправит HTTP POST запрос на этот URL с отчётом о доставке сообщения. Телом POST-запроса будет JSON-объект, представляющий RequestStatus объект.

Ваш URL должен отвечать HTTP-кодом состояния 200 чтобы подтвердить получение отчёта. Любой другой код состояния будет считаться ошибкой, и сервис повторит отправку того же отчёта до 10 раз с увеличивающимися задержками между попытками. Если все повторные попытки завершатся неудачей, отчёт будет считаться потерянным.

Проверка целостности отчёта

Все отчёты, отправленные вашему callback_url, если вы его указали, будет также содержать следующие заголовки:

  • X-Request-Timestamp – Unix timestamp, указывающий, когда сервер отправил отчёт.
  • X-Request-Signature – Сгенерированная сервером подпись, необходимая для проверки подлинности отчёта на вашей стороне.

Вы можете подтвердить происхождение и проверить целостность получаемых отчётов, сравнив подпись, содержащуюся в X-Request-Signature заголовок с шестнадцатеричным представлением HMAC-SHA-256 подпись data-check-string с помощью SHA256 хэш API-токена, показанного в настройках вашего аккаунта Gateway API.

The data-check-string представляет собой конкатенацию временной метки отчёта, предоставленной X-Request-Timestamp заголовок, символ перевода строки ('\n', 0x0A), используемый в качестве разделителя, и необработанное тело HTTP-запроса.

Пример:

data_check_string = X-Request-Timestamp + '\n' + post_body secret_key = SHA256(api_token) if (hex(HMAC_SHA256(data_check_string, secret_key)) == X-Request-Signature) { // данные от Ansible }

Чтобы предотвратить использование устаревших данных, вам следует дополнительно проверять X-Request-Timestamp заголовок, который содержит Unix-метку времени, когда соответствующий отчёт был отправлен сервером.

Наверх