• <strike id="fdgpu"><input id="fdgpu"></input></strike>
    <label id="fdgpu"></label>
    <s id="fdgpu"><code id="fdgpu"></code></s>

  • <label id="fdgpu"></label>
  • <span id="fdgpu"><u id="fdgpu"></u></span>

    <s id="fdgpu"><sub id="fdgpu"></sub></s>
     首頁 > 新聞 > 專家觀點(diǎn) >

    《FreeSWITCH: VoIP實(shí)戰(zhàn)》:使用 XML 建立 IVR

    2012-08-23 13:37:03   作者:杜金房   來源:FreeSWITCH    評(píng)論:0  點(diǎn)擊:


      IVR的全稱的Interactive Voice Response,就是我們經(jīng)常說的電話語音菜單。FreeSWITCH支持非常強(qiáng)大的語音菜單──你可以寫簡(jiǎn)單的XML,或更靈活的Lua,當(dāng)然還有Event Socket,Erlang Socket等等。

      這里,簡(jiǎn)單介紹一下XML。其實(shí)語音菜單說來也簡(jiǎn)單,說難也難。讓我們先來一個(gè)感性的認(rèn)識(shí)--其實(shí),F(xiàn)reeSWITCH默認(rèn)的配置已包含了一個(gè)功能齊全的例子,隨便拿起一個(gè)分機(jī),撥5000,就可以聽到菜單提示了,當(dāng)然,默認(rèn)的提示是英文的,大意是說歡迎來到FreeSWITCH,撥1進(jìn)入FreeSWITCH會(huì)議;撥2進(jìn)入回音(echo)程序,這時(shí)候可以聽到自己的回音;撥3聽等待音樂(MOH,Music on Hold),撥4會(huì)轉(zhuǎn)到FreeSWITCH開發(fā)者Brian West的SIP電話上;撥5你會(huì)聽到一只尖叫的猴子;撥6進(jìn)入下級(jí)菜單;撥9重聽,撥1000-1019之間的號(hào)碼則會(huì)轉(zhuǎn)到對(duì)應(yīng)分機(jī)。

      最簡(jiǎn)單的菜單

      感受這些之后,讓我們先來配置一種最簡(jiǎn)單的情形。一些廉價(jià)的企業(yè)小交換機(jī)通常只能提供這點(diǎn)功能──“您好,歡迎致電XX公司,請(qǐng)直撥分機(jī)號(hào),查號(hào)請(qǐng)撥0”。在此,我們假定使用FreeSWITCH的默認(rèn)配置,分機(jī)號(hào)為1000-1019,前臺(tái)分機(jī)號(hào)為0,撥0則轉(zhuǎn)人工臺(tái),查號(hào)或轉(zhuǎn)接其它分機(jī)。

      系統(tǒng)默認(rèn)的配置文件存放在/usr/local/freesiwtch/conf/autoload_configs/ivr.conf,配置文件是XML格式,菜單放到 中,而每一個(gè)即是一個(gè)菜單。并且,每個(gè)menu應(yīng)該有一個(gè)唯一的名字(name),以便在撥號(hào)計(jì)劃(dialplan)中引用。

    <configuration name="ivr.conf" description="IVR menus">
      <menus>
        <menu name="demo_ivr">
        </menu>
      </menus>
    </configuration>

    好,我們先來實(shí)現(xiàn)上述最簡(jiǎn)單的menu:

    <menu name="welcome"
        greet-long="custom/welcome.wav"
        greet-short="custom/welcom_short.wav"
        invalid-sound="ivr/ivr-that_was_an_invalid_entry.wav"
        exit-sound="voicemail/vm-goodbye.wav"
        timeout="15000"
        max-failures="3"
        max-timeouts="3"
        inter-digit-timeout="2000"
        digit-len="4">

        <entry action="menu-exec-app" digits="0" param="transfer 1000 XML default"/>
        <entry action="menu-exec-app" digits="/^(10[01][0-9])$/" param="transfer $1 XML default"/>

    </menu>

      我們指定菜單的名字是welcome,greet-long即為最開始播放的語音--“您好,歡迎致電XX公司,請(qǐng)直撥分機(jī)號(hào),查號(hào)請(qǐng)撥0”,該語音文件默認(rèn)的位置應(yīng)該是/usr/local/freeswitch/sounds/,所以,您應(yīng)該事先把聲音文件錄好,放到custom/welcome.wav(當(dāng)然,你也可以使用其它路徑,如/home/your_name/ivr/welcome.wav)。并且,由于PSTN交換機(jī)都是使用PCM編碼,所以,welcome.wav文件的格式應(yīng)為單聲道,8000HZ。

      如果用戶長(zhǎng)時(shí)間沒有按鍵,剛應(yīng)重新提示撥號(hào),但重新提示應(yīng)該簡(jiǎn)短,如“請(qǐng)直撥分機(jī)號(hào),查號(hào)請(qǐng)撥0”。所以,可以錄制這么一個(gè)聲音文件放到custom/welcome_short.wav。

      invalid-sound:如果用戶按錯(cuò)了鍵,則會(huì)使用該提示。如果你安裝時(shí)指定了make sounds-install,則該文件應(yīng)該用默認(rèn)存在的,只是它是英文的,如果你需要中文的提示,可以自己錄一個(gè)放到custom中。

      exit-sound:不說也知道,最后菜單退出時(shí)(一般時(shí)超時(shí)),會(huì)提示Good Bye。

      timeout指定超時(shí)時(shí)間;max-failures容忍用戶按鍵錯(cuò)誤的次數(shù)。max-timeouts即最大超時(shí)次數(shù)。inter-digit-timeout為兩次按鍵的最大間隔(毫秒),如用戶撥分機(jī)號(hào)1001時(shí),如果撥了10,等2秒,然后再按01,這時(shí)系統(tǒng)收到的號(hào)碼為10,則會(huì)提示錯(cuò)誤 invalid-sound。

      digit-len說明菜單項(xiàng)的長(zhǎng)度,在本例中,用戶分機(jī)號(hào)為4位。

      該menu中有兩個(gè)選項(xiàng),第一個(gè)是在用戶按0時(shí), menu-exec-app執(zhí)行一個(gè)命令(參見mod_command),在此處它執(zhí)行transfer,將來話轉(zhuǎn)到分機(jī)1000。

      如果來電用戶知道分機(jī)號(hào),則可以直接撥分機(jī)號(hào),而不用經(jīng)過前臺(tái)轉(zhuǎn)接,節(jié)約時(shí)間。在該例中,正則表達(dá)式"/^(10[01][0-9])$/" 會(huì)匹配用戶輸入1000-1019之間的分機(jī),

      以上菜單設(shè)定好后,需要在控制臺(tái)中執(zhí)行 reloadxml (或按F6)才可以配置生效。

      配置完成后就可以在控制臺(tái)上進(jìn)行測(cè)試:

      FS> originate user/1001 &ivr(welcome)

      測(cè)試成功后,當(dāng)然,你可能需要先把用戶來話轉(zhuǎn)到語音菜單。根據(jù)配置不同,用戶來話的接聽有多種配置方式,一般來說,來話會(huì)先到達(dá)public dialplan,所以,你可以在conf/dialplan/public.xml中加入一個(gè)extension:

        <extension name="incoming_call">
          <condition field="destination_number" expression="^你的DID號(hào)碼$">
     <action application="answer" data=""/>
     <action application="sleep" data="1000"/>
     <action application="ivr" data="welcome"/>
          </condition>
        </extension>

      這樣,如果有外部呼叫進(jìn)來,就可以聽到語音菜單了。

      默認(rèn)菜單簡(jiǎn)介

      明白了以上簡(jiǎn)單的菜單,就很容易理解更復(fù)雜一點(diǎn)的配置了。系統(tǒng)默認(rèn)提供了一個(gè)名字demo_ivr的菜單。最初的語音提示greet-long/greet-short是用phrase實(shí)現(xiàn)的。phrase是用XML定義的一些短語,最終也是播放聲音文件,但在多語言系統(tǒng)中會(huì)更靈活。在此,我們不討論phrase,你可以簡(jiǎn)單的認(rèn)為它就是一個(gè)聲音文件。

      菜單選項(xiàng)大多都是根據(jù)用戶按鍵使用menu-exec-app執(zhí)行相應(yīng)的命令,上面已經(jīng)講到了。menu-sub表示會(huì)執(zhí)行一個(gè)下級(jí)菜單,這樣,在下級(jí)菜單中(此外是demo_ivr_submenu)便可以用menu-top來返回上級(jí)菜單。

      基本上就這么多。通過設(shè)置多級(jí)菜單,以及與dialplan配合,根據(jù)不同的情況進(jìn)行跳轉(zhuǎn),可以實(shí)現(xiàn)相當(dāng)復(fù)雜的一些功能。如果這些還不夠,可以嘗試一下更高級(jí)的LUA菜單或Event Socket。

      調(diào)試

      打開控制臺(tái)或fs_cli,按F8將loglevel調(diào)到debug狀態(tài),能看到詳細(xì)的執(zhí)行過程。如果看到紅色的(如果你的控制臺(tái)不支持彩色,看ERROR的吧),可能是配置錯(cuò)誤,不過一般會(huì)是聲音文件找不到之類的,檢查相應(yīng)路徑下是否有對(duì)應(yīng)的聲音文件。

    分享到: 收藏

    專題

    亚洲精品网站在线观看不卡无广告,国产a不卡片精品免费观看,欧美亚洲一区二区三区在线,国产一区二区三区日韩 交城县| 敦化市| 郧西县| 漳平市| 朝阳市| 汪清县| 波密县| 石景山区| 湖州市| 霍城县| 葫芦岛市| 濮阳市| 江永县| 汕头市| 德兴市| 长宁区| 成安县| 峨边| 泾阳县| 陆川县| 万年县| 宝鸡市| 开化县| 安陆市| 广安市| 九台市| 梧州市| 河曲县| 榆中县| 高安市| 寻甸| 江山市| 陕西省| 方山县| 长岭县| 监利县| 富民县| 绥中县| 建昌县| 张北县| 乡宁县| http://444 http://444 http://444 http://444 http://444 http://444