Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Техническая и программная сторона VoIP

IqTek
October 04, 2019

Техническая и программная сторона VoIP

IqTek

October 04, 2019
Tweet

More Decks by IqTek

Other Decks in Programming

Transcript

  1. • Домашние телефоны R.I.P. • Роль в бизнесе растет ◦

    Эффективность ◦ Контроль • Связь трансформируется ◦ WebRTC - VoIP 2.0 ◦ FMC? ◦ Бесплатная связь? ◦ Речевые технологии? ◦ Контекстная реклама? ◦ Телепатия? Для чего? Для разработчика/devOps: • Похоже на Web • Не похоже на Web • Интересные задачи ◦ Алгоритмы ◦ Гибкие сервисы ◦ Множество возможностей ◦ Вы любите C/C++?
  2. Запись разговоров • Для контроля сотрудников • Разрешение конфликтов Важно:

    • Соблюдать закон • OrecX • Voipmonitor Коммерческие: • ЦРТ Технологии: • RTP Sniffer • Interface TAP
  3. • Provisioning / Фрод / Мониторинг • QoS / Метрики

    ◦ Jitter ◦ Loss ◦ Delay ◦ MOS / R-factor (G.107) • Виды тестов ◦ Активные (Zabbix, Cisco IP-SLA) ◦ Пассивные (Voipmonitor, Homer) Контроль качества / OAM Утилиты MOS: • PESQ / AQuA • POLQA / PVQA
  4. Contact-центры Задача: • Использовать оператора ◦ Различные каналы связи ◦

    Предиктивные алгоритмы • Различные каналы связи ◦ Чаты (сайт, telegram, whatsapp, ...) ◦ Email ◦ Входящие вызовы • Мотивировать сотрудника (WHM) Максимум отчетности для клиента: • Трекинг приложений • Машинное обучение
  5. Cloud-PBX • Растут как грибы • Множество плюсов ◦ Стоимость

    владения ◦ Рост функциональности • Минусы ◦ Высокие тарифы на связь ◦ Телефонное рабство ◦ Подключение к internet Примеры: • OnlinePBX • Youmagic • SipUni • Telphin • Яндекс.Телефония
  6. CRM/ERP интеграция Было: • Сделать звонок • Показать карточку •

    Показать историю вызовов Стало: • Показать расшифровку • Результат вызова • Зафиксировать пропущенные • Создать сделки • Назначить задачи • Выбрать менеджера • ...
  7. Call-tracking • Развитие идей web-аналитики • Задачи ◦ Понять эффективность

    рекламы ◦ Узнать больше о покупателе ◦ Уменьшить расходы • Wow-эффект ◦ Связывание вызова с web ◦ Готовы купить 5000 номеров? • Развитие идей web-аналитики • Задачи: ◦ Понять эффективность рекламы ◦ Узнать больше о покупателе ◦ Уменьшить расходы Сделай сам: • Asterisk • API для покупки номера
  8. WebRTC сервисы • Все хотят WebRTC • Браузеры готовы •

    Сращивание Web и VoIP Применения: • CRM • Contact-центры • IM (Skype, etc?) Только плюсы: • Не лицензируется • Простой стандартный Web API • Нет закрытых плагинов • Безопасно by-design • Не нужно устанавливать
  9. Другие применения Применение: • Передача видео • Речевая аналитика •

    IVR системы • Сопутствующие: • Provisioning • Аналитика и статистика
  10. OSS для проектов телефонии • Протоколы • Библиотеки ◦ Функции

    телефонии ◦ Интеграция • Инфраструктура ◦ Proxy / Registrar ◦ Media сервер ◦ Сервер приложений
  11. Протоколы и назначение Сигнализация: • SIP • H.323 • SKINNY

    • IAX2 • UNISTIM Голос: • (S)RTP • IAX2 Контроль: • RTCP Всегда в UDP
  12. OSS: Библиотеки и приложения С/C++: • libss7, libpri • SIP:

    sofiasip, pjsip • libh323 • unimrcp • spandsp Ruby: • adhearsion Pyhton: • starpy • api-py • pyst PHP: • phpagi • pami Приложения: • rtpproxy • cdrtool • sngrep • sipgrep • openvxi • sphinx • hylafax • sipp
  13. OSS: SIP Proxy Единый родитель: • Kamailio / SER ◦

    Эволюционное развитие ◦ Больше возможностей • OpenSIPS ◦ С 2.0 новая архитектура • sipXecs ◦ Часть sipXpbx • Сервер регистрации • Proxy-сервер • WebRTC2SIP • B2BUA
  14. OSS: Media/Application Servers • Asterisk ◦ (+) Объем документации ◦

    (+) Количество протоколов ◦ (+) Распространенность (85% OSS) ◦ (-) Проблемы роста • FreeSWITCH ◦ (+) Стабильность ◦ (+) Масштабируемость ◦ (+) Производительность ◦ (+) Поддержка ФП ◦ (-) Порог вхождения • Yate ◦ (+) Реализация H.323 ◦ (+) Реализация SS7 ◦ (+) Операторское решение ◦ (-) Документация ◦ (-) Единственный разработчик
  15. OSS: OAM Voipmonitor: • Запись разговоров • MOS G.107 •

    PESQ • REGISTER - трекинг • MESSAGES • Jitter / Loss calculation • Обнаружение аномалий • SIP / SCCP • Факсы в PDF Homer: • HEP3 Collector ◦ Asterisk ◦ Freeswitch ◦ Kamailio ◦ sipgrep etc. • RTCP-XR / RTCP • WebRTC • REST API • Производительность • Бесплатный GUI • Аналитика
  16. Commercial • Без коммерческого никуда • Коммерческие платформы ◦ Oktell

    ◦ СОРМ? • Речевые технологии ◦ ASR / TTS ◦ CPD (Sangoma Lyra) ◦ MOS / PESQ
  17. Возможности для интеграции Задачи интеграций: • Контроль вызова • Передача

    событий • Передача потоковых данных • Использование внешних источников данных
  18. Asterisk • AMI ◦ Ключ-значение ◦ Event, Action, Response ◦

    Требует proxy • ARI ◦ REST ◦ Низкоуровневый контроль • AGI / FastAGI • Lua / Dialplan ◦ Контроль вызова • ARI • Хранение настроек в БД
  19. Asterisk: ARI import ari client = ari.connect('http://localhost:8088/', 'hey', 'peekaboo') def

    on_dtmf(channel, event): digit = event['digit'] if digit == '#': channel.play(media='sound:goodbye') channel.continueInDialplan() elif digit == '*': channel.play(media='sound:asterisk-friend') else: channel.play(media='sound:digits/%s' % digit) def on_start(channel, event): channel.on_event('ChannelDtmfReceived', on_dtmf) channel.answer() channel.play(media='sound:hello-world') client.on_channel_event('StasisStart', on_start) # Run the WebSocket client.run(apps="hello")
  20. Asterisk: AMI Action: Originate ActionID: 12345 Channel: SIP/101 Context: outbound-allroutes

    Exten: 81112223333 Priority: 1 Callerid: «auto-dial» <81112223333> Response: Success ActionID: 12345 Message: Originate successfully queued Event: PeerStatus Privilege: system,all ChannelType: SIP Peer: SIP/101 PeerStatus: Registered Address: 192.168.1.25:5060
  21. Asterisk: Dialplan [macro-mixmonitor] exten => s,1,Set(RECORD_FILENAME=${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}-${CALLERID(num)}) same => n,MixMonitor(${RECORD_FILENAME}.wav,b) same

    => n,Dial(${ARG1},180,) [outbound_route1] exten => _9.,1,Macro(mixmonitor,PJSIP/sipprovider/${EXTEN:1}) [newyears] exten => s,1,Playback(happy-new-years) [default] include => newyears||||1|jan include => daytime|9:00-17:00|mon-fri include => nighttime
  22. • ESL (нативно - PHP, Ruby, Python, C ...) ◦

    Замена для AMI ◦ fs_cli - реализация ‘asterisk -r’ на ESL ◦ AGI - fs_ivrd • XML Dialplan • Модули: ◦ mod_xml_curl ◦ mod_plivo ◦ mod_amqp ◦ mod_event_zmq ◦ mod_dialplan_asterisk (sic!) FreeSWITCH
  23. FreeSWITCHL dialplan <context name="example"> <extension name="500"> <condition field="destination_number" expression="^500$"> <action

    application="bridge" data="user/500"/> </condition> </extension> <extension name="501"> <condition field="destination_number" expression="^501$"> <action application="bridge" data="user/501"/> <action application="answer"/> <action application="sleep" data="1000"/> <action application="bridge" data="loopback/app=voicemail:default ${domain_name} ${dialed_extension}"/> </condition> </extension> </context>
  24. FreeSWITCH: ESL require 'socket' require 'ESL' server = TCPServer.new(8084) loop

    do con = server.accept fd = con.to_i esl = ESL::ESLconnection.new(fd) esl.execute('answer') esl.execute('playback', '/usr/local/freeswitch/sounds/music/8000/suite-espanola-op-47-leyenda.wav') esl.execute('hangup') end
  25. Yate Native-API для написания модулей: • YAYPM - Python/Twisted •

    С++ API • PHP и JavaScript • rmanager (telnet-интерфейс)
  26. Готовые решения • FreePBX ◦ IP-PBX / Asterisk ◦ DB:

    MySQL ◦ AGI ◦ PHP • SipXECS ◦ IP-PBX / Freeswitch, sipXpbx ◦ C++, Java ◦ PostgreSQL • OpenBTS / YateBTS • Vicidial ◦ Call-center / Asterisk ◦ DB: MySQL ◦ PERL, PHP ◦ AGI, FastAGI, AMI • Kazoo ◦ Cloud PBX / Kamailio, Freeswitch ◦ DB: CouchDB ◦ Erlang ◦ mod_erlang ◦ RabbitMQ
  27. Литература • Гольдштейн (классика, академично) • PACKT publishing (FreeSwitch, Kamailio)

    • O’reily (Asterisk - FoT) В интернете: • Официальная документация • Asterisk-support.ru • voip-info.org • Группа freeswitch-ru • Telegram: AsteriskRu