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

2._Разработка_с_Asterisk.pdf

IqTek
October 02, 2019

 2._Разработка_с_Asterisk.pdf

IqTek

October 02, 2019
Tweet

More Decks by IqTek

Other Decks in Programming

Transcript

  1. Asterisk - основа для сервисов ▪ Интеграции с CRM ОАТС

    ▪ Генерация отчетности ▪ Облачные АТС ▪ Голосовые роботы Возможные применения: ▪ Индивидуальные голосовые сервисы ▪ Облачные сервисы
  2. Интеграция с CRM ▪ Click2Call ◦ AMI, AJAM, CLI, ARI,

    Call-файлы, ... ▪ Статистика ◦ CDR, CEL, queue_log, диалплан ▪ Доступ к записям разговора ◦ Monitor, MixMonitor ▪ WebRTC ◦ Диалплан, *AGI, ARI ▪ Пропущенные вызовы ◦ Диалплан, ARI ▪ Вызов ответственного ◦ Диалплан, AGI ▪ Карточка вызова ◦ CLI, AMI Основные функции:
  3. Диалплан ▪ Приложения() ▪ ФУНКЦИИ() ▪ ${Переменные} ▪ exten =>

    exten,pri,app ▪ Не язык программирования ▪ Вагон Legacy ▪ Нужно знать: да Основные компоненты:
  4. Переменные ▪ ∞ переменных (1000+) Неожиданные: ▪ ~ODBCFIELDS~ ▪ UNICASTRTP_LOCAL_ADDRESS

    ▪ RTSTOREID ▪ DAILSTATUS ▪ ANSWEREDTIME ▪ BRIDGEPVTCALLID ▪ TRANSFER_CONTEXT Можно узнать через DumpChan() или CLI Множество используемых переменных:
  5. Функции незаменимы... ▪ 160+ функций (func_*.so) Неожиданные: ▪ MASTER_CHANNEL() ▪

    PERIODIC_HOOK() ▪ HOLD_INTERCEPT() ▪ CHANNEL() ▪ GROUP() ▪ PJSIP_HEADER() ▪ DEVICE_STATE() ▪ CDR() И их много: Незаменимые:
  6. … и бесполезны ▪ CURL() ▪ MATH() ▪ SHELL() ▪

    VALID_EXTEN() vs DIALPLAN_EXISTS()? ▪ MUTEX()/TRYLOCK()? ▪ ISNULL() или EXISTS()? ▪ INC() ▪ DIALGROUP() Странные: Стоит избегать:
  7. Приложения ▪ 160+ приложений (app_*.so) Неожиданные: ▪ Set() vs SET()?

    ▪ RetryDial() ▪ RaiseException() ▪ Dial() ▪ Hangup() ▪ GoSub() ▪ Queue() ▪ Read() Обрабатывают фреймы и меняют состояние: Незаменимые:
  8. Вывод ▪ Используем для прототипирования ▪ Знаем функции и приложения

    работающие со внутренними данными ▪ Если используем все больше функций языка программирования => повод перейти на использование lua, FastAgi, AsyncAGI, ARI ▪ Не использовать ael, хорош для демонстрации логики, но лучше использовать lua ▪ Позволяет расширять готовые АТС FreePBX
  9. Диалплан на lua ▪ Язык программирования ▪ extended поддержка модуля

    ▪ локальный запуск кода ["_14XXX"] = ivr; ["_21XX"] = ivr; ["_4595"] = ivr; function ivr(context,ext) app.read("IVR", "demo", 1, nil, 2, 3); local opt= channel["IVR"]:get(); if opt == '1' then app.queue('1234'); elseif opt == '2' then app.dial('SIP/101'); else app.hangup(); end; end; Все бы хорошо...
  10. Виды AGI (Asterisk Gateway Interface) ▪ AGI() - работа по

    stdin/stdout ▪ DeadAGI() - R.I.P. ▪ agi:// - AGI по tcp ▪ EAGI() - AGI с передачей аудио ▪ agi:async - AGI через AMI ▪ AGI() - только в целях обучения и прототипирования ▪ EAGI() - нет ▪ FastAGI() - можно ▪ agi:async - можно AGI - интерфейс команда/ответ
  11. AMI (Asterisk Management Interface) ▪ AMI - tcp подключение ▪

    AJAM - http запросы ▪ telnet ▪ Сложно масштабировать ▪ Неудобная фильтрация событий ▪ По дизайну не предполагал большие нагрузки Action/Response/Event интерфейс
  12. ARI (Asterisk Restful Interface) ▪ RESTfull API ▪ Websocket ▪

    Работает с примитивами каналов и бриджей, ничего лишнего (пока) Состоит из двух частей ▪ Стандартные web API ▪ Можно балансировать ▪ Можно написать собственные приложения ▪ Развивается
  13. Вывод ▪ Как альтернатива диалплану - pbx_lua ▪ Для масштабируемых

    приложений - ARI или agi:async+AMI ▪ Для click2call - подойдет и AJAM ▪ Все виды сетевых интерфейсов не должны быть доступны пользователю или веб- приложению
  14. ODBC ▪ Asterisk Realtime Architecture ▪ func_odbc ▪ cdr_adaptive_odbc ▪

    cel_odbc ▪ Использовать что-либо кроме ODBC - крайне не рекомендуется ▪ Использует пул подключений к БД ▪ Адаптивен к структуре БД Основные применения:
  15. ARA (Asterisk Realtime Architecture) ▪ CURL ▪ ODBC ▪ LDAP

    ▪ Sorcery (только chan_pjsip) ▪ Рекомендуется использовать ODBC (не использовать mysql и pgsql модули) ▪ CURL позволяет хранить минимум конфигурации на сервере [settings] voicemail = curl,http://myserver.com:8000/voicemail sippeers = curl,http://myserver.com:8000/sippeers sip.conf => curl,http://myserver.com:8000/conf/sip Основные компоненты:
  16. CDR и CEL ▪ CDR() / CDR_PROP() ▪ custom ▪

    odbc ▪ beanstalk ▪ manager ▪ radius queue_log ▪ Функционально схож с CDR ▪ Пишет приложение Queue() ▪ Используя настройки logger.conf ▪ Через ARA - пишется в БД
  17. Вывод ▪ ODBC поддерживаемый и стабильный интерфейс для логирования ▪

    CDR можно записывать самостоятельно в зависимости от логики из диалплан
  18. Доступ к разговору ▪ Monitor() - устарел ▪ MixMonitor() -

    запись ▪ Внешние сниферы Данные методы не позволяют без доработок получить media в реальном времени ▪ Speech API (UniMRCP) ▪ ChanSpy() ▪ ARI /snoop ▪ ARI /externalMedia Голосовые боты и перспективные применения
  19. Разное ▪ PJSIP: конфигурация через Sorcery ◦ ARI (In-memory) ◦

    AstDB ◦ ARA ◦ Текст (pjsip.conf) ▪ PJSIP_HEADERS() ▪ PJSIP: синхронизация состояний ▪ API Календарей ▪ Call-файлы ▪ SNMP ▪ StatsD()
  20. .so модули ▪ Новый RTP стэк () ▪ Модуль PJSIP

    ▪ Failover RTP ▪ и т.п. ▪ Знать модули для базового тюнинга ▪ Отключать ненужные ▪ Избегать extended и community Примеры задач: Стараться:
  21. Отладка и тестирование ▪ gdb ▪ testsuite ▪ sipp ▪

    sngrep ▪ Verbose() и Debug() ▪ DumpChan() ▪ NoOp() ▪ -rvvvvv ▪ AMI UserEvents Специфичные инструменты отладки