Выполнение AGI скрипта на PHP
Добавлено: 17 июн 2022, 12:02
Добрый день!
Пытаюсь написать простенький php скрипт для обращения к API "Яндекс. Поиск по организациям"
Цель: При входящем звонке через API получать название организации по CALLERID звонящего.
Для связи с Asterisk использую phpagi.php
Проблема следующая:
Скрипт обращается к API через curl, далее получает в качестве ответа JSON, из которого вытаскивает значение поля "name"
При запуске скрипта из shell и отправки ему номера в качестве аргумента все работает корректно.
При попытке запускать скрипт из Asterisk через agi не отрабатывает curl, соответственно поле "name" остается пустым.
Пробовал в скрипте выводить результаты curl в файл - файл не создается.
Вот сам скрипт:
Вызов скрипта из диалплана
Вывод из консоли CLI
Права на testagi1.php выставил
Наличие phpagi.php проверил
Скрипт запускается на FreePBX 15
На самом деле получать name можно было бы и сразу из диалплана через команду SHELL, но хочется освоить работу через AGI интерфейс
Буду очень признателен, если вы поможете или подскажете, что проверить\изменить для корректной работы
Пытаюсь написать простенький php скрипт для обращения к API "Яндекс. Поиск по организациям"
Цель: При входящем звонке через API получать название организации по CALLERID звонящего.
Для связи с Asterisk использую phpagi.php
Проблема следующая:
Скрипт обращается к API через curl, далее получает в качестве ответа JSON, из которого вытаскивает значение поля "name"
При запуске скрипта из shell и отправки ему номера в качестве аргумента все работает корректно.
При попытке запускать скрипт из Asterisk через agi не отрабатывает curl, соответственно поле "name" остается пустым.
Пробовал в скрипте выводить результаты curl в файл - файл не создается.
Вот сам скрипт:
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER:
#!/usr/bin/php -q
<?php
require('phpagi.php');.
$agi = new AGI(); //подключаем файл phpagi.php
$stdin = fopen('php://stdin', 'r');
$stdout = fopen('php://stdout', 'w');
$stdlog = fopen('my_agi.log', 'w');
$cid = $agi->request['agi_callerid']; // берем из AGI номер звонящего
$apiresponse=`/usr/bin/curl "https://search-maps.yandex.ru/v1/?apikey=<мой апи ключ>&text=$cid&lang=ru_RU&type=biz&results=1"`;
$jarr=json_decode($apiresponse, TRUE);
if ($jarr['properties']['ResponseMetaData']['SearchResponse']['found'] != 0) {
$name = $jarr['features'][0]['properties']['name'];
};
shell_exec(echo $jdecode >> /tmp/testagi);
$agi->set_variable("name", $name);
$agi->set_variable("agicid", $cid);
$agi->set_variable("agicid1", $argv[1]);
fclose ($stdin);
fclose ($stdlog);
exit(0);
?>
<?php
require('phpagi.php');.
$agi = new AGI(); //подключаем файл phpagi.php
$stdin = fopen('php://stdin', 'r');
$stdout = fopen('php://stdout', 'w');
$stdlog = fopen('my_agi.log', 'w');
$cid = $agi->request['agi_callerid']; // берем из AGI номер звонящего
$apiresponse=`/usr/bin/curl "https://search-maps.yandex.ru/v1/?apikey=<мой апи ключ>&text=$cid&lang=ru_RU&type=biz&results=1"`;
$jarr=json_decode($apiresponse, TRUE);
if ($jarr['properties']['ResponseMetaData']['SearchResponse']['found'] != 0) {
$name = $jarr['features'][0]['properties']['name'];
};
shell_exec(echo $jdecode >> /tmp/testagi);
$agi->set_variable("name", $name);
$agi->set_variable("agicid", $cid);
$agi->set_variable("agicid1", $argv[1]);
fclose ($stdin);
fclose ($stdlog);
exit(0);
?>
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER:
same => n,AGI(testagi1.php,7${CALLERID(num)})
same => n,Noop(/-------------------\)
same => n,Noop(|Name is: ${outname}|)
same => n,Noop(|AGI Name is: ${name}|)
same => n,Noop(|AGI CID is: ${agicid}|)
same => n,Noop(|AGI arg is: ${agicid1}|)
same => n,Noop(\-------------------/)
same => n,Noop(/-------------------\)
same => n,Noop(|Name is: ${outname}|)
same => n,Noop(|AGI Name is: ${name}|)
same => n,Noop(|AGI CID is: ${agicid}|)
same => n,Noop(|AGI arg is: ${agicid1}|)
same => n,Noop(\-------------------/)
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER:
-- Executing [s@macro-incoming:6] AGI("DAHDI/i1/4957877272-31a2", "testagi1.php,74957877272") in new stack
-- Launched AGI Script /var/lib/asterisk/agi-bin/testagi1.php
<DAHDI/i1/4957877272-31a2>AGI Tx >> agi_request: testagi1.php
<DAHDI/i1/4957877272-31a2>AGI Tx >> agi_channel: DAHDI/i1/4957877272-31a2
<DAHDI/i1/4957877272-31a2>AGI Tx >> agi_language: ru
<DAHDI/i1/4957877272-31a2>AGI Tx >> agi_type: DAHDI
<DAHDI/i1/4957877272-31a2>AGI Tx >> agi_uniqueid: 1655455822.160021
<DAHDI/i1/4957877272-31a2>AGI Tx >> agi_version: 16.20.0
<DAHDI/i1/4957877272-31a2>AGI Tx >> agi_callerid: 4957877272
<DAHDI/i1/4957877272-31a2>AGI Tx >> agi_calleridname: unknown
<DAHDI/i1/4957877272-31a2>AGI Tx >> agi_callingpres: 1
<DAHDI/i1/4957877272-31a2>AGI Tx >> agi_callingani2: 0
<DAHDI/i1/4957877272-31a2>AGI Tx >> agi_callington: 33
<DAHDI/i1/4957877272-31a2>AGI Tx >> agi_callingtns: 0
<DAHDI/i1/4957877272-31a2>AGI Tx >> agi_dnid: 686
<DAHDI/i1/4957877272-31a2>AGI Tx >> agi_rdnis: unknown
<DAHDI/i1/4957877272-31a2>AGI Tx >> agi_context: macro-incoming
<DAHDI/i1/4957877272-31a2>AGI Tx >> agi_extension: s
<DAHDI/i1/4957877272-31a2>AGI Tx >> agi_priority: 6
<DAHDI/i1/4957877272-31a2>AGI Tx >> agi_enhanced: 0.0
<DAHDI/i1/4957877272-31a2>AGI Tx >> agi_accountcode:
<DAHDI/i1/4957877272-31a2>AGI Tx >> agi_threadid: 139768320100096
<DAHDI/i1/4957877272-31a2>AGI Tx >> agi_arg_1: 74957877272
<DAHDI/i1/4957877272-31a2>AGI Tx >>
<DAHDI/i1/4957877272-31a2>AGI Script testagi1.php completed, returning 0
...
-- Executing [s@macro-incoming:12] NoOp("DAHDI/i1/4957877272-31a2", "/-------------------\") in new stack
-- Executing [s@macro-incoming:14] NoOp("DAHDI/i1/4957877272-31a2", "|AGI Name is: |") in new stack
-- Executing [s@macro-incoming:15] NoOp("DAHDI/i1/4957877272-31a2", "|AGI CID is: |") in new stack
-- Executing [s@macro-incoming:16] NoOp("DAHDI/i1/4957877272-31a2", "|AGI arg is: |") in new stack
-- Executing [s@macro-incoming:19] NoOp("DAHDI/i1/4957877272-31a2", "\-------------------/") in new stack
-- Launched AGI Script /var/lib/asterisk/agi-bin/testagi1.php
<DAHDI/i1/4957877272-31a2>AGI Tx >> agi_request: testagi1.php
<DAHDI/i1/4957877272-31a2>AGI Tx >> agi_channel: DAHDI/i1/4957877272-31a2
<DAHDI/i1/4957877272-31a2>AGI Tx >> agi_language: ru
<DAHDI/i1/4957877272-31a2>AGI Tx >> agi_type: DAHDI
<DAHDI/i1/4957877272-31a2>AGI Tx >> agi_uniqueid: 1655455822.160021
<DAHDI/i1/4957877272-31a2>AGI Tx >> agi_version: 16.20.0
<DAHDI/i1/4957877272-31a2>AGI Tx >> agi_callerid: 4957877272
<DAHDI/i1/4957877272-31a2>AGI Tx >> agi_calleridname: unknown
<DAHDI/i1/4957877272-31a2>AGI Tx >> agi_callingpres: 1
<DAHDI/i1/4957877272-31a2>AGI Tx >> agi_callingani2: 0
<DAHDI/i1/4957877272-31a2>AGI Tx >> agi_callington: 33
<DAHDI/i1/4957877272-31a2>AGI Tx >> agi_callingtns: 0
<DAHDI/i1/4957877272-31a2>AGI Tx >> agi_dnid: 686
<DAHDI/i1/4957877272-31a2>AGI Tx >> agi_rdnis: unknown
<DAHDI/i1/4957877272-31a2>AGI Tx >> agi_context: macro-incoming
<DAHDI/i1/4957877272-31a2>AGI Tx >> agi_extension: s
<DAHDI/i1/4957877272-31a2>AGI Tx >> agi_priority: 6
<DAHDI/i1/4957877272-31a2>AGI Tx >> agi_enhanced: 0.0
<DAHDI/i1/4957877272-31a2>AGI Tx >> agi_accountcode:
<DAHDI/i1/4957877272-31a2>AGI Tx >> agi_threadid: 139768320100096
<DAHDI/i1/4957877272-31a2>AGI Tx >> agi_arg_1: 74957877272
<DAHDI/i1/4957877272-31a2>AGI Tx >>
<DAHDI/i1/4957877272-31a2>AGI Script testagi1.php completed, returning 0
...
-- Executing [s@macro-incoming:12] NoOp("DAHDI/i1/4957877272-31a2", "/-------------------\") in new stack
-- Executing [s@macro-incoming:14] NoOp("DAHDI/i1/4957877272-31a2", "|AGI Name is: |") in new stack
-- Executing [s@macro-incoming:15] NoOp("DAHDI/i1/4957877272-31a2", "|AGI CID is: |") in new stack
-- Executing [s@macro-incoming:16] NoOp("DAHDI/i1/4957877272-31a2", "|AGI arg is: |") in new stack
-- Executing [s@macro-incoming:19] NoOp("DAHDI/i1/4957877272-31a2", "\-------------------/") in new stack
Права на testagi1.php выставил
Наличие phpagi.php проверил
Скрипт запускается на FreePBX 15
На самом деле получать name можно было бы и сразу из диалплана через команду SHELL, но хочется освоить работу через AGI интерфейс
Буду очень признателен, если вы поможете или подскажете, что проверить\изменить для корректной работы