Asterisk 1.8 + PHP-AGI = Функция дня и ночи и работа фирмы по графику рабочей недели

Это Вам так же может быть интересно!

Делитесь с друзьями в социальных сетях! Оставляйте комментарии!

Share/Save
test

asterisk worktime
Эта маленькая заметка предполагает что вы уже работали с Asterisk и знаете что такое Dialplan-ы и большую часть того что с ними связано. Так же AGI(Asterisk Gateway Interface). AGI это интерфейс расширения Asterisk с помощью других языков программирования, в частности PHP, Для использования AGI необходимо создать файл в директории /usr/share/asterisk/agi-bin/ в нашем случае это файл worktime.php. AGI использует стандартные потоки ввода/вывода и потока вывода ошибок. Ниже вполне обычный код PHP за некоторым исключением, касающимся как-раз таки ввода-вывода. Все касательно PHP AGI замечательно рассказано в книге Asterisk: будущее телефонии
Ну а теперь сам код:

#!/usr/bin/php5 -q
<?php
set_time_limit(30);
ob_implicit_flush(false);
error_reporting(0);

//функция получения ответа от Asterisk
function GetIn(){
    $result = trim(fgets($stdin,4096));
    return $result;
}

//считываем из потока ввода(вывод астериска нам) и загоняем данные в переменные.
while (!feof(STDIN)){
    $temp = trim(fgets(STDIN,4096));
    if ($temp=="" || $temp=="\n")
    {
        break;
    }
    $s = split(":",$temp);
    $name = str_replace("agi_","",$s[0]);
    $agi[$name] = trim($s[1]);
}

//текущий день недели
    $nowdate = date("w");
//текущий час
    $nowtime = date("H");
//флаг о том что нужно вернуть истину
    $res1 = 0;
//если день больше чем Воскресенье(0 день недели) и меньше чем Суббота(6 день недели)
    if ($nowdate>0 && $nowdate<6){
//как задача фирма работает 7 дней в неделю, с Пн-Пт с 8 утра до 20 вечера, Сб-Вс с 9 до 12.
//если время текущее больше 8 часов дня и меньше 20 часов вечера
    if ($nowtime>8 && $nowtime<20) $res1=1;
    }
    else
    {
//если день - суббота или воскресенье то проверяем график работы с 9 до 12 часов дня.
    if ($nowtime>9 && $nowtime<12) $res1=1;
    }

//задаем переменную ScriptResult и задаем ей значение нашего условия.
    fwrite(STDOUT,"SET VARIABLE ScriptResult $res1\n");
    $res = GetIn();
?>

В самом DialPlan-е делаем вызов нашего AGI скрипта.

exten=>s,1,AGI(worktime.php)
exten=>s,n,GotoIf(${ScriptResult}?metka,rabochiy: metka, ner_rabochiy)
...

Все, если скрипт выполнился и время попадает в заданный промежуток то возвращается в переменной ScriptResult 1, в противном случае 0.

Если Вы еще не выбрали VPS/VDS

Список неплохих конфигураций можно найти и заказать тут.

Постоянный контроль доступности вашего сервера

Для контроля на работоспособность вашего сервера используйте следующий сервис ping-admin

Категория: 
Share/Save

Комментарии

Аватар пользователя mr_jok

А нельзя ли сделать все опросы на глобальные и частные исключения по времени и датам на основе локальных текстовых файлов (для удобства редактирования и контроля неподготовленными сотрудниками)?

WBR, J()KER

test

У астериска широкие возможности конфигов. А PHP расширяет возможности Asterisk-а еще больше. Редактирование и контроль неподготовленным сотрудникам вообще лучше исключить. Но если нужно, используйте возможности PHP. Повешайте формы для ввода и редактирования исключений, сохраняйте в базу или файл и в куске кода, который работает через PHP-AGI обращайтесь к базе или текстовым файлам, читая их. По сути, PHP-AGI это интерфейс который запускает php файл и возвращает результат из него. То есть все что используется внутри PHP кода, ограничено лишь самим PHP. Надеюсь ответил на ваш вопрос.

Never Give UP!