2016-01-19 69 views
1

我很難讓Twilio執行收集。這個調用初始化得很好,但不是等待用戶按鍵,Gather只是進入下一個語句並掛起。Twilio收集不會暫停輸入

我的環境是Visual Studio 2015. .NET 4.6,MVC6,asp.net5。我安裝了RC1更新。 Nuget包是Twilio 4.4.1版,Twilio.TwiML 3.3.6。

下面是測試的WebAPI 2控制器:

[Route("api/[controller]")] 
public class OutboundCallController : Controller 
{ 
    [HttpPost] 
    public IActionResult Post() 
    { 
     var twilioResponse = new TwilioResponse(); 
     twilioResponse.BeginGather(new { timeout = "60", numDigits = "1", action = "Foo", method = "POST" }); 
     twilioResponse.Say("Test Message Here"); 
     twilioResponse.EndGather(); 
     twilioResponse.Say("Fallthrough. Goodbye."); 
     return new ObjectResult(twilioResponse.ToString()); 
    } 
} 

當Twilio接收它說下面的數據「測試消息在這裏下通再見。」立即停止,然後立即掛斷電話。

使用ngrok我可以看到效應初探到Twilio後到我的控制器:

<Response> 
    <Gather timeout="60" numDigits="1" action="Foo" method="POST"> 
    <Say>Test Message Here</Say> 
    </Gather> 
    <Say>Fallthrough. Goodbye.</Say> 
</Response> 

此外,我的Twilio日誌看起來像(相同的):

<Response> 
    <Gather timeout="60" numDigits="1" action="Foo" method="POST"> 
    <Say>Test Message Here</Say> 
    </Gather> 
    <Say>Fallthrough. Goodbye.</Say> 
</Response> 

編輯:

我也試過改變WebAPI返回一個字符串,而不是IActionResult。沒有什麼變化,結果相同。

[HttpPost] 
    public string Post() 
    {....} 

答:

原來我沒有返回正確的內容類型,我修改了POST操作的迴歸,充分控制器代碼如下:

[Route("api/[controller]")] 
public class OutboundCallController : Controller 
{ 
    [HttpPost] 
    public IActionResult Post() 
    { 
     var twilioResponse = new TwilioResponse(); 
     twilioResponse.BeginGather(new { timeout = "60", numDigits = "1", action = "Foo", method = "POST" }); 
     twilioResponse.Say("Test Message Here"); 
     twilioResponse.EndGather(); 
     twilioResponse.Say("Fallthrough. Goodbye."); 
     return Content(twilioResponse.ToString(), "application/xml"); 
    } 
} 

回答

2

Twilio開發商傳道士在這裏。

我剛剛將您生成的TwiML複製到twimlbin,並能夠使其正常工作並且不會跳過。

以下是your generated TwiML的精確副本。

很顯然,當您按下某個號碼時,它會失敗,因爲該操作僅設置爲foo。如果設置行動別的東西像下面的例子中,你會看到,在按下一個號碼,你也應該得到一個消息,說「你好」

<?xml version="1.0" encoding="UTF-8"?> 
<Response> 
    <Gather timeout="60" numDigits="1" action="http://twimlets.com/echo?Twiml=%3CResponse%3E%3CSay%3EHi+there.%3C%2FSay%3E%3C%2FResponse%3E" method="POST"> 
    <Say>Test Message Here</Say> 
    </Gather> 
    <Say>Fallthrough. Goodbye.</Say> 
</Response> 

而且,你的C#代碼看起來正確的,但讓我知道你想讓你的端點公開,所以我可以測試它。值得一提的是,你要返回Twilio的是真正的XML(即它的頂部有<?xml version="1.0" encoding="UTF-8"?>),並且它的內容類型真的是XML。

樂意提供任何其他問題的幫助。

+0

謝謝,你讓我朝着正確的方向前進。內容類型在響應中不正確。我編輯了我的問題,向控制器顯示更改。 – mcbowes

+0

太棒了!樂於幫助! –