2013-01-03 275 views
0

我正在嘗試使用twilio爲我自動撥打幾個電話,但我在正常工作時遇到了一些問題。我正在使用twilio像這樣的電話:無法從http POST獲得響應

conn.calls.create(
    to = event.student.phone_number, 
    from_ = event.message.teacher.twilio_number, 
    url = '%stwilio_calls/%d/' % (BASE_URL, event.id)) 

我相當肯定的代碼,這部分的工作,因爲我接聽電話,以我的試驗單元。但是,當我接到電話時,它告訴我存在應用程序錯誤。在Twilio調試面板,我看到:

http://i.stack.imgur.com/O3oJZ.png

它看起來像twilio沒有得到從我的網站的響應。奇怪的是,我可以導航到URL(http://166.78.13.45:8000/twilio_calls/19/)並接收格式正確的twiml。不知道爲什麼twilio不能拿起它。創建此頁的視圖如下所示:

@csrf_exempt 
def twilio_call(request, event_id): 
    event = Event.objects.get(pk=event_id) 

    t = template.Template(event.message.text) 
    c = template.Context({'student': event.student}) 
    call_text = t.render(c) 

    # TODO if student not found ? 
    # TODO if student.objects.call_notification_ind if false? 

    r = twiml.Response() 
    r.say(call_text) 

    return HttpResponse(str(r)) 

任何想法我需要做什麼才能閱讀此頁?

+0

調試器中的特定XML錯誤消息是什麼? –

+0

我收到文檔分析失敗(錯誤12100),並顯示以下消息:文檔行1出錯:文件過早結束。請確保響應主體是有效的XML文檔。 –

+0

這意味着您的服務器將XML返回給Twilio,但它的格式不正確。 –

回答

0

這真的很奇怪,我仍然不確定是什麼導致了我的問題,但我確實有一個解決方案。在我的views.py文件中添加行print request似乎可以解決這個問題,併爲我正在使用它的另一個區域解決這個問題。我只能想象我在這裏做了一些其他的錯誤,如果有人能幫我弄清楚爲什麼這會起作用,以及在未來如何避免這種情況,我會非常喜歡。

2

從測試URL看起來,如果您將任何數據放在POST正文中,則響應正文爲空。

$ curl -iXPOST http://166.78.13.45:8000/twilio_calls/19/ 
HTTP/1.1 200 OK 
Server: nginx/1.2.6 
Date: Fri, 04 Jan 2013 00:20:45 GMT 
Content-Type: text/html; charset=utf-8 
Transfer-Encoding: chunked 
Connection: keep-alive 

<?xml version="1.0" encoding="UTF-8"?><Response><Say>Hi Dan, 

This is a very long test message for you to try out. Let's see what you think of it. Give it a shot!!! 

Call me back if you have any questions</Say></Response> 

然而添加CallSid參數對所述請求:

$ curl -iXPOST http://166.78.13.45:8000/twilio_calls/19/ -d 'foo' 
HTTP/1.1 200 OK 
Server: nginx/1.2.6 
Date: Fri, 04 Jan 2013 00:20:58 GMT 
Content-Type: text/html; charset=utf-8 
Transfer-Encoding: chunked 
Connection: keep-alive 

與沒有身體。

+0

任何想法,爲什麼這可能是? –

+0

不,但您應該檢查您的代碼是否有任何if/else/return語句,這些語句會根據調用sid來分支控制流。或者在這裏發佈整個代碼。 –

+0

剛剛重新格式化了原始文章中views.py的方法,這裏是URLconf:'url(r'^ twilio_calls /(\ d +)/ $','teachercomapp.views.twilio_call',name ='twilio_call'),' –