Twilio(TwiML):拨打另一个电话部分II

问题描述:

我试图使用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. 

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