ВидеоКонф(ВКС)  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

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

Новичком считается только что прочитавший «Астериск - будущее телефонии»
http://asterisk.ru/knowledgebase/books
и пытающийся сделать большее

Модераторы: april22, Zavr2008

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

Сообщение radeugen » 18 сен 2019, 14:38

Доброго дня всем!
Возникла задачка распределения звонков в зависимости от четности недели. Немного покопавшись, я решил, что проверять четность недели проще через 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");)
Направьте, пожалуйста, в правильное русло
radeugen
 
Сообщений: 4
Зарегистрирован: 18 сен 2019, 14:08

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

Сообщение BorisTheBlade » 18 сен 2019, 17:31

BorisTheBlade
 
Сообщений: 167
Зарегистрирован: 14 фев 2011, 15:24

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

Сообщение radeugen » 18 сен 2019, 17:49

Спасибо.
radeugen
 
Сообщений: 4
Зарегистрирован: 18 сен 2019, 14:08

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

Сообщение Repz » 19 сен 2019, 15:09

должно все без слипов работать, в консоле что по работе скрипта отображается?
для отладки после 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 );
Repz
 
Сообщений: 169
Зарегистрирован: 04 мар 2015, 12:35

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

Сообщение radeugen » 20 сен 2019, 15:21

Да я решил не заморачиваться с 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
radeugen
 
Сообщений: 4
Зарегистрирован: 18 сен 2019, 14:08

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

Сообщение BorisTheBlade » 20 сен 2019, 16:05

Можно прямо в диалплане:
exten => s,n, GotoIf($[${MATH(${STRFTIME(,,%U)}%2,int)}=0]?context1,s,1:context2,s,1)
BorisTheBlade
 
Сообщений: 167
Зарегистрирован: 14 фев 2011, 15:24

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

Сообщение radeugen » 27 сен 2019, 12:39

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

Спасибо, классно!
radeugen
 
Сообщений: 4
Зарегистрирован: 18 сен 2019, 14:08

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

Сообщение ded » 27 сен 2019, 13:34

radeugen, не цитируйте полностью предыдущее сообщение. Дурной тон. Не comme il' faut.
Порицание.
ded
 
Сообщений: 15803
Зарегистрирован: 26 авг 2010, 19:00


Вернуться в Вопросы новичков

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 44

© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH