Назад | Перейти на главную страницу

Asterisk AGI случайным образом возвращает 4 и не может выполнить PHP AGI

У меня есть PHP-скрипт, который я выполняю 2–3 раза за время жизни одного вызова, если он входящий, он будет выполняться один раз для очереди, один раз для начала вызова и последний раз для завершения вызова. Для исходящих он пропускает стадию очереди (очевидно).

Примерно 1 из 1000–2000 звонков о последнем событии, завершении разговора, ошибках, похоже, не существует во времени или условиях вызова.

В логах вот что я получаю (убрал шум)

-- Executing [h@sub-queue-bookings:1] Set("SIP/CL-000298d4", "CALLWHEN=END") in new stack
-- Executing [h@sub-queue-bookings:2] AGI("SIP/CL-000298d4", "presence_2.php") in new stack
-- Launched AGI Script /var/lib/asterisk/agi-bin/presence_2.php
AGI Tx >> agi_request: presence_2.php
AGI Tx >> agi_channel: SIP/CL-000298d4
AGI Tx >> agi_language: en_AU
AGI Tx >> agi_type: SIP
AGI Tx >> agi_uniqueid: 1405038747.11111
AGI Tx >> agi_version: 1.8.5.0
AGI Tx >> agi_callerid: anonymous
AGI Tx >> agi_calleridname: NZ anonymous
AGI Tx >> agi_callingpres: 0
AGI Tx >> agi_callingani2: 0
AGI Tx >> agi_callington: 0
AGI Tx >> agi_callingtns: 0
AGI Tx >> agi_dnid: anonymous
AGI Tx >> agi_rdnis: unknown
AGI Tx >> agi_context: sub-queue-bookings
AGI Tx >> agi_extension: h
AGI Tx >> agi_priority: 2
AGI Tx >> agi_enhanced: 0.0
AGI Tx >> agi_accountcode: 
AGI Tx >> agi_threadid: 139985928873744
AGI Tx >> 
-- AGI Script presence_2.php completed, returning 4

Я добавил в скрипт функцию регистрации, чтобы писать в скрипт всякий раз, когда он запускается, до того, как будет включена библиотека AGI (PHPAgi), при возникновении этой ошибки она не записывает в журнал. Так что я не верю, что это как-то связано с сообщением AGI в сценарии.

Файл extension.conf, вызывающий скрипт, выглядит так:

;Hangup Event
exten => h,1,Set(CALLWHEN=END)
exten => h,n,AGI(presence_2.php) 

Я также включил в скрипт PHP следующее, чтобы предотвратить его отключение (похоже, это не имело значения):

/* Evil Process Block Fixing Code */
declare(ticks = 1);
pcntl_signal(SIGHUP, SIG_IGN);
pcntl_signal(SIGPIPE, SIG_IGN);
pcntl_signal(SIGILL, SIG_IGN);
pcntl_signal(SIGQUIT, SIG_IGN);
pcntl_signal(SIGABRT, SIG_IGN);
pcntl_signal(SIGSEGV, SIG_IGN);
pcntl_signal(SIGTERM, SIG_IGN);

Какой совет можно мне дать, чтобы этого не случилось? (Добавьте что-нибудь в PHP-скрипт, отметьте x, перепишите файл extensions.conf, запишите дополнительную информацию и т. Д.). Я довольно озадачен, я погуглил и обнаружил, что несколько человек испытывают почти то же самое, что и я, но никаких решений, кроме "разобраться с этим" ...


Вот как выглядит "обычное" выполнение AGI:

 -- Executing [h@sub-queue-sales:1] Set("SIP/CL-00029e74", "CALLWHEN=END") in new stack
 -- Executing [h@sub-queue-sales:2] AGI("SIP/CL-00029e74", "presence_2.php") in new stack
 -- Launched AGI Script /var/lib/asterisk/agi-bin/presence_2.php
<SIP/CL-00029e74>AGI Tx >> agi_request: presence_2.php
<SIP/CL-00029e74>AGI Tx >> agi_channel: SIP/CL-00029e74
<SIP/CL-00029e74>AGI Tx >> agi_language: en_AU
<SIP/CL-00029e74>AGI Tx >> agi_type: SIP
<SIP/CL-00029e74>AGI Tx >> agi_uniqueid: 1405134386.171952
<SIP/CL-00029e74>AGI Tx >> agi_version: 1.8.5.0
<SIP/CL-00029e74>AGI Tx >> agi_callerid: 000000000
<SIP/CL-00029e74>AGI Tx >> agi_calleridname: 000000000
<SIP/CL-00029e74>AGI Tx >> agi_callingpres: 0
<SIP/CL-00029e74>AGI Tx >> agi_callingani2: 0
<SIP/CL-00029e74>AGI Tx >> agi_callington: 0
<SIP/CL-00029e74>AGI Tx >> agi_callingtns: 0
<SIP/CL-00029e74>AGI Tx >> agi_dnid: 000000000
<SIP/CL-00029e74>AGI Tx >> agi_rdnis: unknown
<SIP/CL-00029e74>AGI Tx >> agi_context: sub-queue-sales
<SIP/CL-00029e74>AGI Tx >> agi_extension: h
<SIP/CL-00029e74>AGI Tx >> agi_priority: 2
<SIP/CL-00029e74>AGI Tx >> agi_enhanced: 0.0
<SIP/CL-00029e74>AGI Tx >> agi_accountcode: 
<SIP/CL-00029e74>AGI Tx >> agi_threadid: 139987080693520
<SIP/CL-00029e74>AGI Tx >> 
<SIP/CL-00029e74>AGI Rx << GET VARIABLE UNIQUEID
<SIP/CL-00029e74>AGI Tx >> 200 result=1 (1405134386.171952)
<SIP/CL-00029e74>AGI Rx << GET VARIABLE UNIQUEID
<SIP/CL-00029e74>AGI Tx >> 200 result=1 (1405134386.171952)
<SIP/CL-00029e74>AGI Rx << VERBOSE "Started: 1405134386.171952" 1
 presence_2.php: Started: 1405134386.171952
........ lots of events and communcation with AGI ........
<SIP/CL-00029e74>AGI Tx >> 200 result=1
 -- <SIP/CL-00029e74>AGI Script presence_2.php completed, returning 0

ПРИМЕЧАНИЕ. Я удалил всю идентифицирующую информацию из этих журналов. ПРИМЕЧАНИЕ 2: Запуск Asterisk 1.8.5.

Код возврата AGI = код возврата используемого скрипта.

Поэтому проверьте в своем сценарии присутствие_2.php, если / когда он имеет команду exit (4).

Для получения дополнительной информации сделайте

1) стоп звездочку

2) запустить звездочку через

asterisk -vvvvc

Если это так, вы увидите ошибку скрипта на консоли.