Asterisk 相關(guān)知識(shí)與應(yīng)用_第1頁(yè)
Asterisk 相關(guān)知識(shí)與應(yīng)用_第2頁(yè)
Asterisk 相關(guān)知識(shí)與應(yīng)用_第3頁(yè)
Asterisk 相關(guān)知識(shí)與應(yīng)用_第4頁(yè)
Asterisk 相關(guān)知識(shí)與應(yīng)用_第5頁(yè)
已閱讀5頁(yè),還剩34頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Asterisk相關(guān)知識(shí)與應(yīng)用相關(guān)內(nèi)容1.什么是asterisk2.Asterisk安裝與啟動(dòng)3.Asterisk結(jié)構(gòu)4.什么是Dialplan5.AGI原理6.Asterisk相關(guān)配置文件7.配置Asterisk作為SIPProxy

并進(jìn)行呼叫通話8.配置VoiceMail9.配制簡(jiǎn)單IVR

10.一個(gè)基PHP的AGI腳本,實(shí)現(xiàn)語(yǔ)音報(bào)告當(dāng)前天氣情況.什么是asterisk

Asterisk是一個(gè)開放源代碼的軟件VoIPPBX系統(tǒng),它是一個(gè)運(yùn)行在Linux環(huán)境下的純軟件實(shí)施方案。Asterisk是一種功能非常齊全的應(yīng)用程序,提供了許多電信功能,能夠把你的x86機(jī)器變成你自己的交換機(jī),還能夠當(dāng)作一臺(tái)企業(yè)級(jí)的商用交換機(jī)。Asterisk讓人激動(dòng)的事情是它在小企業(yè)預(yù)算可承受的范圍內(nèi)提供了商業(yè)交換機(jī)的功能和可伸縮性。你可以使用一臺(tái)老式的奔騰3計(jì)算機(jī),讓你的機(jī)構(gòu)看起來(lái)就同世界上的大企業(yè)一樣。

Asterisk能夠支持線路和協(xié)議,Asterisk能夠支持傳統(tǒng)的線路,包括:TDM(TimeDivisionMultiplexing)T1/E1PRI/PRA&RBS(RobbedBitSignal)modesAnalogphonelines/phones(POTS)ISDN(IntegratedServicesDigitalNetwork)BothBRI(BasicRate)andPRI(PrimaryRate)Asterisk支持的協(xié)議包括:SessionInitiationProtocol(SIP)H.323(ITUstandard,contributedsupport)Inter-AsteriskeXchange(IAX)MediaGatewayControlProtocol(MGCP)

Asterisk能做什么?附有目錄的語(yǔ)音郵件服務(wù)電話會(huì)議、互動(dòng)語(yǔ)音回應(yīng)和電話排序通路呼叫呼叫方ID服務(wù)ADSI與硬件VOIP比較Asterisk具有硬件VOIP的常用功能。Asterisk能夠支持多媒體,具有可編程功能。Asterisk需要的帶寬,一般為:32KB/線路。也就是說(shuō)每支持一條線路,只需要增32KB的帶寬,但是需要網(wǎng)絡(luò)質(zhì)量良好。Asterisk可支持成千的客戶端(需要板卡與帶寬支持)1從官方網(wǎng)站下載asterisk-1.2.26.tar包,拷備到LINUX下的用戶目錄.2用tarxzvfasterisk-1.2.26.tar 解壓到當(dāng)目錄.3進(jìn)入asterisk目錄

執(zhí)行如下命令

#./configure

#make

#makeinstall進(jìn)行安裝

#makesamples安裝默認(rèn)的配置文件

4啟動(dòng)asterisk

asterisk-vvvvvvvvvvvvvvvc

執(zhí)行后會(huì)出現(xiàn)很多提示,注意如果里面有紅色的error字樣說(shuō)明有問(wèn)題。如果執(zhí)行成功,最后會(huì)屏幕停在:

asteriskready

*cli>asterisk安裝與啟動(dòng)Asterisk結(jié)構(gòu)Asterisk結(jié)構(gòu):主要有PBX的核心、

channel驅(qū)動(dòng)(SIP,ZAP,IAX2等)、Dialplan核心、數(shù)字信號(hào)處理(dsp)、相關(guān)協(xié)(SIP,MGCP,H.323,IAX2,rtp等)實(shí)現(xiàn)、各種音視頻編解碼實(shí)現(xiàn)、asterisk的數(shù)據(jù)庫(kù)管理接口

