First blog post
Мало известный за пределами телеком-тусовки факт: когда вы звоните куда-нибудь со своего телефона, ваш номер, который отображается для входящего звонка — это просто произвольная текстовая строка, которую подставил ваш оператор сотовой связи. И если между двумя устройствами есть что-нибудь интересное, к примеру, машина с Asterisk или облако с Voximplant, то эту строку можно поменять на любую другую. Ситуация, когда при звонке вместо номера звонящего человека «рисуется» совсем другой номер называется маскировка телеком-данных (Phone Number Masking). И этот прием широко используется для решения ряда интересных задач. Читайте о них под катом.
Такси и другие Uber-like решения
Давать водителю настоящий номер клиента — не самая лучшая идея. Потом водитель может позвонить не по делу, — вот это всё. Подмена номера работает так: как только водитель принял заказ, это становится известно backend’у сервиса такси. И если водителю нужно позвонить клиенту, то вместо этого он звонит на специальный сервисный номер. Звонок приходит в облако Voximplant, где из JavaScript делается HTTP-запрос к backend и получает информацию о заказе. После чего облако звонит клиенту, и, как только он берет трубку, соединяет его со входящим звонком от водителя. Если вам интересны подробности, почитайте, как это реализовано у Wheely.
Такой способ позволяет водителю и клиенту не знать номера друг друга: все звонки идут через облако. В исходящем звонке до клиента Caller ID устанавливается в номер контакт-центра. Благодаря этому, если клиент после поездки позвонит на “номер водителя”, его встретит голосовое меню и предложит связаться либо с водителем, либо с оператором контакт-центра. И если водитель не работает, то клиенту можно предложить что сервис сам ему перезвонит когда водитель выйдет на работу. Все эти функции можно реализовать в несколько строчек JavaScript-кода:
Net.httpRequest(url, (e) => { // запрашиваем свой бэкенд if (e.code === 200) { // бэкенд случаем не лежит? const resp = e.text ? JSON.parse(e.text) : {}; if (resp.numberToCall) { // получили номер телефона водителя // Собственно, маскировка номера: звоним от лица колл центра const out = VoxEngine.callPSTN(resp.numberToCall, ACCESS_NUMBER); out.addEventListener(CallEvents.Connected) { // Дозвонились до водителя: синтезируем что-нибудь, // соединяем с клиентом и так далее }); } }});
view rawscenario.js hosted with ❤ by GitHub
Доставка и курьерские службы
Похоже на такси сервисы, но со своими нюансами. Очень часто звонки делают не через сотовую связь, а с помощью приложений: курьеры звонят для согласования логистики, а интернет сейчас сильно дешевле даже оптовых предложений на сотовую связь для компаний. Выглядит это следующим образом: у курьера есть веб/android/ios-приложение с кнопкой «связаться с заказчиком». При нажатии на нее соответствующий SDK устанавливает TCP/WebSocket подключение к облаку Voximplant, сигнализирует звонок и передает голос по протоколу (S)RTP. При звонке обратно курьеру используется механизм Push-уведомлений, так что даже если приложение закрыто, это не помешает «достучаться» до службы доставки.
