2012-03-07 2 views
1

私は最近、cakePHPを使用して構築されたアプリケーション用のアスタリスクベースのIVRを構築する必要がありました。PHPAGI CakePHP SHELLを使って

私はケーキ(脂肪)モデルを使いたいので、ビジネスロジックを書き直す必要はありません。

私は、アスタリスクダイヤルプランから呼び出されるcakePHPシェルを作成したかったのです。

ここに私がしたことがあります。

ダウンロードされたphpagiをvendors/phpagiにダウンロードしました。

修正phpagi.php

function AGI($config=NULL, $optconfig=array()) 

からに:

function AGI($config=NULL, $optconfig=array(), $stdin, $stdout) 

ので、私は、標準入出力を設定することができます。ライン167の周りに私はまた

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(){ 

    } 

を追加し、アプリケーションのコードが入っている

App::import('Vendor', 'AGI', array('phpagi/phpagi.php')); 

追加vendors/shellsに私のシェルで

$this->in = $stdin; 
    $this->out = $stdout; 

$this->in = defined('STDIN') ? STDIN : fopen('php://stdin', 'r'); 
    $this->out = defined('STDOUT') ? STDOUT : fopen('php://stdout', 'w'); 

を変更しました

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/) 

はケーキのdirsのパーミッションを修正することを確認しています。

誰かがこれを行う方法が他にありましたか?

+0

私はstdinとstdoutについて混乱しています。なぜこれを追加していますか? –

+0

それはうまくいくのですか?私はDispatchがstdoutをつかむと思った。 – josephtikva1

+0

私はあなたがargsを使うことができると信じている。 –

答えて

2

Here is a classあなたのためにすべての仕事を手渡すでしょう。最も一般的なAsterisk GUIであるFreePBXによって維持され、FreePBX全体で広く使用されています。

+0

Mosheありがとう、私はそれを使用しています。 (Yossel M) – josephtikva1

+0

ヨッセル!すぐ次の時間に私を打つ:) p.s.ヌ?同意する? Upvote? – Mbrevda