Настройка FreePBX Distro

В предыдущей статье я описывал установку FreePBX Distro, в этой статье я расскажу о том как настроить данный дистрибутив что бы с ним можно было работать.

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

Начальная настройка;
Создание внутреннего номера (extenshions);
Русификация или учим наш FreePBX говорить по русски;
Создание приветствия (announcement);
Группы звонков (ring groups)
Очереди звонков (queues);
Создание IVR;
Групповая голосовая почта (voicemail);
Создание правила по времени (time conditions);
Создание транка (trunk);
Настройка исходящих вызовов (outbound routes);
Настройка входящих вызовов (inbound routes);
Бэкап.

Фуф, вроде перечислил сколько всего нам придётся сделать что бы наш астериск начал работать. Итак, настраивать мы будем всё не просто так, а по примеру (сферический конь в вакууме), выглядит он примерно так:

  • 3 Внешних транка, один допустим шлюз, аппаратный, городская линия, один транк для звонков на мобильники и один транк для межгорода;
  • 10 Внутренних номеров, прям не знаю, отдел продаж человека, директор, и технари 5 человек, ииии секретарь например;
  • 1 IVR конечно же куда ж без него;
  • Очередь для технарей, у кого ещё очередь может быть;
  • Одна или несколько групп звонков, это для мэнеджеров, они должны брать трубку быстро им очередь не нужна;
  • Запись всех разговоров которые пришли извне или уходят наружу;
  • Во внерабочее время работает голосовая почта;
  • У сотрудников должна быть возможность перехвата звонков.

    Начальная настройка

Поехали. Перво наперво, надо будет выполнить настроить основу нашего астериска, что бы мы потом могли нормально с ним работать.

Итак, после установки астериска, появится приветствие и просьба ввести логин, затем пароль, которые мы задали в момент установки. Затем появится окно, в котором мы можем увидеть IP адрес нашего астериска.

freepbx ssh

Заходим через браузер по этому адресу – FreePBX просит задать логин-пароль для WEB интерфейса, а так же email для уведомлений.

freepbx first logon

После задания этих параметров мы попадаем на стартовое окошко, для настройки выбираем – FreePBX Administration.

freepbx portal

Так выглядит основная страница настроек нашего астериска, в 10 версии всё выглядит пример так же.

freepbx main window

Переходим в раздел Advanced Settings который выбирается из меню Settings. Здесь сосредоточены важные настройки астериска, и я не рекомендую менять в этом разделе что-либо если Вы точно не уверены что делаете. Здесь рекомендую изменить Country Indication Tones на Russian Federation и Ringtime Default на 60, в разделе Dialplan and Operational, не забудьте нажать зелёную галочку после изменений, и красную кнопку Apply Settings для сохранения.

freepbx ringtime

Спускаемся ниже и в разделе GUI Behavior меняем False на True в параметре Show Language setting, так же сохраняем всё это дело.

freepbx language web

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

Опускаемся ещё ниже, до раздела System Setup и в пункте User Portal Admin Password видим пароль который мы задавали для web в открытом виде, ужасаемся, меняем на что-нибудь ненужное. Забегая вперёд хочу сказать что пароль для вебки FreePBX хранится в mysql в зашифрованном виде, а для User Portal разработчики могли бы и сгенерировать что-нибудь, вместо того что бы вот так светить потом чужие пароли, админов у астериска ведь может быть несколько, некрасиво это.

freepbx user pass portal

Есть подозрение что в разделе Asterisk Manager надо также сменить пароль для AMI админа.

freepbx asterisk manager

Fail2Ban

Переходим к настройкам Fail2Ban что бы добавить свой IP адрес в белый список, в меню Admin выбираем пункт System Admin. Довольно хороший раздел, помогает лишний раз не лазить в консоль. Здесь можно например изменить IP адрес астериска. Но нам нужен пункт – Intrusion Detection.

freepbx fail2ban

