Курсы по использованию Asterisk

IP-телефония — технология будущего. Обучитесь работе с IP-АТС Asterisk для того чтобы внедрить и профессионально использовать при решении коммуникационных задач.

Работайте с Asterisk профессионально!

Многоуровневая защита IP-АТС Asterisk

Телефонные станции очень часто становятся объектами хакерских атак. Узнайте, каким образом необходимо строить многоуровневую защиту для Вашей IP-АТС.

Не оставьте хакерам шансов. Защитите свой Asterisk от атак.

Используйте Веб-Интерфейс для удобства настройки

Панель управление FreePBX позволяет легко и удобно управлять всей системой. Научитесь эффективно использовать FreePBX для решения своих задач.

Управление станцией и статистика в окне браузера.

Научитесь работать с Asterisk из консоли

Для понимания работы с Asterisk необходимо уметь настраивать его вручную с конфигурационными файлами и командной строкой CLI Asterisk.

Научитесь «тонкой» настройке Asterisk

Цель курсов - максимум практики.

Обучение нацелено на практическую работу с IP-оборудованием: платы потоков E1, VoIP-телефонные аппараты, голосовые шлюзы FXS и прочее.

Обучение на реальном оборудовании — залог успеха.

Включение и выключение DND через внешние вызовы.

База знаний Настройка Asterisk

В данной статье рассмотрим вариант настройки переключения режима «Не беспокоить», используя внешние вызовы.

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

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

Для начала создадим голосовое меню, в котором будет предложено ввести внутренний номер для включения/выключения режима DND.

Голосовое меню

Голосовое меню

Далее создаем входящий маршрут по приоритету CID:

Входящий маршрут

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


Пример с макской

Пример с маской

После настройки входящей маршрутизации переходим к настройке ИВР. Можно использовать override, либо использовать custom destination.

В данном примере я пойду по первому пути и буду использовать override.

Открываем файл extensions_override_freepbx.conf и вписываем туда:

[ivr-8]
exten => _XXX,1,Set(pass=${DB(DNDPASS/${EXTEN})})
same => n,Authenticate(${pass})
same => n,Set(num=${EXTEN})
same => n,Read(toggle,ru/custom/hello-test,1)
same => n,GotoIf($["${toggle}"="1"]?dnd-on-x,${EXTEN},1)
same => n,GotoIf($["${toggle}"="2"]?dnd-off-x,${EXTEN},1)
same => n,Playback(beep)
same => n,Macro(hangupcall,)
//Все голосовые записи внесены для примера.


Примечание! Номер ИВР можно узнать через веб-интерфейс, он будет подписан как id в адресной строке при открытии нужного голосового меню.


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

Можно установить дефолтный пароль для всех устройств, но лучше такого не делать в целях безопасности и чтобы не породить путаницу.
Далее необходимо прописать контексты включения/выключения DND. Можно в том же extensions_override_freepbx.conf

[dnd-on-x]
exten => _XXX,1,Answer
same => n,Wait(1)
same => n,Macro(user-callerid,)
same => n,Set(DB(DND/${EXTEN})=YES)
same => n,Set(STATE=BUSY)
same => n,Gosub(dnd-on-x,sstate,1())
same => n(hook_1),Playback(do-not-disturb&activated)
same => n,Macro(hangupcall,)
 
exten => sstate,1,Set(DEVICE_STATE(Custom:DND${EXTEN})=${STATE})
exten => sstate,n,Set(DEVICES=${DB(AMPUSER/${EXTEN}/device)})
exten => sstate,n,GotoIf($["${DEVICES}" = "" ]?return)
exten => sstate,n,Set(LOOPCNT=${FIELDQTY(DEVICES,&)})
exten => sstate,n,Set(ITER=1)
exten => sstate,n(begin),Set(DEVICE_STATE(Custom:DEVDND${CUT(DEVICES,&,${ITER})})=${STATE})
exten => sstate,n,Set(ITER=$[${ITER} + 1])
exten => sstate,n,GotoIf($[${ITER} <= ${LOOPCNT}]?begin)
exten => sstate,n(return),Return()
 
[dnd-off-x]
exten => _XXX,1,Answer
same => n,Wait(1)
same => n,Macro(user-callerid,)
same => n,Noop(Deleting: DND/${EXTEN} ${DB_DELETE(DND/${EXTEN})})
same => n,Set(STATE=NOT_INUSE)
same => n,Gosub(dnd-off-x,sstate,1())
same => n(hook_1),Playback(do-not-disturb&de-activated)
same => n,Macro(hangupcall,)
 
exten => sstate,1,Set(DEVICE_STATE(Custom:DND${EXTEN})=${STATE})
exten => sstate,n,Set(DEVICES=${DB(AMPUSER/${EXTEN}/device)})
exten => sstate,n,GotoIf($["${DEVICES}" = "" ]?return)
exten => sstate,n,Set(LOOPCNT=${FIELDQTY(DEVICES,&)})
exten => sstate,n,Set(ITER=1)
exten => sstate,n(begin),Set(DEVICE_STATE(Custom:DEVDND${CUT(DEVICES,&,${ITER})})=${STATE})
exten => sstate,n,Set(ITER=$[${ITER} + 1])
exten => sstate,n,GotoIf($[${ITER} <= ${LOOPCNT}]?begin)
exten => sstate,n(return),Return()

В контексты мы отправляем номер, для которого необходимо включение режима DND.

Применяем изменения диалплана:

Asterisk –rx ‘dialplan reload’

И можем тестировать.

Пример включения в диалплане

Для простоты установки паролей создадим простую веб-форму.

Для основы используем форму управления DND из прошлой статьи (Управление DND через web).

Оттуда возьмем вывод всех операторов и их текущие пароли:

<?php
include('connectdb.php');
$dnddb = new SQLite3('/var/lib/asterisk/astdb.sqlite3');
$result = bd_bridge('asterisk','SELECT extension, name FROM users ORDER BY extension ASC;');
echo "<form action='dndpass.php' method='POST'><table border=1><tr><td>Номер</td><td>Имя</td><td>Статус</td></tr>";
 
while ($row = mysql_fetch_array($result))
{
$CellName = $row['name'];
$CellPhone = $row['extension'];
 
$dndpass = $dnddb->query("SELECT value FROM astdb WHERE key like '/DNDPASS/$CellPhone' AND key not like '%only'  ORDER BY key");
$astdb = $dndpass->fetchArray();
$DNDpwd = $astdb['value'];
 
    echo "<tr><td>".$row[0]."</td><td>".$row[1]."</td><td><input type='text' name='".$row[0]."' pattern='[0-9]{4}' value='".$DNDpwd."'></td></tr>";//Выводим поля для ввода пароля с необходимым паттерном и индексом.
    echo "</td></tr>";
}
echo "</table>
<input type=submit name=set>//кнопка обработчик
    </form>";

Вывод всех текущих паролей для DND

Соответственно теперь необходимо внесенные в формы пароли внести в базу, а удаленные – удалить:

if (isset ($_POST['set'])) {
                foreach ($_POST as $key => $pass) {
                              
if ($pass != "") {$dnd = `asterisk -rx "database put DNDPASS $key $pass"`;}
                else {$dnd = `asterisk -rx "database del DNDPASS $key"`;}
               
}
 
echo "<meta http-equiv='refresh' content='1'>";
}
?>

Данный скрипт помещаем как обычно в веб-директорию и даем ему пользователя asterisk.

БД Asterisk пример

 

 

asterisk, FreePBX, callerid