等相關(guān)模塊共同構(gòu)成一個(gè)Asterisk整體

應(yīng)用框架分組交換網(wǎng)電路交換網(wǎng)DSP相關(guān)通道驅(qū)動(dòng)PBX核心模塊fxo,fxs,sip,iax通道Sip、IaxSignaling撥號(hào)方案模塊I/O管理模塊語(yǔ)音信箱處理模塊語(yǔ)音轉(zhuǎn)換/播音模塊進(jìn)行呼叫數(shù)據(jù)庫(kù)管理接口模塊Sip、h.323,iax,mgcp,rtp等協(xié)議實(shí)現(xiàn)模塊媒體編解碼模塊(c

729,h263,pcm等)PSTN模擬接口卡(TDM400p)Asterisk結(jié)構(gòu)

我們看SIP呼入時(shí)Asterisk處理的情景:通道概念:通道是指通過(guò)asterisk建立起來(lái)的一路通話。這類通話都包含一個(gè)incoming連接和一個(gè)outbound連接。每個(gè)電話都是通過(guò)一種通道驅(qū)動(dòng)程序建立起來(lái)的,比如SIP,ZAP,IAX2等,每一類的通道驅(qū)動(dòng),都擁有自己私有的通道數(shù)據(jù)結(jié)構(gòu)。Sip呼入Asterisk核心創(chuàng)建一個(gè)PBX通道開啟一個(gè)PBX線程執(zhí)行撥號(hào)方案(dialplan)SIP通道驅(qū)動(dòng)感知應(yīng)答這個(gè)呼叫并且播放媒體數(shù)據(jù)或者讀取媒體數(shù)據(jù),比如IVR業(yè)務(wù)

asterisk通過(guò)dial應(yīng)用(dialapplication)創(chuàng)建一個(gè)對(duì)外呼叫,比如呼叫固定電話或移動(dòng)電話至少執(zhí)行左邊其中之一Asterisk結(jié)構(gòu)LINUX上安裝Asterisk后相關(guān)目錄結(jié)構(gòu)如下:

/etc/asterisk/

Asterisk主目錄,包含其它關(guān)于Asterisk的相關(guān)配置文件。zaptel.conf這個(gè)配置文件放在/etc,因?yàn)槠渌浖部梢允褂肸aptel這個(gè)硬件及其驅(qū)動(dòng),所以不是放在/etc/asterisk里

/usr/lib/asterisk/modules/這個(gè)目錄包含所有可以加載Asterisk模塊(應(yīng)用程序\編輯器\格式和有用通道),在Asterisk啟運(yùn)時(shí)會(huì)加載這些模塊(可以編輯modules.conf)./var/lib/asterisk比較重要的是astdb文件與agi-bin目錄;astdb包含Asterisk當(dāng)?shù)財(cái)?shù)據(jù)庫(kù)信息.

sounds/所有聲音提示的文件在里面

mohmp3/如果配置了音樂(lè)保持,應(yīng)用程序會(huì)在這個(gè)目錄下查找mp3

keys/使用公鑰和私鑰系統(tǒng)認(rèn)證與一個(gè)由RSA數(shù)字簽名形成的一對(duì)等連接.公鑰和私鑰的擴(kuò)展名分別為.pub和.key

Asterisk結(jié)構(gòu)

firmware/這個(gè)目錄含了很多Asterisk相兼容的設(shè)備固件,它只有iax/這個(gè)子目錄,其中有Digium的IAXy的二進(jìn)制固件鏡像.

images/只有在較多的支持并且利用圖解式的圖像設(shè)備被發(fā)布,這個(gè)目錄將會(huì)與相應(yīng)的目錄有更大的關(guān)聯(lián).

agi-bin/

agi-bin包含所有腳本,可以通過(guò)許多已經(jīng)建立的AGI應(yīng)用程序與Asterisk連接./var/spool/asterisk

meetme/

outgoing/

gcall/

tmp/

voicemail/語(yǔ)音留言后的音頻數(shù)據(jù)以郵箱號(hào)為子目錄存儲(chǔ)DialPlan(撥號(hào)方案)

