First blog post

Nikolay S.
Jul 24, 2017 · 2 min read

Мало известный за пределами телеком-тусовки факт: когда вы звоните куда-нибудь со своего телефона, ваш номер, который отображается для входящего звонка — это просто произвольная текстовая строка, которую подставил ваш оператор сотовой связи. И если между двумя устройствами есть что-нибудь интересное, к примеру, машина с 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-уведомлений, так что даже если приложение закрыто, это не помешает «достучаться» до службы доставки.

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade