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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Интеграция IntraService и Астериск

База знаний Настройка Asterisk
Обычно при создании заявки, ответственному сотруднику отправляется письмо на email, о том, что у него появилась новая заявка. Однако, бывают случаи, когда письмо по каким-то причинам во время не увидели. Интеграция будет сообщать пользователю о новой заявке, если он просрочил срок реакции на эту заявку.

Рассмотрим пример интеграции Асткериск и HelpDesk системы IntraService.
  1. Настройка фильтра в IntraService 
  2. Диалплан в Астериск
  3. Скрипт интеграции и получения данных по API IntraService


1. Настройка фильтра в IntraService


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


Далее необходимо нажать на фильтр, убедиться, что показываются только новые заявка со статусом "Открыта". В адресной строке необходимо взять номер данного фильтра, например, 231 (...?stateid=231). Теперь мы имеем возможность через API обращаться к этому фильтру и получать список заявок. Чтобы получать авторизованный доступ, необходимо создать отдельного пользователя и задать ему пароль. Для примера создадим пользователя pbx и с паролем Password123.

2. Диалплан в Астериск


Теперь добавим в наш Астериск диалпланы. Если у вас FreePBX, то в файл extensions_custom.conf

[to-internal]

exten => _X.,1,NoOp(Dial to ${EXTEN})
;довольно короткий вызов, только чтобы напомнить и пользователь увидел номер заявки в пропущенных
same => n,Dial(Local/${EXTEN}@from-internal/n,5)
[from-intraservice]
exten => _X.,1,NoOp(Pause to DIAL ${EXTEN} sec)
same => n,Wait(${EXTEN})
same => n,Answer()
same => n(play),Wait(2)
;файл озвучку загружаем заранее. Звучит фраза: "У вас новая заявка!"
same => n,Playback(custom/intra-task)
same => n,Goto(play)


3. Скрипт интеграции и получения данных по API IntraService


Теперь нам необходимо создать скрипт реализации получения данных из IntraService и генерации вызова уведомления в случае, если срок реакции был просрочен. Сначала желательно вручную проверить получение данных через API, т.е. в адресную строку вставляем строку вида:

https://pbx:Password123@intraservice.company.ru/api/task?filterid=231

Должны получить вывод XML:

This XML file does not appear to have any style information associated with it. The document tree is shown below.
<Tasks>
<Task>
<Assets/>
..............
<Id>4798</Id>
<IsMassIncident>False</IsMassIncident>
<Name>Тестовая заявка</Name>
<ParentId/>
<Price>0,000</Price>
<PriorityId>9</PriorityId>
<ReactionDate>28.08.2015 17:12:00</ReactionDate>
<ReactionOverdue>True</ReactionOverdue>
<ResolutionOverdue/>
<ServiceId>15</ServiceId>
<ServiceStage/>
<ServiceStageId/>
<StatusId>31</StatusId>
<TaskRepeatRuleId/>
<Type/>
<TypeId/>
<ExecutorIds>454</ExecutorIds>
............
<Paginator>
<Count>1</Count>
<Page>1</Page>
<PageCount>1</PageCount>
<PageSize>25</PageSize>
<CountOnPage>1</CountOnPage>
</Paginator>
</TaskList>


Итак скрипт:

<?php
$json = file_get_contents("https://pbx:Password123@intraservice.company.ru/api/task?filterid=231");
$tasks=json_decode($json,true);
$taskcall = array ();
$pause=10;
function c2c($user,$cname,$cid,$dialto){
$c2c ="Channel: Local/$dialto@from-intraservice/n"."\n";
$c2c.="Callerid: \"$cname\" <$cid>"."\n";
$c2c.="MaxRetries: 2"."\n";
$c2c.="RetryTime: 5"."\n";
$c2c.="WaitTime: 600"."\n";
$c2c.="Context: to-internal"."\n";
$c2c.="Extension: $user"."\n";
$c2c.="Archive: Yes"."\n";
$c2c.="SetVar: USERNUM=".$user."\n";
$filename = "/var/spool/asterisk/outgoing/$user-".time().".call";
$fh = fopen($filename, "w");
fwrite($fh, $c2c);
fclose($fh);
}
function tasktocall($taskid,$reactDate,$idsExecutors,$nameExecutors,$pause){
$idexecutor = explode(", ",$idsExecutors);
$nameexecutor = explode(", ",$nameExecutors);
$react = str_replace('T',' ',$reactDate);
$dnow = date("Y-m-d H:i:s",time());
// > правильно , < для тестов
if ($dnow > $react) {
echo 'Время реакции на заявку '.$taskid.' просрочено: '.$dnow . '(сейчас) >' . $react.'(расчетное время реакции)'. "\r\n";
echo 'Ответственные ВСЕ: '.$nameExecutors . ' id = '.$idsExecutors."\r\n";
echo 'Ответственный первый: '.$nameexecutor[0] . ' id = '.$idexecutor[0]."\r\n";
$json = file_get_contents("https://pbx:Password123@intraservice.company.ru/api/user/".$idexecutor[0]);
$executor0=json_decode($json,true);
$phone0 = $executor0['Phone'];
c2c($phone0,"IntraService",$taskid,$pause);
echo $phone0." IntraService ".$taskid.' pause='.$pause."\r\n";
}
}
foreach ($tasks['Tasks'] as $task) {
//если вызываемая заявка известна и задана конкретным номером заявки в параметр. Для тестов
if (isset($argv[1])) {
if ($task['Id'] == $argv[1]) {
tasktocall($task['Id'],$task['ReactionDate'],$task['ExecutorIds'],$task['Executors'],$pause);
}
}
// для автоматического просмотра всех заявок
if (!isset($argv[1])) {
tasktocall($task['Id'],$task['ReactionDate'],$task['ExecutorIds'],$task['Executors'],$pause);
$pause=$pause+60;
if ($pause>=300) {
break;
}
}
}
?>


Теперь добавляем в cron строку вида:

*/10 11-18 * * 1-5 sudo -u asterisk /usr/bin/php /usr/local/bin/intra.php >> /var/log/intra.log

Как только появляется значок "Время реакции истекло.",


то на следующей итерации запуска скрипта будет сгенерирован вызов. И на дисплее телефона будет отображен номер заявки.
интеграция, callerid, call, Time, Channel, FreePBX, Call-файл, настройка, asterisk