Страница 1 из 1

Вопрос по звонкам из AGI

Добавлено: 18 сен 2019, 13:38
radeugen
Доброго дня всем!
Возникла задачка распределения звонков в зависимости от четности недели. Немного покопавшись, я решил, что проверять четность недели проще через AGI скрипт. И все бы ничего, но добавилось еще условие таймаутов звонков - после 30 секунд без ответа нужно звонить параллельно на еще один номер. Я попробовал реализовать это так:

extensions.conf

Код: Выделить всё

exten => 123456789,NoOp("SERVICE CALL")
same => n,Ringing
same => n,AGI(service.php)
same => n,Hangup
service.php

Код: Выделить всё

#!/usr/bin/php -q
<?php
require('phpagi.php');
$agi = new AGI(); 

if (date('W')%2==1) {
  $agi->exec('Dial', "SIP/111, 30, twh");
  $agi->exec('Dial', "SIP/111&SIP/222, 120, twh");
} else {
  $agi->exec('Dial', "SIP/333, 30, twh");
  $agi->exec('Dial', "SIP/333&SIP/444, 120, twh");
}
$agi->hangup();
?>
Определение четности работает, но таймаут 30 секунд не срабатывает и звонок идет только по первой записи ($agi->exec('Dial', "SIP/111, 30, twh"); или $agi->exec('Dial', "SIP/333, 30, twh");)
Направьте, пожалуйста, в правильное русло

Re: Вопрос по звонкам из AGI

Добавлено: 18 сен 2019, 16:31
BorisTheBlade

Re: Вопрос по звонкам из AGI

Добавлено: 18 сен 2019, 16:49
radeugen
Спасибо.

Re: Вопрос по звонкам из AGI

Добавлено: 19 сен 2019, 14:09
Repz
должно все без слипов работать, в консоле что по работе скрипта отображается?
для отладки после dial
$DialStatus = $AGI->get_variable("DIALSTATUS");
$HangapStatus = $AGI->get_variable("HANGUPCAUSE");
$Channel_status = $AGI->channel_status();
$AGI->exec("NoOp", $HangapStatus );
$AGI->exec("NoOp", $DialStatus.$Channel_status );

Re: Вопрос по звонкам из AGI

Добавлено: 20 сен 2019, 14:21
radeugen
Да я решил не заморачиваться с AGI, т.к. инфы толковой по нему не нашел и ему отдал необходимый минимум - только проверку недели на четность

service.php

Код: Выделить всё

#!/usr/bin/php -q
<?php
require('phpagi.php');
$agi = new AGI(); 

if (date('W')%2==1) {
  $agi->set_variable("WEEK", "ODD");
} else {
  $agi->set_variable("WEEK", "EVEN");
}
?>
А остальная логика в диалплане
extensions.conf

Код: Выделить всё

exten => 123456789,NoOp("SERVICE CALL")
same => n,Ringing
same => n,AGI(service.php)
same => n,NoOp(" Week is ${WEEK} ")
same => n,GotoIf($["${WEEK}" = "EVEN"]?context1,s,1:context2,s,1)
same => n,Hangup

[context1]
exten => s,1,Dial(SIP/111,60,twh) 
exten => s,n,Dial(SIP/111&SIP/222,120,twh) 
exten => s,n,Hangup

[context2]
exten => s,1,Dial(SIP/333,60,twh) 
exten => s,n,Dial(SIP/333&SIP/444,120,twh) 
exten => s,n,Hangup

Re: Вопрос по звонкам из AGI

Добавлено: 20 сен 2019, 15:05
BorisTheBlade
Можно прямо в диалплане:
exten => s,n, GotoIf($[${MATH(${STRFTIME(,,%U)}%2,int)}=0]?context1,s,1:context2,s,1)

Re: Вопрос по звонкам из AGI

Добавлено: 27 сен 2019, 11:39
radeugen
Можно прямо в диалплане:
exten => s,n, GotoIf($[${MATH(${STRFTIME(,,%U)}%2,int)}=0]?context1,s,1:context2,s,1)
Спасибо, классно!

Re: Вопрос по звонкам из AGI

Добавлено: 27 сен 2019, 12:34
ded
radeugen, не цитируйте полностью предыдущее сообщение. Дурной тон. Не comme il' faut.
Порицание.