我正在尝试使用Twilio
会议连接两个电话。
我遵循了我的指示: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.
答案 0 :(得分:1)
Twilio传道者在这里。
一些建议:
首先,看起来您实际上并未返回在action方法中创建的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 ,将HTTP响应的内容类型标头设置为XML。此TwiML会将您的第一个呼叫者放入电话会议。
这也可以让你删除空的cshtml文件视图。
现在,为了让第二个呼叫者进入同一个会议,您需要更改CallOptions对象以指定Url参数。
var options = new CallOptions
{
To = userNumber,
From = twilioNumber,
Url = "http://example.com/connectSecondCaller"
};
当第二个呼叫应答时,Twilio将向此URL发出HTTP请求,并让您返回一些将第二个呼叫者丢入同一会议室的TwiML。
所以你可能会问,你怎么知道把第二个来电者放到哪个会议室?一种方法是将您为第一个呼叫者创建的会议室名称传递给第二个呼叫者通过URL回答时执行的TwiML:
var options = new CallOptions
{
To = userNumber,
From = twilioNumber,
Url = "http://example.com/connectSecondCaller?name=myconferenceroom"
};
希望有所帮助。