2016-01-22 84 views
0

我試圖使用Twilio會議連接兩個呼叫。Twilio(TwiML):撥打另一個電話部分II

我下面,我從得到的指示:link

這是我想要的東西來實現:

的第一人接聽電話,他可以撥打#1後,系統會創建與第二人開會。

我的問題:

第一通話結束,而不是開始的會議。

這是我到目前爲止有:

// the first user is online and click #1. 
    // now he redirects to StartConferenceCall() 

     public ActionResult StartConferenceCall(int userNumber) 
      { 
       var digits = Request["Digits"]; // twilio send the dial number as"Ditits" 
       if (digits == "1") 
       { 

        var twilService = new TwiMlService(); 

        var client = new TwilioRestClient(accountSid, authToken); 
        var options = new CallOptions 
        { 
         To = userNumber, 
         From = twilioNumber, 
        }; 

        client.InitiateOutboundCall(options); 

        var twiml = new TwilioResponse(); 

        twiml.DialConference("Room1", 
         new { muted = true, beep = false, waitMethod = "GET" }, 
         new { timeLimit = 30 }  
         ); 
       } 


       if (digits == "hangup") // when the call finished twilio send "hangup" as "Digits" 
       { 

         // do something when the conference ended. 
       } 

       return View(); 
      } 

我創建了一個空的觀點,因爲沒有它,我從twilio得到一個錯誤:這裏

An upstream server returned an invalid response. 

回答

1

Twilio佈道者。

夫婦的建議:

  1. 首先,它並不像你實際上是恢復你的操作方法創建TwiML。當您在瀏覽器中加載StartConferenceCall路由時,應該會看到TwiML (which is really just XML)返回。其次,由於看起來你使用的是ASP.NET MVC,所以我建議安裝Twilio.Mvc nuget包,然後更改你的控制器以從TwilioController派生。這樣做可以讓你使用TwiML方法是這樣的:

    public ActionMethod StartConferenceCall(string Digits) { 
        var response = new TwilioResponse(); 
        response.DialConference(...); 
        return TwiML(response); 
    } 
    

TwiML方法TwilioResponse對象轉換爲XML 設置爲XML HTTP響應的Content-Type頭。此TwiML將使您的第一個來電者進入電話會議。

這也可以讓你刪除空的cshtml文件視圖。

現在要讓第二個調用者進入同一個會議,您需要更改CallOptions對象以指定Url參數。

var options = new CallOptions 
{ 
    To = userNumber, 
    From = twilioNumber, 
    Url = "http://example.com/connectSecondCaller" 
}; 

當第二個呼叫應答,Twilio會讓一個HTTP請求到這個網址,讓你返回一些TwiML那滴第二呼叫者到同一個會議室。

所以你可能會問,你怎麼知道哪個會議室放第二個呼叫者?當第二個主叫方的答案viathe URL的一種方法是通過你的第一個來電的TwiML執行創建會議室的名稱:

var options = new CallOptions 
{ 
    To = userNumber, 
    From = twilioNumber, 
    Url = "http://example.com/connectSecondCaller?name=myconferenceroom" 
}; 

希望有所幫助。

+0

我不認爲我需要返回twiML XML,因爲在創建會議後我不需要告訴Twilio做些什麼 - 我只是想創建它。爲什麼我需要在這種情況下返回TwiML?謝謝。 – Eyal

+0

所有調用DialConference方法的做法是在您的應用程序中生成一些XML。它實際上並沒有傳達給Twilio。您仍然必須通過返回TwiML作爲操作方法的響應,將這些指令返回給Twilio。這有幫助嗎? –

+0

那麼在TwiML中我需要做什麼來連接呼叫?你有代碼示例嗎?謝謝。 – Eyal