DialPlan:DialPlan是Asterisk系統(tǒng)的真正核心,它定義了Asterisk怎樣處理呼入和呼出的呼叫。DialPlan的構(gòu)成:主要有四個(gè)部分分別是contexts、

extensions、

priorities、applications。Contexts:撥號(hào)方案(DialPlan)進(jìn)入部分我我們稱為Contexts,每個(gè)Contexts有一些extensions(擴(kuò)展)構(gòu)成,來(lái)實(shí)現(xiàn)一系列相關(guān)服務(wù)。

舉一個(gè)例子如下:[default]在extensions.conf配制文件中,[default]上下文是撥號(hào)方案默認(rèn)的進(jìn)入部分Extensions:Extensions定義了一系列撥號(hào)方案的具體步驟,每一個(gè)步驟包含一些applications(應(yīng)用).

DialPlan(撥號(hào)方案)

Extensions語(yǔ)法用關(guān)鍵字exten,緊跟在后面有一個(gè)=>符號(hào),如下:Exten=>

一個(gè)完整的extension有三部分組成:aextension名子,可有數(shù)字組成.b優(yōu)先級(jí)

即每一個(gè)步驟執(zhí)行的先后順序.C應(yīng)用,即在呼叫中執(zhí)行的一具體動(dòng)作.

舉一個(gè)簡(jiǎn)單例子:Exten=>123,1,Answer()DialPlan(撥號(hào)方案)

Priorities:每一個(gè)extension有許多步驟,我們稱為優(yōu)先級(jí)。每個(gè)優(yōu)先級(jí)有一系列數(shù)字組成,開始為1。

例如:Exten=>123,1,Answer()Exten=>123,2,Hangup()

注意點(diǎn):當(dāng)Asterisk將一個(gè)呼叫轉(zhuǎn)入一個(gè)extension時(shí),它將首先尋找priority值為1的命令。如果沒(méi)有優(yōu)先值為1的行,那么這個(gè)extension將不會(huì)匹配這個(gè)撥入的號(hào)碼。當(dāng)執(zhí)行完優(yōu)先值為1的命令之后,Asterisk將把priority的值增加到2,除非命令本身決定下一個(gè)要執(zhí)行的優(yōu)先值。如果extension中沒(méi)有定義下一個(gè)priority,Asterisk將完成對(duì)這個(gè)

extension的處理。DialPlan(撥號(hào)方案)Applications:

應(yīng)用是指在當(dāng)前的通道上執(zhí)行一系列特定動(dòng)作,如播放語(yǔ)音,接受呼入,撥打電話,掛機(jī)等動(dòng)作。

具體應(yīng)用有:Answer()指接受通道上一次呼入Playback()播放一個(gè)音頻文件。HangUP()掛機(jī)動(dòng)作

例如:

[default]exten=>123,1,Answer()exten=>123,n,Playback(hello-world)exten=>123,n,Hangup()background()播放一個(gè)音頻文件,但按下了電話鍵盤上的數(shù)字鍵后會(huì)中斷語(yǔ)音,主要做交互式動(dòng)作(IVR)撥號(hào)方案,通常用作創(chuàng)建語(yǔ)音菜單.

DialPlan(撥號(hào)方案)waitExten()一般和background()一起使用,等待呼叫者按下DTMF數(shù)字鍵.

如下:

[default]

exten=>123,1,Answer()exten=>123,n,Background(main-menu)exten=>123,n,WaitExten()exten=>2,1,Playback(digits/2)exten=>3,1,Playback(digits/3)exten=>4,1,Playback(digits/4)DialPlan(撥號(hào)方案)

goto功能是發(fā)送呼叫到撥號(hào)方案中的其它c(diǎn)ontext部分.

語(yǔ)法:goto(context,extension,priority)

