Askozia — редактор маршрутов вызовов

    Как я писал ранее, мы в своем офисе используем уже около года IP ATC Askozia на базе Asterisk.
    Askozia — это коммерческий продукт, цена на который равна стоимости одного IP телефона.

    Сегодня я хочу рассказать подробнее о редакторе маршрутов вызовов, который входит в расширенную версию Askozia.
    Редактор позволяет создавать неограниченное количество диалпланов Asterisk, используя простой визуальный конструктор. Для построения маршрутов используется более 60 отдельных модулей. Каждый модуль транслируется в одну или несколько команд диалплана Asterisk, а сам маршрут формирует необходимые конфигурационные файлы, которые используются ядром телефонной системы для обработки вызовов.



    Каждому маршруту назначается отдельный внутренний номер, а сама панель администрирования выглядит вот так:



    Давайте подробнее рассмотрим несколько типовых шаблонов и тот код, который они генерируют:

    Простой пример голосового меню



    При входящем звонке система снимает трубку, проигрывает приветствие, которое можно указать в специальном блоке или сразу записать с помощью телефона, после чего ожидает 5 секунд для набора добавочного номера. Далее, в зависимости от указанного номера, происходит вызов того или иного абонента. Если ввели неправильный номер, то сработает блок с буквой i, если в течение 5-ти секунд ничего не набрали, то сработает блок t. Соответственно, в двух последних случаях абонент услышит сигнал «занято».

    Этот маршрут вызова создает следующий диалплан Asterisk:
    Развернуть код
    [CALLFLOW-1401202953509d662fafd39]
    ; Askozia call flow - CALLFLOW-1401202953509d662fafd39
    exten => CALLFLOW-START,1(module-1),Answer(0)
    exten => CALLFLOW-START,n(module-2),Background(/storage/usbdisk1/askoziapbx/media/sounds/cfe/cfe_uploaded_file_1358338827)
    exten => CALLFLOW-START,n,WaitExten(5)
    exten => 1,1(module-3),Goto(CALLFLOW-1401202953509d662fafd39-SUB-3,submodule,1)
    exten => 2,1(module-4),Goto(CALLFLOW-1401202953509d662fafd39-SUB-4,submodule,1)
    exten => i,1(module-5),Goto(CALLFLOW-1401202953509d662fafd39-SUB-5,submodule,1)
    exten => t,1(module-12),Goto(CALLFLOW-1401202953509d662fafd39-SUB-12,submodule,1)
    
    [CALLFLOW-1401202953509d662fafd39-SUB-3]
    exten => submodule,1(module-6),Dial(SIP/101,10,go)
    exten => submodule,n(module-9),Hangup()
    
    [CALLFLOW-1401202953509d662fafd39-SUB-4]
    exten => submodule,1(module-7),Dial(SIP/102,10,go)
    exten => submodule,n(module-10),Hangup()
    
    [CALLFLOW-1401202953509d662fafd39-SUB-5]
    exten => submodule,1(module-8),Busy(3)
    exten => submodule,n(module-11),Hangup()
    
    [CALLFLOW-1401202953509d662fafd39-SUB-12]
    exten => submodule,1(module-13),Busy(3)
    exten => submodule,n(module-14),Hangup()
    



    Пример простой очереди вызовов с 3-мя статическими агентами



    Данный блок позволяет принимать большее количество звонков. Если все агенты будут заняты разговором, то абонент ставится на удержание в очередь и ожидает пока кто-либо из агентов освободится и сможет обработать звонок, если в течение 600 секунд ни один из агентов не смог обработать вызов, абонент услышит сигнал «занято».

    Этот маршрут вызова создает следующий диалплан Asterisk:
    Развернуть код
    [CALLFLOW-1401202953509d662fafd39]
    ; Askozia call flow - CALLFLOW-1401202953509d662fafd39
    exten => CALLFLOW-START,1(module-1),Answer(0)
    exten => CALLFLOW-START,n,QueueLog(CALLFLOW-1401202953509d662fafd39-QUEUE-2,${UNIQUEID},NONE,CALLERID,${CALLERID(all)},,${CUSTOM1},${CUSTOM2},${CUSTOM3})
    exten => CALLFLOW-START,n(module-2),Queue(CALLFLOW-1401202953509d662fafd39-QUEUE-2,Ct,,,600)
    exten => CALLFLOW-START,n,QueueLog(CALLFLOW-1401202953509d662fafd39-QUEUE-2,${UNIQUEID},NONE,QUEUETIMEOUT,${CDR(duration)},${CDR(billsec)})
    exten => CALLFLOW-START,n(module-8),Busy(3)
    exten => CALLFLOW-START,n(module-9),Hangup()
    



    Настройка очереди:
    Развернуть код
    [CALLFLOW-1401202953509d662fafd39-QUEUE-2]
    music = default
    strategy=ringall
    timeout=10
    wrapuptime=30
    ringinuse=yes
    periodic-announce-frequency = 20
    announce-holdtime=no
    joinempty=no
    leavewhenempty=no
    member => SIP/101
    member => SIP/102
    member => SIP/103
    



    Запись и отправка разговора на электронную почту




    Пример позволяет записывать все разговоры с внутренним номером и отправлять их на электронную почту указанную в настройках модуля отправки.

    Этот маршрут вызова создает следующий диалплан Asterisk:
    Развернуть код
    
    [CALLFLOW-1401202953509d662fafd39]
    ; Askozia call flow - CALLFLOW-1401202953509d662fafd39
    exten => CALLFLOW-START,1(module-1),Answer(0)
    exten => CALLFLOW-START,n(module-2),Monitor(wav,/tmp/monitor-${UNIQUEID},m)
    exten => CALLFLOW-START,n(module-3),Dial(SIP/101,10,go)
    exten => CALLFLOW-START,n(module-4),StopMonitor()
    exten => CALLFLOW-START,n,System(sleep 1)
    exten => CALLFLOW-START,n,Set(MONITOR_FILENAME=/tmp/monitor-${UNIQUEID})
    exten => CALLFLOW-START,n,System(echo "Date: \`date\`" > /tmp/email-${UNIQUEID})
    exten => CALLFLOW-START,n,System(echo "To: rec@mail.ru" >> /tmp/email-${UNIQUEID})
    exten => CALLFLOW-START,n,System(echo "Subject: AskoziaPBX Notification: Monitored call, Caller: ${CALLERID(all)}" >> /tmp/email-${UNIQUEID})
    exten => CALLFLOW-START,n,System(echo "From: AskoziaPBX call flow <info@miko.ru>" >> /tmp/email-${UNIQUEID})
    exten => CALLFLOW-START,n,System(echo "X-Mailer: AskoziaPBX" >> /tmp/email-${UNIQUEID})
    exten => CALLFLOW-START,n,System(echo "Content-Type: multipart/mixed\; boundary=\"EMAIL-44c364e83c7e7fd0bb50b238094a1780\"\n" >> /tmp/email-${UNIQUEID})
    exten => CALLFLOW-START,n,System(echo "--EMAIL-44c364e83c7e7fd0bb50b238094a1780" >> /tmp/email-${UNIQUEID})
    exten => CALLFLOW-START,n,System(echo "Content-Type: text/plain\; format=flowed\; charset=UTF-8" >> /tmp/email-${UNIQUEID})
    exten => CALLFLOW-START,n,System(echo "Content-Disposition: inline" >> /tmp/email-${UNIQUEID})
    exten => CALLFLOW-START,n,System(echo "Content-Transfer-Encoding: 8bit\n" >> /tmp/email-${UNIQUEID})
    exten => CALLFLOW-START,n,System(echo "Your Records" >> /tmp/email-${UNIQUEID})
    exten => CALLFLOW-START,n,System(echo "--EMAIL-44c364e83c7e7fd0bb50b238094a1780" >> /tmp/email-${UNIQUEID})
    exten => CALLFLOW-START,n,System(echo "Content-Type: audio/x-wav\; name=\"monitor-${UNIQUEID}.wav\"" >> /tmp/email-${UNIQUEID})
    exten => CALLFLOW-START,n,System(echo "Content-Transfer-Encoding: base64" >> /tmp/email-${UNIQUEID})
    exten => CALLFLOW-START,n,System(echo "Content-Disposition: attachment\; filename=\"monitor-${UNIQUEID}.wav\"" >> /tmp/email-${UNIQUEID})
    exten => CALLFLOW-START,n,System(echo "" >> /tmp/email-${UNIQUEID})
    exten => CALLFLOW-START,n,System(uuencode -m /tmp/monitor-${UNIQUEID}.wav monitor-${UNIQUEID}.wav >> /tmp/email-attachment-${UNIQUEID})
    exten => CALLFLOW-START,n,System(cat /tmp/email-attachment-${UNIQUEID} | tail +2 >> /tmp/email-${UNIQUEID})
    exten => CALLFLOW-START,n,System(echo "--EMAIL-44c364e83c7e7fd0bb50b238094a1780--" >> /tmp/email-${UNIQUEID})
    exten => CALLFLOW-START,n,System(/usr/bin/msmtp -C /etc/msmtp.conf -t < /tmp/email-${UNIQUEID})
    exten => CALLFLOW-START,n,System(rm -f /tmp/email-${UNIQUEID})
    exten => CALLFLOW-START,n,System(rm -f /tmp/email-attachment-${UNIQUEID})
    exten => CALLFLOW-START,n,System(rm -f /tmp/.monitor-${UNIQUEID}.wav)
    exten => CALLFLOW-START,n(module-5),Hangup()
    



    Маршрутизация по расписанию


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


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

    Этот маршрут вызова создает следующий диалплан Asterisk:
    Развернуть код
    [CALLFLOW-1401202953509d662fafd39]
    ; Askozia call flow - CALLFLOW-1401202953509d662fafd39
    exten => CALLFLOW-START,1(module-2),Answer(0)
    exten => CALLFLOW-START,n(module-6),NoOp(TimeSwitch module: 2))
    exten => CALLFLOW-START,n,GotoIfTime(09:00-16:00,mon-fri,*,*?module-8)
    exten => CALLFLOW-START,n,Goto(module-9)
    exten => CALLFLOW-START,n(module-8),Playback(/storage/usbdisk1/askoziapbx/media/sounds/cfe/speech_8_CALLFLOW-1401202953509d662fafd39)
    exten => CALLFLOW-START,n(module-11),Dial(SIP/101,10,go)
    exten => CALLFLOW-START,n(module-13),Hangup()
    exten => CALLFLOW-START,n(module-9),Playback(/storage/usbdisk1/askoziapbx/media/sounds/cfe/speech_9_CALLFLOW-1401202953509d662fafd39)
    exten => CALLFLOW-START,n(module-10),Hangup()
    



    Видео демонстрация работы с конструктором





    Заключение

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

    Более подробно про Askoizia можно почитать на сайте http://www.askozia.ru
    Описание всех модулей доступно на http://wiki.askozia.ru
    Share post

    Comments 9

      0
      Простите, но не соглашусь!
      Хотя бы потому, что понимание все равно надо, а в текстовом редакторе все равно получится лучше и гибче. В любом случае нужен администратор, который понимает, что он делает.

      А полученный результат, приведенный в статье, не выдерживает никакой критики.
      Многократное использование System вместо одного AGI, использование морально устаревшего формата extensions.conf вместо AEL или LUA.

      В общем, шашечки для шашечек, а не для бизнеса.
        0
        Конечно чистый Asterisk + VI редактор, да понимание как строятся диалпланы — это нужное и хорошее знание. Но не все сразу рождаются с такими знаниями, да и не нужно это многим. Типовой клиент этой штуки — это офис на 20 пользователей с приходящим админом. Преимущество Askozia в простоте и скорости запуска без особых знаний в области Asterisk и Linux. В редакторе маршрутов есть много шаблонов: выбрал, прописал номера, на примере шаблонов собрал то что нужно и в бой.
          0
          Да не нужен редактор маршрутов в таком виде. Это слишком сложно. Нужна простая таблица: «это — сюда, а это — туда». Все остальные настройки по-умолчанию. Вот это будет действительно просто.
            0
            Ну так то что вы говорите есть в Askozia и без редактора. Редактор маршрутов — расширенная функция, например IVR сделать.
              0
              Путаница какая-то :-)
          +1
          Согласен с вами. Подобные схемы меня вводят в ступор.

          0
          Чем она лучше свободного FreePBX, за исключением поиска телефонов в сети?
          Что она может еще такого, что недоступно из FreePBX?
          Что может FreePBX из недоступного этой поделке?
            0
            Если у вас хватает квалификации для установки и настройки FreePBX, то он лучше. Если вы не знаете, не хотите глубоко разбираться с Linux, но хотите использовать Asterisk, то Askozia предпочтительнее. Ядро одинаковое по сути. Для нас askozia сильно проще в поддержке, т.к. у всех клиентов она ведет себя относительно одинаково, т.к. linux там read-only и пошалить ручками сильно не получится.
              0
              понял

          Only users with full accounts can post comments. Log in, please.