首頁 > 新聞 > 專家觀點(diǎn) >

《FreeSWITCH 1.2》:探討XML高級(jí)配置

2014-04-28 15:41:13   作者:   來源:CTI論壇   評(píng)論:0  點(diǎn)擊:


  到目前為止,我們一直在使用FreeSWITCH默認(rèn)安裝的靜態(tài)XML實(shí)例配置文件。在這個(gè)章節(jié),我們將進(jìn)一步演示如何在使用最少靜態(tài)XML的情況下,來靈活配置FreeSWITCH。FreeSWITCH 提供了多種方法讓用戶可以對(duì)FreeSWITCH實(shí)行動(dòng)態(tài)控制。每一種方法關(guān)注的領(lǐng)域不同,一些函數(shù)的功能可能有所重疊。例如,mod_xml_curl 和語言綁定都支持用戶創(chuàng)建動(dòng)態(tài)的配置文件。在這一章節(jié),我們將涵蓋以下幾種方法:

  · mod_xml_curl: 這個(gè)模塊支持從web服務(wù)器提取一個(gè)配置文件。配置文件包括撥號(hào)規(guī)則,用戶目錄,和基本配置文件。在服務(wù)器出現(xiàn)問題時(shí),它也可以通過一個(gè)靜態(tài)的回退形式來支持一個(gè)動(dòng)態(tài)的配置。

  · Language bindings: 工作方法類似于mod_xml_curl,  用戶可以使用系統(tǒng)支持的腳本語言(Lua, Perl, Java, Python, 和其他語言)來生成一個(gè)動(dòng)態(tài)配置。

  · originate API: originate API工作的方式比較獨(dú)特,它可以在系統(tǒng)中創(chuàng)建一個(gè)新的電話呼叫,因此取名為originate. 我們將通過fs_cli 簡單演示如何通過originate API創(chuàng)建一個(gè)呼叫。

  Event Socket/ESL: Event Socket和ESL(Event Socket Library)提供了一個(gè)強(qiáng)大的機(jī)制,可以對(duì)FreeSWITCH進(jìn)行控制。在這一章節(jié),我們將簡要介紹Event Socket,在第十章,通過外部手段控制FreeSWITCH中,我們將做詳細(xì)討論。

  mod_xml_curl基礎(chǔ)

  mod_xml_curl模塊借用了著名的cURL庫 (curl.haxx.se)從web 服務(wù)器提取XML配置文件。FreeSWITCH 可以及時(shí)解析這些文件,作為靜態(tài)XML配置文件使用。因?yàn)橛脩艨梢钥刂苭eb服務(wù)器,用戶可以從請(qǐng)求中的獲得XML,然后修改這些XML文件。當(dāng)用戶需要從同一臺(tái)web 服務(wù)器配置多臺(tái)FreeSWITCH時(shí),這種方式對(duì)用戶來說非常有幫助。這樣設(shè)置的好處是可以通過修改一個(gè)地方來控制整個(gè)服務(wù)器集群。

  所有在這一章節(jié)的mod_xml_curl舉例以前web 服務(wù)器可以運(yùn)行PHP腳本。這些舉例已經(jīng)在Apache2 和mod_php測試,因此可以在Linux/UNIX 和Windows運(yùn)行。

  為了讓mod_xml_curl 在FreeSWITCH 啟動(dòng)時(shí)成功加載,需要完成以下幾步:

  1.使用編輯器,打開conf/autoload_configs/modules.conf.xml 文件,添加mod_ xml_curl 模塊:

  <load module="mod_xml_curl"/>

  2.保存文件。

  就像用戶想象的那樣,我們必須對(duì)FreeSWITCH 提供一個(gè)URL,確?梢酝ㄟ^這個(gè)URL 提取需要的配置文件。我們可以編輯文件xml_curl.conf.xml 來實(shí)現(xiàn),執(zhí)行以下幾步。

  3.使用編輯器,打開文件conf/autoload_configs/xml_curl.conf.xml,添加下面的配置:

  <configuration name="xml_curl.conf" description="curl

  conf">

  <bindings>

    <binding name="arbitrary_name">

      <param name="gateway-url"

      value="http://localhost/xml_curl/index.php"

      bindings="configuration|dialplan|directory"/>

    </binding>

   </bindings>

  </configuration>

  4. 保存文件。

  5. 重新啟動(dòng)FreeSWITCH。

  用戶可以自定義binding name 屬性,建議這個(gè)屬性具有可讀性。在binding中的param支持一個(gè)URL值,這個(gè)URL獲得名次請(qǐng)求的配置文件內(nèi)容。在我們的例子中,使用了本地的PHP腳本,但是,用戶可以使用一個(gè)公網(wǎng)的web服務(wù)器。就像用戶看到的一樣,我們選擇了FreeSWITCH 環(huán)境的configuration,dialplan和directory 作為web服務(wù)器的一個(gè)頁面請(qǐng)求。

  非常關(guān)鍵的地方是,當(dāng)FreeSWITCH 從用戶的基本獲得一個(gè)請(qǐng)求時(shí),這個(gè)腳本可能不知道如何做出回復(fù)。使用以下的回復(fù)來告訴FreeSWITCH ,腳本不知道如何處理這個(gè)請(qǐng)求,用戶可以通過在本地配置文件設(shè)置:

  <?xml version="1.0" encoding="UTF-8" standalone="no"?>

  <document type="freeswitch/xml">

   <section name="result">

    <result status="not found"/>

   </section>

  </document>

  這樣的方式非常有助于我們問題的處理,例如,用戶想在撥號(hào)規(guī)則中處理幾個(gè)Extensions或者contexts,或用戶僅想對(duì)幾個(gè)模塊支持一些特別的選項(xiàng)。在接下來的部分,我們將演示一些完全可以按照我們要求來執(zhí)行的例子。首先,我們將介紹index.php文件,這個(gè)文件負(fù)責(zé)對(duì)所有請(qǐng)求的驅(qū)動(dòng)。把以下文件保存為index.php, 保存在服務(wù)器上一個(gè)正確的路徑······

  未完待續(xù)······

分享到: 收藏

專題