[default]exten=>123,1,Answer()exten=>123,n,Background(main-menu)exten=>1,1,Playback(digits/1)exten=>1,n,Goto(default,123,1)exten=>2,1,Playback(digits/2)exten=>2,n,Goto(default,123,1)DialPlan(撥號(hào)方案)處理錯(cuò)誤輸入和超時(shí)的一個(gè)例子:[default]exten=>123,1,Answer()exten=>123,n,Background(enter-ext-of-person)exten=>123,n,WaitExten()exten=>1,1,Playback(digits/1)exten=>1,n,Goto(default,123,1)exten=>2,1,Playback(digits/2)exten=>2,n,Goto(default123,1)exten=>3,1,Playback(digits/3)exten=>3,n,Goto(default,123,1)exten=>i,1,Playback(pbx-invalid)exten=>i,n,Goto(default,123,1)exten=>t,1,Playback(vm-goodbye)exten=>t,n,Hangup()DialPlan(撥號(hào)方案)dial:它是Asterisk很有價(jià)值的一功能,當(dāng)來(lái)電者使用不同的通信方式時(shí),它可以進(jìn)行轉(zhuǎn)換并進(jìn)行呼叫連接,如SIP電話到PSTN呼叫語(yǔ)法:Dial(technology/user[:password]@remote_host[:port][/remote_extension])

例如:[default]exten=>123,1,Answer()exten=>123,n,Background(enter-ext-of-person)exten=>123,n,WaitExten()exten=>1,1,Dial(Zap/1,10)exten=>1,n,Playback(vm-nobodyavail)exten=>1,n,Hangup()exten=>2,1,Dial(SIP/Jane,10)exten=>2,n,Playback(vm-nobodyavail)exten=>2,n,Hangup()exten=>i,1,Playback(pbx-invalid)exten=>i,n,Goto(default,123,1)exten=>t,1,Playback(vm-goodbye)exten=>t,n,Hangup()AGI原理AGI即Asteriskgatewayinterface它為外部程序提供了標(biāo)準(zhǔn)的接口來(lái)控制Asterisk的dialplan。

撥號(hào)方案中,可以采用各種語(yǔ)言很方便的通過(guò)AGI接口寫腳本。腳本和Asterisk之間通過(guò)標(biāo)準(zhǔn)的輸入輸出進(jìn)行交互

標(biāo)準(zhǔn)的輸入輸出人別為:

STDIN:標(biāo)準(zhǔn)輸入,外部腳本程序通過(guò)標(biāo)準(zhǔn)的輸入,從Asterisk接收信息。STDOUT:標(biāo)準(zhǔn)輸出,外部腳本程序通過(guò)標(biāo)準(zhǔn)的輸出,發(fā)

送命令到Asterisk。STDERR:標(biāo)準(zhǔn)錯(cuò)誤輸出,外部腳本程序通過(guò)標(biāo)準(zhǔn)錯(cuò)誤輸出調(diào)式信息到Asterisk控制臺(tái)。

一般常用編寫AGI腳本的語(yǔ)言有Perl,python,php等。AGI原理AGI腳本執(zhí)行語(yǔ)法:exten=>extension-number,priority,agi,script-name

或exten=>extension-number,priority,agi(script-name)

如:

exten=>123,1,Answer()exten=>123,2,AGI(agi-test.agi)

執(zhí)行腳本時(shí),分別要滿足下面條件:

a,腳本必須可執(zhí)行,chmod+xscript-nameb.腳本放到/var/lib/asterisk/agi-bin

目錄下

當(dāng)腳本執(zhí)行時(shí),Asterisk會(huì)向腳本發(fā)送各種的信息,可以在做其他事情之前

通過(guò)標(biāo)準(zhǔn)輸入獲取這些信息,每項(xiàng)數(shù)據(jù)都是一行,發(fā)送完畢Asterisk會(huì)發(fā)送

一個(gè)空行,表示結(jié)束。如果需要這些數(shù)據(jù),就先保存起來(lái),否則不用處理它

內(nèi)容如下:

agi_request:agi-test.agiagi_channel:Zap/1-1

agi_language:en

agi_type:Zap

agi_callerid:

agi_context:default

agi_extension:3

agi_priority:1AGI原理

我們可以看下一個(gè)Perl寫的agi-test.agi部分代碼#!/usr/bin/perlusestrict;$|=1;#Setupsomevariablesmy%AGI;my$tests=0;my$fail=0;my$pass=0;while(<STDIN>){這段代碼是從ASTERISK獲取相關(guān)信息,并保存到AGI數(shù)組中 chomp; lastunlesslength($_); if(/^agi_(\w+)\:\s+(.*)$/){ $AGI{$1}=$2; }

}

printSTDERR"AGIEnvironmentDump:\n";foreachmy$i(sortkeys%AGI){這段代碼是把上面獲取的信息打印到控制臺(tái)上。 printSTDERR"--$i=$AGI{$i}\n";}

