Путем дальнейшего изучения логов и включения логирование всего и вся
увидел следующее сообщение в логах:
Код: Выделить всё
Delaying retry since we're currently running '/var/spool/asterisk/outgoing/file_name
которое постоянно повторялось и это в любом случае (удачное попадание звонка в очередь или же нет) Так же посмотрев в папку, я увидел что call-файл не удалился, хотя по идее должен был (но в логе как раз и пишет что удалить неполучаеться, пока занят). После этого я попробовал разные варианты и переделал к следующему виду:
Код: Выделить всё
context in-context {
_X. => {
NoOp("Call callback");
System(/etc/asterisk/callback.sh ${CALLERID(num)} ${CHANNEL:0:7}) ;
Hangup();
};
};
сам файл генерации call-файла принял следующий вид:
Код: Выделить всё
#!/usr/bin/php -q
<?php
ob_implicit_flush(true);
set_time_limit(0);
$number = $argv[1];
$channel=$argv[2];
$cf = fopen("/tmp/".$number,"w+");
fputs($cf,"Channel: ".$channel."/".$number."\n");
fputs($cf,"Context: callback\n");
fputs($cf,"Extension: 333\n");
fputs($cf,"CallerID:".$number."\n");
fputs($cf,"MaxRetries: 10\n");
fputs($cf,"RetryTime: 40\n");
fputs($cf,"WaitTime: 30\n");
fclose($cf);
touch("/tmp/".$number,time()+60);
exec("mv /tmp/".$number." /var/spool/asterisk/outgoing/".$number);
то есть раньше канал был вида Local/number@operator_out
принял вид channel/number где channel береться из входящего звонка, это строка вида SIP/101
в теперешнем варианте контекст operator_out не используеться и исходящий звонок от астериска идет через тот же канал через который был входящий. В таком случае колбек отрабатывает нормально, из всех тестов звонки попадали в очередь без проблем, единственное что теперь конешно исходящий звонок всегда идет по тому каналу по которому был входящий а не маршрутизируеться через контекст. Call-файлы начали корректно удаляться. К сожалению, я не нашел хорошей информации, о том как правильно использовать Channel в call-файле. Если это возможно, можно указать в чем была ошибка в предыдущем варианте реализации
Код: Выделить всё
context operator-out {
_0[69]3XXXXXXX => {
Set(VOLUME(TX)=7);
Set(VOLUME(RX)=7);
Dial(SIP/204/${EXTEN},120);
Hangup();
};
_050XXXXXXX => {
Set(VOLUME(TX)=7);
Set(VOLUME(RX)=7);
Dial(SIP/101/${EXTEN},120);
if ("${DIALSTATUS}" = "ANSWER") {
HangUp(17);
};
if ("${DIALSTATUS}" = "BUSY") {
HangUp(17);
};
Dial(SIP/303/${EXTEN},120);
if ("${DIALSTATUS}" = "ANSWER") {
HangUp(17);
};
if ("${DIALSTATUS}" = "BUSY") {
HangUp(17);
};
Dial(SIP/302/${EXTEN},120);
if ("${DIALSTATUS}" = "ANSWER") {
HangUp(17);
};
if ("${DIALSTATUS}" = "BUSY") {
HangUp(17);
};
Dial(SIP/301/${EXTEN},120);
HangUp(17);
};
_066XXXXXXX => {
Set(VOLUME(TX)=7);
Set(VOLUME(RX)=7);
Dial(SIP/101/${EXTEN},120);
if ("${DIALSTATUS}" = "ANSWER") {
HangUp(17);
};
if ("${DIALSTATUS}" = "BUSY") {
HangUp(17);
};
Dial(SIP/303/${EXTEN},120);
if ("${DIALSTATUS}" = "ANSWER") {
HangUp(17);
};
if ("${DIALSTATUS}" = "BUSY") {
HangUp(17);
};
Dial(SIP/302/${EXTEN},120);
if ("${DIALSTATUS}" = "ANSWER") {
HangUp(17);
};
if ("${DIALSTATUS}" = "BUSY") {
HangUp(17);
};
Dial(SIP/301/${EXTEN},120);
HangUp(17);
};
_09[59]XXXXXXX => {
Set(VOLUME(TX)=7);
Set(VOLUME(RX)=7);
Dial(SIP/101/${EXTEN},120);
if ("${DIALSTATUS}" = "ANSWER") {
HangUp(17);
};
if ("${DIALSTATUS}" = "BUSY") {
HangUp(17);
};
Dial(SIP/303/${EXTEN},120);
if ("${DIALSTATUS}" = "ANSWER") {
HangUp(17);
};
if ("${DIALSTATUS}" = "BUSY") {
HangUp(17);
};
Dial(SIP/302/${EXTEN},120);
if ("${DIALSTATUS}" = "ANSWER") {
HangUp(17);
};
if ("${DIALSTATUS}" = "BUSY") {
HangUp(17);
};
Dial(SIP/301/${EXTEN},120);
HangUp(17);
};
_06[78]XXXXXXX => {
Set(VOLUME(TX)=7);
Set(VOLUME(RX)=7);
Dial(SIP/203/${EXTEN},120);
if ("${DIALSTATUS}" = "ANSWER") {
HangUp(17);
};
if ("${DIALSTATUS}" = "BUSY") {
HangUp(17);
};
Dial(SIP/202/${EXTEN},120);
if ("${DIALSTATUS}" = "ANSWER") {
HangUp(17);
};
if ("${DIALSTATUS}" = "BUSY") {
HangUp(17);
};
Dial(SIP/201/${EXTEN},120);
HangUp(17);
};
_09[6-8]XXXXXXX => {
Set(VOLUME(TX)=7);
Set(VOLUME(RX)=7);
Dial(SIP/203/${EXTEN},120);
if ("${DIALSTATUS}" = "ANSWER") {
HangUp(17);
};
if ("${DIALSTATUS}" = "BUSY") {
HangUp(17);
};
Dial(SIP/202/${EXTEN},120);
if ("${DIALSTATUS}" = "ANSWER") {
HangUp(17);
};
if ("${DIALSTATUS}" = "BUSY") {
HangUp(17);
};
Dial(SIP/201/${EXTEN},120);
HangUp(17);
};
};