• <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>
    您當前的位置是:  首頁(yè) > 新聞 > 國內 >
     首頁(yè) > 新聞 > 國內 >

    Asterisk APIs的演進(jìn)

    2017-05-27 09:04:44   作者:james.zhu   來(lái)源:CTI論壇   評論:0  點(diǎn)擊:


      當1999年第一次創(chuàng )建Asterisk的時(shí)候,當初的設計想法是針對獨立的Private Branch eXchange (PBX),它可以通過(guò)static.conf 文件來(lái)實(shí)現控制。呼叫控制是通過(guò)extensions.conf文件來(lái)實(shí)現,我們稱(chēng)之為撥號規則。
      撥號規則的腳本通知Asterisk來(lái)執行呼叫流程中的應用程序。這種模式工作了很久時(shí)間。當然,隨著(zhù)技術(shù)的不斷演進(jìn),現在的功能比以前更加靈活,同時(shí)也支持了更多的功能模塊。
      這些撥號規則的很多應用是由C語(yǔ)言開(kāi)發(fā),它們可以直接和Asterisk進(jìn)行通信交換。這些應用可以訪(fǎng)問(wèn)通道,媒體,橋和endpoints和其他的對象,通過(guò)這些對象來(lái)實(shí)現電話(huà)通信。
      關(guān)于 AMI 和 AGI
      Asterisk項目創(chuàng )建不久, 兩個(gè)應用程序接口就已經(jīng)支持了Asterisk:Asterisk Gateway Interface (AGI) 和 Asterisk Manager Interface (AMI)。這兩種接口是為了實(shí)現不同的目的:
    • AGI 和Apache中的CGI類(lèi)似。AGI 提供了Asterisk撥號規則和外部程序通信的接口,它可以用來(lái)操作撥號規則中的通道。一般情況下,這個(gè)接口是同步的,從AGI程序中發(fā)起的對通道進(jìn)行操作,流程完成后才能返回結果。
    • AMI 則提供了一種在撥號規則中控制通道的機制。不像AGI,AMI 是異步的,是一種事件驅動(dòng)的接口。大部分情況下,AMI 不負責控制通道執行-它提供通道狀態(tài)信息,也提供在什么地方發(fā)起通道執行。
      兩個(gè)接口都非常強大,提供了多種集成度可能性。使用AGI的話(huà),可以開(kāi)啟遠端撥號規則的執行,這樣就可以允許開(kāi)發(fā)人員使用不同的程序語(yǔ)言PHP,Python,Java和其他的語(yǔ)言來(lái)集成Asterisk。使用AMI的話(huà),可以顯示Asterisk狀態(tài),發(fā)起的呼叫和被控制的通道地址。如果同時(shí)使用兩種接口的話(huà),可以把Asterisk當成是一種引擎來(lái)開(kāi)發(fā)其他的應用。
      但是使用這兩個(gè)接口來(lái)開(kāi)發(fā)自定義的通信應用程序時(shí),這兩種接口仍然存在一些缺點(diǎn):
    • AGI 是同步的方式來(lái)工作的,當對通道進(jìn)行處理時(shí),它會(huì )阻塞線(xiàn)程服務(wù)的AGI。當開(kāi)發(fā)人員創(chuàng )建一個(gè)新的通信程序時(shí),用戶(hù)經(jīng)常會(huì )需要獲得通道的響應(DTMF事件,通道狀態(tài),等等);所以AGI操作就會(huì )變得非常困難,如果配合AMI來(lái)進(jìn)行操作的話(huà),對開(kāi)發(fā)人員是一個(gè)非常大的挑戰。
    • 撥號規則可能是一個(gè)局限。無(wú)論是使用 AMI 或者 AGI,用戶(hù)的基本操作會(huì )限定在通道執行中。如果需要更加強大的功能支持,很多基本的APIs接口功能都不能獲得很好的支持,例如這些APIs: bridges,endpoints,device state,message waiting indications,和通道中的實(shí)際媒體流處理。如果想通過(guò)AMI 和AGI來(lái)控制它們的話(huà)會(huì )變得非常困難,通常需要引入非常復雜的撥號規則控制流程來(lái)達到這些目的。
      最后,兩種接口A(yíng)MI和AGI都是Asterisk項目的早期接口,他們具有一定的生命周期。盡管這兩種接口非常強大,但是今天使用的技術(shù)中已不在是非常主要的手段。一些技術(shù)概念,例如SOAP, XML/JSON-RPC和REST也使用的不是非常多。因此需要一種原生態(tài)的,能夠快速適應新技術(shù)開(kāi)發(fā)Asterisk的技術(shù)來(lái)支持最新的技術(shù)發(fā)展潮流。
      在A(yíng)sterisk 12之前,如果用戶(hù)需要開(kāi)發(fā)一套自定義的通信程序的話(huà),用戶(hù)需要:
    • 使用C語(yǔ)言開(kāi)發(fā)一個(gè)Asterisk模塊,或者
    • 自己使用AGI或者AMI寫(xiě)一個(gè)自定義的程序來(lái)實(shí)現,可能有時(shí)需要兩種接口同時(shí)使用來(lái)實(shí)現一個(gè)功能或使用一些小技巧修改撥號規則來(lái)實(shí)現這個(gè)功能。
      ARI: 支持通信應用開(kāi)發(fā)的接口
      Asterisk RESTful Interface (ARI) 的出現就是為了解決用戶(hù)的這些擔心的。AMI的優(yōu)勢在于對呼叫的控制,AGI 的優(yōu)勢是通過(guò)外部程序來(lái)執行撥號規則的應用程序,它們都不是為開(kāi)發(fā)人員設計支持開(kāi)發(fā)人員創(chuàng )建自己的通信應用程序。ARI是一種異步工作方式,可以支持開(kāi)發(fā)人員通過(guò)訪(fǎng)問(wèn)Asterisk中的原始對象實(shí)體來(lái)開(kāi)發(fā)自己的通信應用程序,ARI可以通過(guò)REST接口訪(fǎng)問(wèn),例如channels,bridges,endpoints和 media等等原始數據。對象實(shí)體的控制則通過(guò)WebSocket來(lái)訪(fǎng)問(wèn)JSON 事件來(lái)實(shí)現。
    • ARI 不是通知通道執行VoiceMail撥號規則的application或在撥號規則中轉發(fā)一個(gè)通道到VoiceMail。
    • ARI可以支持用戶(hù)創(chuàng )建一個(gè)自己的VoiceMail 應用程序。
    \
    • ARI 基礎
    • ARI 由3個(gè)部分組成。它們是:
    • 一個(gè) RESTful 接口支持終端來(lái)控制Asterisk的資源。
    • 一個(gè)WebSocket,它在JSON中傳輸Asterisk資源到終端。
      Stasis 撥號規則的應用模塊,它來(lái)處理從Asterisk通道到終端的控制。
      通過(guò)以上3個(gè)部分的結合,開(kāi)發(fā)人員就可以實(shí)現對Asterisk基礎資源的控制,實(shí)現自定義通信應用的開(kāi)發(fā)。
      什么是REST?
      Representational State Transfer (REST) 是一種軟件架構,它具有以下幾個(gè)方面的特點(diǎn):
    • 通信方式是通過(guò)client-server 模式進(jìn)行的。
    • 通信是stateless的方式。服務(wù)器端不保存請求中的客戶(hù)端狀態(tài)。
    • 連接分層,支持中間層實(shí)現路由和均衡負載。
    • 非正式接口。請求中的資源和消息可以自己定義描述。
      ARI 沒(méi)有嚴格限定在一個(gè)REST API。Asterisk作為一個(gè)獨立的應用,它同樣建議狀態(tài)信息,可以通過(guò)ARI修改。例如,SIP電話(huà)可能掛機,Asterisk就會(huì )對通道執行掛機命令,盡管終端通過(guò)ARI沒(méi)有通知Asterisk對此SIP話(huà)機掛機。Asterisk以異步,state-ful 的工作方式工作:因此,ARI是RESTful。
      什么是WebSocket?
      WebSockets 是一種相對比較新的協(xié)議標準(RFC 6455),它可以支持客戶(hù)端和服務(wù)器端的雙向通信。此協(xié)議標準的主要目的是對基于瀏覽器的應用提供一種支持雙向通信機制,不依賴(lài)于HTTP長(cháng)時(shí)間的服務(wù)器查詢(xún)或者其他非標準的機制。連接是用來(lái)傳遞從Asterisk到客戶(hù)端的異步事件。這些事件是和RESTful 接口相關(guān),但是它在技術(shù)上是獨立的。Asterisk可以通知客戶(hù)端本身的狀態(tài)修改,在原來(lái)狀態(tài)下,因為客戶(hù)端混合使用了ARI。
      什么是Stasis?
      Stasis 是Asterisk撥號規則中的一個(gè)應用模塊。它的機制是Asterisk 使用這個(gè)應用模塊在撥號規則中實(shí)現通道控制。通常來(lái)說(shuō),ARI 應用程序在Stasis 撥號規則中控制通道和Asterisk的其他資源。不在Stasis 撥號規則中的通道不能被ARI來(lái)控制,總體來(lái)說(shuō),ARI的目的是用戶(hù)創(chuàng )建自己的撥號規則應用程序,不是來(lái)控制當前存在的程序。
      進(jìn)一步了解
      這里多個(gè)頁(yè)面文檔介紹ARI和一些舉例。正常情況下,我們假設:
    • 用戶(hù)已經(jīng)注冊了一些SIP電話(huà)終端,可能使用chan_pjsip 或者 chan_sip。
    • 用戶(hù)已經(jīng)對Asterisk有一定的基本了解。
    • 對Python,JavaScript或者其他的高級開(kāi)發(fā)語(yǔ)言有一定的了解。
      大部分的經(jīng)歷不是直接創(chuàng )建HTTP REST 的結構,目前已經(jīng)有很多開(kāi)發(fā)包封裝了這些接口。
      獲得有價(jià)值的技術(shù)分享:請訪(fǎng)問(wèn)www.freesip.org 技術(shù)論壇,關(guān)注公眾號:asterisk-cn

    專(zhuān)題

    亚洲精品网站在线观看不卡无广告,国产a不卡片精品免费观看,欧美亚洲一区二区三区在线,国产一区二区三区日韩 怀柔区| 定边县| 莫力| 彰化县| 精河县| 名山县| 合川市| 文山县| 祁连县| 竹北市| 德令哈市| 巍山| 平安县| 乾安县| 固原市| 虎林市| 吴桥县| 浠水县| 宁国市| 托克托县| 双流县| 阜平县| 芜湖市| 佛坪县| 合肥市| 昆明市| 乌拉特前旗| 宿州市| 广宁县| 威信县| 大邑县| 涟源市| 平邑县| 浮山县| 类乌齐县| 和静县| 景宁| 五峰| 庆元县| 平安县| 古田县| http://444 http://444 http://444 http://444 http://444 http://444