AGI原理printSTDERR"1.Testing'sendfile'...";print"STREAMFILEhello-world\"\"\n";//這段代碼是向asterisk發(fā)送播放“hello-world”音頻my$result=<STDIN>;

printSTDERR"6.Testing'record'...";print"RECORDFILEtestagigsm12343000\n";//錄制通道內(nèi)的聲音,生成文件,直到接收到DTMF確認(rèn)結(jié)束按鍵,或者超時(shí)時(shí)間結(jié)束my$result=<STDIN>;

當(dāng)在錄音時(shí),用戶按了DTMF鍵“1”“2”“3”:4“或是時(shí)間到了3秒,則結(jié)束錄音。Asterisk相關(guān)配置文件

Asterisk相關(guān)配制文件有很多,這里主要介紹三種要用到配制文件分別是Sip.conf配置sip帳號(hào)信息文件Extension.conf撥號(hào)方案配制文件Voicemail.conf語(yǔ)音郵箱配制文件配置Asterisk作為SIPProxy1.配置Asterisk作為SIPProxy,并讓X-Lite注冊(cè)上去,確保能打通電話就要用到

Sip.conf,Extension.conf文件。

配制分別如下:

在sip.conf文件中分別添加如下內(nèi)容,其中1498和1499是我預(yù)設(shè)的兩個(gè)sip號(hào)碼[1498]

type=friend

username=1498

host=dynamic

canreinvite=yes

dtmfmode=rfc2833

[1499]

type=friend

username=1499

host=dynamic

canreinvite=yes

dtmfmode=rfc2833配置Asterisk作為SIPProxy2.在

extensions.conf的[default]段修改成如下:

[default]

exten=>1498,1,dial(sip/1498,10)

exten=>1499,1,dial(sip/1499,10)

exten=>_1xxx,2,hangup

啟動(dòng)asterisk

asterisk-vvvvvvvvvvvvvvvc

測(cè)試通話:

分別兩臺(tái)機(jī)器上分別啟動(dòng)一個(gè)softphone,配置domain和sipproxy地址為安裝asterisk服務(wù)器IP地址。電話號(hào)碼分別為1498和1499。這時(shí)我們應(yīng)該看到這兩個(gè)phone可以注冊(cè)到astersik上面了。相互呼叫應(yīng)該可以成功。配置VoiceMail

1.配置VoiceMail要用到Voicemail.conf配制文件。

首先在Voicemail.conf中創(chuàng)建郵箱:

語(yǔ)法為:mailbox=>password,name[,email[,pager_email[,options]]]

Mailbox:郵箱號(hào)碼Password:郵箱密碼Name:用戶名Email:email地址

其它選項(xiàng)可無(wú)

在Voicemail.conf的[default]段下添加如下內(nèi)容:101=>123,zhuyangao,zhuyangao@102=>123,jane,jane@撥打電話時(shí),如果無(wú)人接聽則調(diào)用語(yǔ)音郵箱留言,調(diào)用命令為:voicemail()打開extension.conf配制文件,修改[default]如下:exten=>1499,1,dial(sip/1499,5)exten=>1498,1,dial(sip/1498,5)exten=>1499,2,Voicemail(101@default)exten=>1498,2,Voicemail(102@default)

exten=>1000,1,1,VoiceMailMain()//撥打號(hào)碼1000,訪問(wèn)語(yǔ)音郵箱exten=>_1xxx,3,hangup()保存配制文件后,重啟asterisk,注冊(cè)softphone成功后進(jìn)行呼叫對(duì)方,對(duì)方不接則轉(zhuǎn)到語(yǔ)音郵箱留言配制簡(jiǎn)單IVR1.配制IVR,主要修改entension.conf

[sales]

exten=>s,1,Background(demo-thanks)

exten=>0,1,Goto,from-sip|100|1

exten=>1,1,Goto,Menu|s|1

[Menu]

exten=>s,1,Background(demo-congrats)exten=>s,n,WaitExten()

exten=>1,1,Goto,sales|s|1

exten=>2,1,Goto,options|s|1

exten=>i,1,Goto,from-sip|100|1exten=>t,1,hangup()[from-sip]

exten=>100,1,Answer

exten=>100,2,Goto,Menu|s|1[default] exten=>999,1,Goto,from-sip|100|1

