PHPAGI, использующий CakePHP SHELL - PullRequest
1 голос
/ 07 марта 2012

Недавно мне нужно было создать 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 тортов.

Мне было интересно, есть ли у кого-нибудь еще способы сделать это?

1 Ответ

2 голосов
/ 08 марта 2012

Вот класс , который будет обрабатывать всю работу для вас.Он поддерживается FreePBX - самым популярным графическим интерфейсом Asterisk и широко используется в FreePBX.

...