Недавно мне нужно было создать IVR на основе звездочки для приложения, созданного с использованием cakePHP.
Я хотел использовать (толстые) модели тортов, поэтому мне не пришлось бы переписывать бизнес-логику.
Я хотел создать оболочку cakePHP, которая будет вызываться из диалплана звездочки.
Вот что я сделал.
Загруженные phpagi для поставщиков / phpagi.
Измененный phpagi.php из
function AGI($config=NULL, $optconfig=array())
в:
function AGI($config=NULL, $optconfig=array(), $stdin, $stdout)
чтобы я мог установить стандартный ввод и стандартный вывод.Вокруг строки 167 я изменил
$this->in = defined('STDIN') ? STDIN : fopen('php://stdin', 'r');
$this->out = defined('STDOUT') ? STDOUT : fopen('php://stdout', 'w');
На
$this->in = $stdin;
$this->out = $stdout;
В своей оболочке в vendors/shells
Я добавил
App::import('Vendor', 'AGI', array('phpagi/phpagi.php'));
Я также добавил
var $agi;
//redirect output through agi conlog
function err($message,$newlines = 1){
$this->agi->conlog($message);
}
function out($message, $newlines =1){
$this->agi->conlog($message);
}
//disable default message
function startup(){
}
и код приложения находится в
function main(){
$this->agi = new AGI(NULL, array(), $this->Dispatch->stdin,$this->Dispatch->stdout);
$this->agi->answer();
//do stuff here
}
, и для запуска этого в диалплане все, что вам нужно сделать, это
exten => s,n,AGI(${full/path/to/cake.php},${shellname},-app,${var/www/html/{appname}/app},-console,var/www/html/{appname}/cake/console/)
Убедитесь, что исправили разрешения для dir тортов.
Мне было интересно, есть ли у кого-нибудь еще способы сделать это?