javascript

Как повторить сервис anyroom.io в несколько строк JS и без бэкенда

  • среда, 5 июля 2017 г. в 08:10:52
https://habrahabr.ru/company/Voximplant/blog/332206/
  • Разработка мобильных приложений
  • Разработка веб-сайтов
  • Программирование
  • JavaScript
  • Блог компании Voximplant




Месяц назад на Hacker News в топ вышел пост про сервис AnyRoom: простенький бэкенд на Go, который позволяет создавать телефонные конференции. Рейтинг больше ста, обсуждения в комментах, Исходный код на github, подписки по 50 долларов в месяц — в общем, всё как у взрослых. После первого удивления «неужели это кому-то нужно?!?» я немного погуглил «голосовая конференция без регистраций и sms недорого», подивился дороговизне приложений и понял что таки да, нужно. А на Voximplant такую штуку можно собрать за полчаса и десяток строк JavaScript-кода. Кто хочет создать стартап и попиариться на Hacker News? Под катом рассказываю, как.

Как работает AnyRoom?


На Go и Twilio. С точки зрения пользователя это выглядит следующим образом: организатор конференции рассылает участникам номер телефона (он один на весь сервис) и несколько цифр номера конференции. Все участники звонят, вводят номер конференции — и могут общаться друг с другом. Как скайп, только работает. Под капотом бэкенд на Go общается с Twilio HTTP-запросами и передает XML'ки, объясняющие, что делать со звонками.

Как это повторить на Voximplant?


У нашего облака есть «изюминка». Логика работы со звонками задается JavaScript-кодом, который выполняется параллельно со звонком. Нет задержек общения с бэкендом, да и сам бэкенд для большинства сценариев не нужен: JavaScript можно написать в нашем Web IDE и отладить в Web Debugger (да-да, вы звоните на номер или облако само звонит, куда скажете, после чего можно прямо в браузере пошагово ходить по JavaScript и смотреть, что происходит со звонками). А можно загрузить по HTTP API, например из GitLab в рамках Continuous Integration.

Чтобы повторить AnyRoom в минимальной версии, достаточно привязать к номеру телефона JavaScript-сценарий, который сделает следующее:

  • Примет звонок (специфика телефонии, пока не сделано answer, звонок не тарифицируется и можно, например, играть в него мелодию ожидания. А вот получить из него голосовой поток никто не даст).
  • Синтезирует приветствие и предлагает ввести код конференции.
  • Считывает цифры, которые пользователь нажимает на клавиатуре (она называются DTMF или «донабор»).
  • По нажатию на что-нибудь специальное, например, решетку, отправляет пользователя в конференцию с именем, состоящим из введенных цифр.

Такая реализация будет тем самым MVP: пользоваться уже можно, но есть большой простор для улучшений. Что будет, если два пользователя хотят разные конференции, но придумают один и тот же номер, например «111»? Веб-интерфейс с генератором номеров конференций не помешает. А реализуется MVP вот таким сценарием, который можно привязать как к арендованному на Voximplant номеру (пишите в личку, я пополню баланс, чтобы вы могли поэкспериментировать) либо к отладочному номеру в Готем-Сити, аренда которого стоит один цент в месяц и позволяет тестировать входящие звонки без трат на номер: