2012-08-30 61 views
2

我試圖從用戶掛斷或完成時得到twilio的通知。我已經得到我的代碼來呼叫用戶,但是當通話完成後我無法收到通知。在twilio上使用Status_Callback Rest API

from twilio.rest import TwilioRestClient 

def call(): 
    account_sid = '************************' 
    auth_token = '***********************' 

    client = TwilioRestClient(account_sid, auth_token) 

    call = client.calls.create(to='+254723453841', 
         from_='+1 214-390-9422', 
         url='https://dl.dropbox.com/u/*******/acceptanceOfTerms.xml', 
         if_machine='Hangup', timeout=20, status_callback='https://dl.dropbox.com/u/*******/response.xml') 


    print call.sid 

    print 'The Sid is '+ call.sid+' and the call status is '+call.status 

Frrm twilio文檔http://www.twilio.com/docs/quickstart/python/rest/call-request你應該包含一個通知的網址。我的問題是什麼應該是這個文件中的URL的內容,以及如何我可以接收到呼叫已完成或拒絕等狀態的迴歸..

+0

賠率是Twilio實際上是請求狀態回調URL。但是,由於它是一個靜態XML文檔,因此您無法判斷Twilio是否做到了這一點。 Twilio不會在StatusCallback URL中執行任何Twiml - 它只是爲了給您提供有關該呼叫的詳細信息並告訴您狀態。 –

+0

好的。所以它修改了一個正在退出的XML文件,並添加了一些細節?有沒有辦法,然後我可以要求觸發器,以表明在這種情況下已經滿足某種條件,呼叫完成? – Magondu

+0

如果您指定了一個StatusCallback,我們所做的只是向您的應用發出HTTP請求,告訴您呼叫的狀態(「已完成」,「失敗」,「無答案」等)。我們不修改您的任何XML。由您決定如何處理這個HTTP請求。 –

回答

3

我在那裏發現了答案:http://www.twilio.com/docs/api/twiml/twilio_request

接收呼叫,從您的應用程序請求TwiML,處理它,終於結束通話後,Twilio會作出異步HTTP請求配置的叫StatusCallback網址Twilio號碼(如果有的話)。通過爲您的Twilio號碼提供StatusCallback URL並捕獲此請求,您可以確定通話何時結束並接收有關通話的信息​​。

請求參數

Twilio傳遞以異步請求StatusCallback URL您的應用程序的參數包括所有那些在同步TwiML請求中傳遞。

繼鏈接http://www.twilio.com/docs/api/twiml/twilio_request#synchronous

當Twilio收到您的Twilio號碼之一的呼叫它使配置該號碼同步HTTP請求的URL的語音,並預計將收到TwiML響應。 Twilio將其請求作爲POST參數或URL查詢參數發送,具體取決於您配置的HTTP方法。

1
status_callback (string) – A URL that Twilio will request when the call ends to notify your app. 

他們不會說它發送的URL與「請求」之外的內容相同,因此您必須通過試用和錯誤的方式才能找到。它將發回您發送給他們打開呼叫的相同參數。

給它一個回調URL - 一個命中受控制的服務器 - 看看會發生什麼。希望它會通過一些參數(通過GET或POST)來確定哪個呼叫已經結束。您可能還需要嗅探遠程IP地址以確認它來自正確的人。

status_method (string) – The HTTP method Twilio should use when requesting the above URL. 

有了這個,你可以告訴它是否'get'或'post'推測。

0
import configobj 
from twilio.rest import TwilioRestClient 
import time 

def call_to(url, to): 

    cfg = configobj.ConfigObj("config.ini") 
    sid = cfg["twilio"]["sid"] 
    auth_token = cfg["twilio"]["auth_token"] 
    twilio_number = cfg["twilio"]["twilio_number"] 

    client = TwilioRestClient(sid, auth_token) 

    call = client.calls.create(
     to=to, 
     from_=twilio_number, 
     url=url 
    ) 

    for i in range(0,10): 
     print i 
     time.sleep(5) 
     sid=call.sid 
     callinfo = client.calls.get(sid) 
     print callinfo.status 

enter image description here

0

@robert

運行你的代碼拋出的錯誤是這樣的。

Traceback (most recent call last): 
    File "callstatus.py", line 29, in <module> 
    call_to() 
    File "callstatus.py", line 27, in call_to 
    print (callinfo.status) 
AttributeError: 'CallContext' object has no attribute 'status'