用注冊(cè)成功的軟電話撥打999號(hào)碼,則進(jìn)到IVR流程。一個(gè)基PHP的AGI腳本,實(shí)現(xiàn)語(yǔ)音報(bào)告當(dāng)前天氣情況.

腳本名為:agi-weather.agi,內(nèi)容如下:#!/usr/local/bin/php-q<?php#changethistomatchthecodeofyourparticularcity#foracompletelistofU.S.cities,goto#/data/current_obs/$weatherURL="/data/current_obs/KMDQ.xml";

#don'tletthisscriptrunformorethan60secondsset_time_limit(60);#turnoffoutputbufferingob_implicit_flush(false);

#turnofferrorreporting,asitwillmostlikelyinterferewith#theAGIinterfaceerror_reporting(0);

一個(gè)基PHP的AGI腳本,實(shí)現(xiàn)語(yǔ)音報(bào)告當(dāng)前天氣情況.#createfilehandlesifneededif(!defined('STDIN')){define('STDIN',fopen('php://stdin','r'));}if(!defined('STDOUT')){define('STDOUT',fopen('php://stdout','w'));}if(!defined('STDERR')){define('STDERR',fopen('php://stderr','w'));}一個(gè)基PHP的AGI腳本,實(shí)現(xiàn)語(yǔ)音報(bào)告當(dāng)前天氣情況.#retrieveallAGIvariablesfromAsteriskwhile(!feof(STDIN)){$temp=trim(fgets(STDIN,4096));if(($temp=="")||($temp=="\n")){break;}$s=split(":",$temp);$name=str_replace("agi_","",$s[0]);$agi[$name]=trim($s[1]);}

#printallAGIvariablesfordebuggingpurposesforeach($agias$key=>$value){fwrite(STDERR,"--$key=$value\n");fflush(STDERR);}一個(gè)基PHP的AGI腳本,實(shí)現(xiàn)語(yǔ)音報(bào)告當(dāng)前天氣情況.#retrievethiswebpage$weatherPage=file_get_contents($weatherURL);

fwrite(STDERR,"$weatherPage\n");fwrite(STDERR,"testtesttest\n");fflush(STDERR);

#grabtemperatureinFahrenheitif(preg_match("/<temp_f>([0-9]+)<\/temp_f>/i",$weatherPage,$matches)){$currentTemp=$matches[1];}

一個(gè)基PHP的AGI腳本,實(shí)現(xiàn)語(yǔ)音報(bào)告當(dāng)前天氣情況.#grabwinddirection

if(preg_match("/<wind_dir>North<\/wind_dir>/i",$weatherPage)){$currentWindDirection='northerly';}elseif(preg_match("/<wind_dir>South<\/wind_dir>/i",$weatherPage)){$currentWindDirection='southerly';}elseif(preg_match("/<wind_dir>East<\/wind_dir>/i",$weatherPage)){$currentWindDirection='easterly';}elseif(preg_match("/<wind_dir>Southeast<\/wind_dir>/i",$weatherPage)){$currentWindDirection='southeasterly';}

。。。略一個(gè)基PHP的AGI腳本,實(shí)現(xiàn)語(yǔ)音報(bào)告當(dāng)前天氣情況.#grabwindspeedif(preg_match("/<wind_mph>([0-9.]+)<\/wind_mph>/i",$weatherPage,$matches)){$currentWindSpeed=$matches[1];}一個(gè)基PHP的AGI腳本,實(shí)現(xiàn)語(yǔ)音報(bào)告當(dāng)前天氣情況.functioncheckresult($res){trim($res);if(preg_match('/^200/',$res)){if(!preg_match('/result=(-?\d+)/',$res,$matches)){fwrite(STDERR,"FAIL($res)\n");fflush(STDERR);return0;}else{fwrite(STDERR,"PASS(".$matches[1].")\n");fflush(STDERR);return$matches[1];}}

else{fwrite(STDERR,"FAIL(unexpectedresult'$res')\n");fflush(STDERR);return-1;}一個(gè)基PHP的AGI腳本,實(shí)現(xiàn)語(yǔ)音報(bào)告當(dāng)前天氣情況#tellthecallerthecurrentconditions

if($currentTemp){fwrite(STDOUT,"STREAMFILEbeep\"\"\n");fflush(STDOU

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論