Открыть список
Как стать автором
Обновить

Замена Action URL & URI в SIP-телефонах или управление via websockets?

МессенджерыAsteriskРазработка систем связиИнтернет вещей
SIP-телефоны. Компьютеры с трубкой. По идее с ними очень многое можно что делать, а их используют только для звонков :-)

Недавно был на конференции АстерКонф, и там вендоры рассказывали о своих телефонах, не будем никого выделять, все хороши, где-то лучше, где-то дешевле, по сути исполняют одно и то же.

Кто-то из вендоров улучшает качество звука, кто-то прикручивает планшет с андроидом, кто-то пробует добавлять какие-то приложения. И все для того, чтобы мы устанавливали эти телефоны на рабочие столы.

И может быть телефоны хорошие кандидаты на роль пульта в рамках мира IoT: нажал на кнопку — получил результат. И, на мой скромный взгляд, не хватает простого способа подключать телефоны к своему «Управлятору». В рамках этой статьи я хочу показать как это могло бы выглядеть по-простому на схеме и видео-демонстрации.

А вы в комментариях поделитесь, пожалуйста, что может быть где-то уже подобное реализовано или дополните своими предложениями и мыслями.

У телефонов есть интерфейсы Action URL и Action URI.

Action URL позволяет нам отправлять разные события на какие-либо url. В url мы можем указать предустановленные переменные, которые будут при звонке заполнены реальными данными.

Так, например, выглядит настройка моего телефона.



онлайн-конструктор Action URL для Yealink'а

Action URI позволяет нам принимать команды на IP-адрес телефона, и телефон может совершать вызовы, отвечать вызовы по команде, добавлять громкость, перезагружаться и т.д. на видео ниже можно посмотреть как это все происходит. Мы должны указать адрес, с которого будут приходить команды.



Все настраивается, в чем проблема, бро?

Это достаточно функциональные интерфейсы, но… они достаточно сложно интегрируются. Т.е. нам надо совершить 100500 действий чтобы это заработало. Или заполнить 100 полей в настройках аппарата (сами на скрине видите), или заморочиться с провижном и прописать какие-то шаблоны настройки.

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

Проблема ли это? Надо ли кому-то управлять телефоном абонента? Самому абоненту? Со своего десктопа, лаптопа или смартфона? Технической поддержке? Как внутренней, так и внешней, например, провайдера виртуальной АТС? Нужно ли иметь доступ к телефону иначе, чем просто SIP? Интегрировать телефон с приложениями, минуя IP-АТС?

Не могу ответить однозначно, есть минусы и плюсы. И для реализации плюсов хотелось бы иметь возможность быстро подключить Action URL и Action URI к своему «Управлятору». Управлятором я называю сервер, с которого я могу централизованно видеть список телефонов, их состояние, и с любого из них совершить какое-то доступное действие.

Давайте посмотрим схему.



Представьте, что у нас в телефоне есть websockets-клиент.

Тогда нам в телефоне необходимо указать только сетевой адрес «Управлятора» и наш телефон к нему подключится. При подключении телефон отправит свой id, имя, mac. Это нам позволит сопоставить его с нашим списком абонентов АТС, например.

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

А как дела с безопасностью? В целом, SIP-телефоны могут работать за NAT, им не нужен внешний адрес. Но если вы выставите порт веб-сервера телефона в сеть Action URI (где еще админка, кстати, работает) — ждите неприятных сюрпризов.

А вот если телефон будет подключаться к «Управлятору» по websockets, то это его инициатива и его право, может и отключиться, и если вы к удаленному серверу из-за NAT подключитесь, то будет похоже на браузерное соединение.

Хватит слов, ближе к делу. Я написал небольшой клиент телефона (он по моей идее должен находиться в телефоне), который подключается к серверу по вебсокету. Также к этому серверу подключается браузер, который может принимать сообщения от телефона и посылать туда команды.

Клиент всего лишь обертка для Action URL и Action URI, который работает с телефоном по привычным ему интерфейсам, а все данные оборачивает в вебсокет. В вебсокетах у нас ходят обычные JSON сообщения, с которыми может работать любой веб-разработчик.

Посмотрите видео, все достаточно просто. Весь код достаточно минимальный, просто чтобы показать концепцию.


Что происходит на видео?

  1. запускаем сервер, который принимает соединения по websockets,
  2. запускаем клиент (который работает по Action URL & URI с телефоном)
  3. клиент подключается к серверу
  4. запускаем веб-сервер (со страничкой, где код для подключения из браузера по websockets)
  5. открываем в браузере страничку, страница подключается к серверу
  6. мы со странички отправляем запрос на информацию
  7. запрос проходит по всей цепочке до телефона и возвращается информация о линиях телефона
  8. также мы можем отправлять разные команды
  9. в том числе команду совершить звонок
  10. а затем команду положить трубку
  11. все данные видны в логе на странице, а также в консоли работающего сервера и клиента телефона
  12. затем видно как реагирует на команды со страницы телефон

Таким образом подключить телефон к Управлятору — достаточно одного лишь адреса. А сообщения из вебсокетов в иное представление и обратно может любой разработчик. В моем случае к Управлятору подключается просто страничка. В общем случае это может быть более сложная система, которая будет обрабатывать команды и отправлять сообщения на телефон.

Наличие простого способа подключения может быть удобным, а значит более простым в освоении. Через этот интерфейс, по идее, можно присылать и новые конфигурации, и дополнительные сообщения, делая таким образом телефон легко интегрируемым в какую-либо инфраструктуру.

В общем, это всего лишь мои размышления по итогу просмотра новинок на Астерконфе. Буду рад увидеть в комментариях за и против. И может быть кто-то из производителей увидит в этом рациональное зерно и внедрит фишку :-)

Проект на гитхабе
Теги:sipvoip-телефонwebsocketsnodejs
Хабы: Мессенджеры Asterisk Разработка систем связи Интернет вещей
Всего голосов 5: ↑5 и ↓0 +5
Просмотры2.9K

Комментарии 13

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Похожие публикации

Лучшие публикации за сутки