Исходящий звонок
Исходящий звонок на динамический номер
Работает это так - берем из большого пула (например, 499-678-XXXX) номер и просим пользователя совершить на него бесплатный звонок в течение ограниченного времени (например, в течении 2 минут). И если мы получили от пользователя звонок в ожидаемый отрезок времени на указанный номер, то вуаля 🤩 - мы подтвердили владение сотовым номером.
Есть два сценария:
-
Изначально мы не знаем, какой сотовый номер у пользователя.
И это замечательный способ "привязки" сотового номера к публичной услуге. Например, он активно используется большим количеством операторов "сервиса идентификации" публичного WiFi.
-
Мы знаем, какой сотовый номер у пользователя.
А это вариант для дополнительной двухфакторной авторизации.
Для пользователя это бесплатно
Когда пользователь совершает исходящий звонок на предложенный номер, CALL-ID "не поднимает трубку", а сразу сбрасывает звонок. Поэтому для пользователя он всегда бесплатный.
API
Swagger: https://out.call-id.ru/docs
Redoc: https://out.call-id.ru/redoc
Примеры использования
Идентификация пользователя в публичной гостевой сети WiFi
Рассмотрим пример - мы хотим идентифицировать пользователя в публичной (открытой) гостевой сети WiFi.
По закону РФ мы должны зафиксировать связку: MAC-адрес устройства клиента - его сотовый номер, и только потом открыть доступ к интернету.
Алгоритм следующий:
Получим городской номер и "попросим" пользователя сделать на него звонок.
Для этого передадим сервису "Исходящий звонок на динамический номер":
-
ключ авторизации
api_key(можно воспользоваться публичным ключом для тестирования) -
callback_url- куда сообщить с какого номера пользователь совершит звонок -
lease_number_ttl_sec- сколько секунд ожидать звонка от пользователя (по умолчанию 2 минуты, но не более 3 минут) -
custom_filed_1-custom_filed_4- необязательные текстовые поля
(в данном примере мы фиксируем MAC-адрес пользователя, ID партнера нашего сервиса, ID заведения в котором развернута гостевая сеть и ID запроса)
В ответ получим городской номер, на который попросим пользователя сделать исходящий звонок:
{
"success": true
"number_b": "74996783127",
}
Итак, если пользователь совершит звонок на number_b
в течение lease_number_ttl_sec секунд, то
сервис отправит на callback_url номер, с которого звонил пользователь (number_a),
и исходные данные запроса:
{
"number_a": "79104901234",
"number_b": "74996783142",
"lease_number_ttl_sec": 120,
"expected_number_a": null,
"custom_filed_1": "af:2f:f4:10:d0:e0",
"custom_filed_2": "partner=3445",
"custom_filed_3": "place=5528",
"custom_filed_4": "reuqest_id=1122"
}
Вуаля! 😜 Можно привязать MAC-адрес пользователя к его сотовому номеру и выпустить его в интернет.
Примеры живые!
Кстати, приведенные CURL-примеры - "живые" 🤩 ! В них используется публичный ключ для тестирования.
Дергайте "ручку", получайте номер, звоните не него и ловите callback ... Он тоже "живой" - в примерах он отсылается на тествый сервис test.call-id.ru/docs. И то, что "прилетит" на него после набора number_b, можно посмотреть здесь:
test.call-id.ru/callback/read (колбэки хранятся 10 минут).
Дополнительная двухфакторная авторизация
Ввводные примера следующие:
-
мы знаем сотовый номер клиента.
-
помимо ввода логина и пароля, мы ходим подтвердить личность пользователя звонком с его телефона.
Отправляем те же параметры, что и в предыдущем примере,
но добавляем параметр expected_number_a,
то есть ожидаем звонка с конкретного номера
В ответ, как и в предыдущем примере, получим городской номер, на который попросим пользователя сделать исходящий звонок:
{
"success": true
"number_b": "74996783127",
}
При звонке пользователя на number_b ответ на callback_url придет
только в случае совпадения expected_number_a с number_a, и
если пользователь уложится в отведенные lease_number_ttl_sec секунд:
{
"number_a": "79104900123",
"number_b": "74996783142",
"lease_number_ttl_sec": 120,
"expected_number_a": 79104900123,
"custom_filed_1": "",
"custom_filed_2": "",
"custom_filed_3": "",
"custom_filed_4": ""
}
Важно, понимать, что callback не придет (совсем), если:
-
пользователь не уложился в отведенное ему время (
lease_number_ttl_sec) -
ожидаемый номер
expected_number_aне соответствует номеру-А c которого пользователем был произведен звонок
Исходящий звонок на номер 8800
Есть категория "мнительных" пользователей, которые сомневаются в бесплатности исходящего звонка. Таким пользователям можно предложить звонок на заведомо бесплатный номер TOLL FREE 8800. Но в этом случае пользователю придется заранее сообщить свой номер.
API
Swagger: https://8800-out.call-id.ru/docs
Redoc: https://8800-out.call-id.ru/redoc
Пример использования
Возьмем пример, аналогичный рассмотренному ранее: идентификация пользователя в публичной гостевой сети WiFi.
Все то же, что и ранее, только теперь мы просим "мнительного" пользователя 🙀
заранее ввести свой номер expected_number_a. Потом запрашиваем у сервиса номер 8800,
на который просим пользователя совершить звонок:
📞
{
"success": true
"number_b": "78005113123",
}
🔄
{
"number_a": "79104900123",
"number_b": "78005113123",
"lease_number_ttl_sec": 180,
"expected_number_a": "79104901019",
"custom_filed_1": "af:2f:f4:10:d0:e0",
"custom_filed_2": "partner=3445",
"custom_filed_3": "place=5528",
"custom_filed_4": "reuqest_id=1122"
}