В поле WhiteList через пробел добавляем адрес своего пк. Можно задавать как адреса, так и сети, например всеми любимая 192.168.0.0/24. Добавлять адреса через пробел! Для сохранения жмём Отправить запрос (непонятно почему, но кнопка на русском).

SrvLookup

Некоторые провайдеры используют SrvLookup. На текущий момент насколько мне известно PjpSip в астериске не поддерживает этой функции. Зато ChanSip поддерживает, но по умолчанию эта функция выключена. Для включения переходим Общие настройки (settings)Asterisk SIP Settings далее в зависимости от версии FreePBX либо просто листаем вниз, либо справа выбираем ChanSip и уже затем листаем вниз, ищем пункт SRV Lookup (Поиск записей SRV) и включаем его


Пожалуй на этом первоначальные настройки завершены.

Как и прежде можно оставлять комментарии, вопросы и пожелания, постараюсь ответить.

  • http://www.odnoklassniki.ru/profile/546347169 Максим Червяк

    Хотелось бы увидеть еще и статьи:

    Создание приветствия (announcement);
    Создание группы звонков (ring groups)
    Создание очереди звонков (queues);
    Создание IVR;
    Групповая голосовая почта (voicemail);
    Создание правила по времени (time conditions);
    Настройка входящих вызовов (inbound routes);
    Бэкап.

    Был бы очень благодарен.

  • http://vk.com/id3942838 Алексей Варич

    Будут со временем ) Сейчас просто времени нет этим заняться ))

  • Дмитрий

    После установки и ввода логина и пароля ничего не происходит 🙁 попасть в веб интерфейс не могу… Прошу помощи

    • http://vk.com/id3942838 Алексей Варич

      откуда попасть не можете?

      • Дмитрий

        Ввожу команду ifconfig вижу адрес машины, с другой локальной машины не хочет на нее заходить. И что самое странное что после загрузки терминала ввожу логин и пароль root’а, но никаких надписей freepbx и ip не выводятся…

  • https://plus.google.com/116291725972099422016 Игорь Кузнецов

    Добрый день Алексей!
    Благодаря Вашей помощи у меня уже работает домофон через ht503 и сейчас стоит следующая задача по громкой связи (оповещениям)
    Необходимо из внешнего скрипта на bash осуществить оповещение на все телефоны. Телефоны поддерживают paging, intercom. На freepbx настроил пейджинг группу и включил нужные телефоны. Теперь если позвонить на этот номер , устанавливается канал со всеми телефонами и можно оповещать.
    Но как теперь это сделать через ami интерфейс не очень понятно.
    Во внешней системе произошло событие, которое необходимо озвучить через телефоны без поднятия на последних трубок.
    В ami не нашел команду page

    • Алексей

      через callfile можно просто звонить на номер и проигрывать что вам нужно
      пример скрипта на баше если нужно приведу, только с callfile поиграйтесь сначала, поймите как работает, с ним проще чем ami

      • https://plus.google.com/116291725972099422016 Игорь Кузнецов

        3 дня читал “Asterisk – будущее телефонии”
        В общем стало больше ясности но к своей задаче не понимаю с какой стороны подойти.
        Если не затруднит приведите пожалуйста пример.
        И еще обратил внимание, что если сейчас набрать номер пейджинга (что на freepbx зарегистрирован), все телефоны включают динамики и устанавливается канал. Т.е. с одного телефона можно набрать номер 590 и все остальные сразу слышат. Но при hangup на вызывающем – у “слушатаей” hangup не происходит.

        • http://vk.com/id3942838 Алексей Варич
          • https://plus.google.com/116291725972099422016 Игорь Кузнецов

            Не понят как вызвать функцию page().
            Правильно ли я понимаю:
            Создаем контекст
            [play-message]
            Exten => s,1, page(sip/590)
            Exten => s,n, playback(file-sound)
            Exten => s,n,hangup()
            Exten => h,n,hangup()

            В call файле нужно указать этот контекст play-message
            А что указать в chanel и extention?
            Инициатором вызова будет сам астериск, а не какой-то номер

          • Алексей

            там же есть пример 6
            вы можете позвонить на какой-нибудь номер что бы сработал интерком? Если да то его и укажите в channel в то время как экстеншн будет приложение которое проигрывает файл или что-то диктует, а вы всё в одну кучу напихали и набор интерком и проигрывание файла.

          • https://plus.google.com/116291725972099422016 Игорь Кузнецов

            Freepbx настроин номер 590 как дефолтовый пейджинг. Если его набрать с любого телефона то все включенные в группу дефолт-пейджинг сразу включают динамики на прием. Т.е. так работает. Но если в call файле я задаю канал sip/590 выводится ошибка, что такой канал не существует. Сейчас комп далеко, завтра смогу логи детально описать.

          • Алексей

            правильно, какой же это sip/590, для внутренних приложений надо использовать local
            что нибудь вроде Local/590@from-internal/n

            http://asterisk.ru/knowledgebase/Asterisk+local+channels

            сам правда недавно об этом узнал ))

          • https://plus.google.com/116291725972099422016 Игорь Кузнецов

            Установил в play.call
            Channel: Local/590@from-internal/n

            Сработало оповещение.
            Но еще одна проблемка осталась. После hangup – телефоны, что в группе пейджинга не вешают трубку.
            Судя по описанию Page(), когда инициатор разрывает связь – то уничтожается канал и все автоматически отключаются. У меня такого не происходит даже если я с телефона набираю 590. Пока ручками не отобьешь тел так и будет busy

          • https://plus.google.com/116291725972099422016 Игорь Кузнецов

            Разобрался с проблемой отбоя с интеркомом. Оказывается эта проблема уже бородатая. Но решение ее тоже довольно простое а именно:

            Settings -> Advanced Settings
            Ищем раздел: Dialplan and Operational
            Переменная: Conference Room App

            Устанавливаем в значение app_meetme

          • https://plus.google.com/116291725972099422016 Игорь Кузнецов

            продолжение…
            В скрипте (bash) синтезирую речь из переменной $Message
            wget -O out.mp3 “https://tts.voicetech.yandex.net/generate?text=$Message&emotion=mixed&format=mp3&lang=ru-RU&speaker=omazh&key=$KeyCode”

            На выходе получаю out.mp3
            Воспроизвожу его обычным плеером и слышу нормальную синтезированную речь.
            Но при попытке воспроизвести через asterisk (paging) – неудача.

            exten => s,n,Playback(/var/lib/asterisk/sounds/out.mp3)

            — Executing [s@pa-custom:3] Playback(“Local/590@from-internal-00000176;1”, “/var/lib/asterisk/sounds/out.mp3”) in new stack
            [2015-09-20 12:29:59] WARNING[17037]: file.c:666 ast_openstream_full: File /var/lib/asterisk/sounds/out.mp3 does not exist in any format
            [2015-09-20 12:29:59] WARNING[17037]: file.c:957 ast_streamfile: Unable to open /var/lib/asterisk/sounds/out.mp3 (format 0x40 (slin)): No such file or directory
            [2015-09-20 12:29:59] WARNING[17037]: app_playback.c:479 playback_exec: ast_streamfile failed on Local/590@from-internal-00000176;1 for /var/lib/asterisk/sounds/out.mp3

            Файл в директории имеется. Владелец asterisk и права 777

          • https://plus.google.com/116291725972099422016 Игорь Кузнецов

            Отвечаю сам себе…
            Необходимо указывать только имя файла без расширения. Т.е.
            exten => s,n,Playback(/var/lib/asterisk/sounds/out)

            Все заработало!
            Близится момент, когда научу систему в доме разговаривать, а не просто светить индикаторами и пикать.

          • Алексей

            пытался ответить что по пейджингу не знаю нюансов, я им вообще никогда не пользовался, комментарий не отправился ((
            а по разговору у вас вроде итак на виде погоду система сообщает или что-то в этом духе?

          • https://plus.google.com/116291725972099422016 Игорь Кузнецов

            Первоначально я пошел по другому пути. openhab умеет запускать скрипты. Скрипт получает текстовую строку которую отправлял на гугл для синтеза. Затем полученный файл воспроизводил на микрокомпьютере через динамик с усилителем. Но такой вариант оказался не очень удобным да и не слишком надежен. Нужно гарантированное питание обеспечить да и много других нюансов. Учитывая, что по дому стоят SIP телефоны (PoE) я и подумал почему же их не задействовать в системе оповещения.Собственно в этом направлении теперь и двигаюсь. В довесок перешел на Яндекс сервисы. Оказалось проще и с русскоязычной поддержкой, что так же не маловажно.

          • Алексей

            Ясно, решили заморочится в этом вопросе по полной )

          • https://plus.google.com/116291725972099422016 Игорь Кузнецов

            Добился определенного результата.
            1. В скрипте (вызывает openhab) получаю в виде параметра строку.
            2. В этом же скрипте синтезирую текст в речь
            3. Теперь необходимо обеспечить передачу mp3 файла на asterisk
            4. Используя AMI делаю вызов пейджинга с передачей одного параметра в канал – имени файла с речью без расширения.

            #!/bin/bash
            #
            voicefile=”out”
            echo “Starting…” >> /opt/openhab/cmd/test.log
            /opt/openhab/cmd/call.sh $voicefile | telnet

            #!/bin/sh.
            #.
            # ./call.sh | telnet.
            #.
            soundfile=$1
            echo “open 192.168.1.11 5038”
            sleep 2
            echo “Action: Login”
            echo “Username: openhab”
            echo “Secret: xxxxxx”
            echo “Events: off”
            echo
            sleep 2
            echo “Action: Originate”
            echo “Channel: Local/590@from-internal/n”
            echo “Context: pa-custom”
            echo “Exten: 577”
            echo “Priority: 1”
            echo “Variable: var1=$soundfile”
            echo “Callerid: openhab ami”
            echo
            sleep 2
            echo “Action: Logoff”
            echo

            [pa-custom]< --->
            exten => s,1 (start),Wait(2)
            exten => s,n,NoOp(${var1})
            exten => s,n,Set(CHANNEL(language)=ru)
            exten => s,n,Playback(/var/lib/asterisk/sounds/${var1})>
            exten => s,n,Playback(vm-goodbye)
            exten => s,n,Hangup()
            exten => h,1,Hangup()

            Работает.

      • https://plus.google.com/116291725972099422016 Игорь Кузнецов

        при помощи call файла звоню на номер. Но как включить режим интеркома на нескольких телефонах одновременно?

        play.call
        Channel: SIP/520 – это sip phone
        Callerid: 911
        MaxRetries: 5
        RetryTime: 5
        WaitTime: 20
        Context: pa-custom
        Extension: 557

        [pa-custom]
        exten => s,1(start),Wait(2)
        exten => s,n,Playback(demo-congrats)
        exten => s,n,WaitExten(10)
        exten => s,n,Playback(vm-goodbye)
        exten => s,n,Hangup()

        exten => 1,1,Playback(digits/1)
        exten => 1,n,Goto(pa-custom,s,start)

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

  • https://www.facebook.com/app_scoped_user_id/10207766499430321/ Баха Хаитов

    В меню Admin нету пункта System Admin. На страничке создания внутреннего номера нету раздела iSymphony Settings. Где их взять?

    • Алексей

      симфония на моей памяти во всех дистрибутивах новых по умолчанию идёт, а system admin может быть не установлен, зайдите в admin – module admin и найдите модуль system admin и установите его.