Was this page helpful?

AGI: FastAGI~Asterisk-Java(in java)

    要整合 Java 的應用程式與 Asterisk 系統,最容易的方式就是透過 FastAGI 協定。安裝這個套件的主機稱為 AGI Application Server,這個不一定要與 Asterisk 使用在同一部機器上。

    Asterisk-Java 是一個基於 Java 設計的 FastAGI 套件,簡介如下:

    1. 使用 JDK 6 環境
    2. 通訊埠為 TCP 4573
    3. 開放的函式庫
    4. 支援 AGI & AMI 兩種 API
    5. 在最新的測試版本已支援 Skype for Asterisk 的應用

    官方連結:

    安裝 Asterisk-Java

    要作安裝的 Linux 必須先完成 JDK 的安裝。從 Asterisk-Java 官方下載穩定版 asterisk-java-0.3.1.jar。

    設定 Asterisk-Java

    設定這很簡單,只要新增一個目錄,例如 /root/asterisk-java,然後將下載的 asterisk-java-0.3.1.jar 以及開發的那些 AGIScript.java 都放在這個目錄下即可。

    啟動 Asterisk-Java

    cd /root/asterisk-java
    java -cp asterisk-java-0.3.1.jar:. org.asteriskjava.fastagi.DefaultAgiServer 

    如果服務啟動正常,會輸出這些訊息:

    Apr 20, 2011 2:21:30 PM org.asteriskjava.fastagi.DefaultAgiServer startup
    INFO: Thread pool started.
    Apr 20, 2011 2:21:30 PM org.asteriskjava.fastagi.DefaultAgiServer startup
    INFO: Listening on *:4573.
    

    以上是前景執行模式,若要類似 daemon 那樣背景執行,請自行編寫啟動檔即可。

    AGI Script 佈署

    注意事項:

    1. 所有以 java 開發的AGI 原始檔 *.java,必須先以 javac 作編譯。
    2. 所有編譯過的 AGI 檔,必須與主程式(asterisk-java.jar)放在同個目錄。
    3. java 原始檔的檔名必須與程式內容的宣告相同,否則會編譯錯誤。

     

    1. 新增一個 AGI script, HelloAgiScript.java:

    import org.asteriskjava.fastagi.AgiChannel;
    import org.asteriskjava.fastagi.AgiException;
    import org.asteriskjava.fastagi.AgiRequest;
    import org.asteriskjava.fastagi.BaseAgiScript;
    
    public class HelloAgiScript extends BaseAgiScript
    {
        public void service(AgiRequest request, AgiChannel channel)
                throws AgiException
        {
            // Answer the channel...
            answer();
                    
            // ...say hello...
            streamFile("welcome");
                    
            // ...and hangup.
            hangup();
        }
    }

    2. 編譯檔案

    javac -cp asterisk-java-0.3.1.jar HelloAgiScript.java
    

    註:

    • 輸出檔案為 HelloAgiScript.class
    • 檔名 HelloAgiScript.java 不可修改,否則編譯錯誤。

     

    3. 新增/編輯 fastagi-mapping.properties:

    hello.agi = HelloAgiScript

    註:hello.agi 這要與 asterisk 的 dialplan 對應;HelloAgiScript 這要與所開發的 AGI 內容對應。

    4. 啟動 Asterisk-Java

    5. 新增 Asterisk 的 Dialplan,這項必須在 Asterisk 主機上作。

    ...
    exten => 9002,1,Agi(agi://localhost/hello.agi)

    註:若 AGI  Server 與 Asterisk 在同一部機器,就要使用 localhost,否則將它替換成實際的 AGI Server 的 hostname/IP。

    6. 使用分機撥 9002

    Asterisk CLI Logs:

        -- Executing [[email protected]:1] AGI("SIP/100-00000009", "agi://localhost/hello.agi") in new stack
        -- Playing 'welcome' (escape_digits=) (sample_offset 0)
        -- <SIP/100-00000009>AGI Script agi://localhost/hello.agi completed, returning -1
        -- Executing [[email protected]:1] Macro("SIP/100-00000009", "hangupcall") in new stack
        -- Executing [[email protected]:1] GotoIf("SIP/100-00000009", "1?skiprg") in new stack
        -- Goto (macro-hangupcall,s,4)
        -- Executing [[email protected]:4] GotoIf("SIP/100-00000009", "1?skipblkvm") in new stack
        -- Goto (macro-hangupcall,s,7)
        -- Executing [[email protected]:7] GotoIf("SIP/100-00000009", "1?theend") in new stack
        -- Goto (macro-hangupcall,s,9)
        -- Executing [[email protected]:9] Hangup("SIP/100-00000009", "") in new stack
    

    AGI Server Logs:

    Apr 20, 2011 3:04:22 PM org.asteriskjava.fastagi.DefaultAgiServer startup
    INFO: Received connection from /127.0.0.1
    Apr 20, 2011 3:04:22 PM org.asteriskjava.fastagi.internal.AgiConnectionHandler runScript
    INFO: Begin AgiScript HelloAgiScript on Asterisk-Java DaemonPool-1-thread-2
    Apr 20, 2011 3:04:23 PM org.asteriskjava.fastagi.internal.AgiConnectionHandler runScript
    INFO: End AgiScript HelloAgiScript on Asterisk-Java DaemonPool-1-thread-2
    

     

    Was this page helpful?
    標籤 (Edit tags)
    • No tags
    查看第2個(總2個)評論: 查看所有
    Hi,我想問下linux下端口4573被其他應用佔用無法啟動 Asterisk-Java,是否能改Asterisk-Java的端口?
    發佈時間 11:43, 11 Feb 2012 ()
    可以,官方的教學有說明。
    發佈時間 22:12, 12 Feb 2012 ()
    查看第2個(總2個)評論: 查看所有
    您必須 登入 才能發佈評論。
    Powered by MindTouch Core