如链接https://github.com/twilio/voice-quickstart-android#bullet5中给出的,
我们需要创建 TwiML 应用程序,并且应该为例如https://twiliodev.mycompany.com/makeCall设置语音请求 URL以拨打电话。那么应该在 makecall 函数中写什么来连接当前调用,因为如果我们使用 Dial 动词,那么它会进行另一个调用。
注意:我正在使用 Twilio 可编程语音连接两个使用 VOIP 的 Android 设备。
现在的问题是应该在 MakeCall 函数中发送什么 Twiml 响应以连接呼叫,因为在以下函数中,如果我返回空白响应,则呼叫没有连接。
[HttpPost]
public ActionResult MakeCall()
{
var response = new VoiceResponse();
return TwiML(response);
}
编辑@Alan 感谢回复。因为我在服务器端使用 c#。我使用拨号动词作为
var dial = response.Dial(callerId: from);
缺少哪个 Connect 调用和 Immediately disconnect bcoz 客户端动词。现在如何在拨号动词中附加客户端动词,我使用客户端动词作为
dial.Append(client);
和 Twiml 响应是
<Response>
<Dial callerId="client:21f421792"></Dial>
<Client>2170561
</Client>
</Response>
它的返回模式错误 bcoz 我认为正确的模式是
<Response>
<Dial callerId="client:21f421792">
<Client>2170561
</Client></Dial>
</Response>
那么您能否帮助如何在调用动词中添加客户端动词。
谢谢。
编辑 2
正如@philnash 所建议的,此c#链接用于浏览器到客户端的调用,并且它使用新的拨号客户端作为
var dial = new Dial();
但我正在使用 Android VOIP SDK 在两个 android 设备之间进行调用。如果我使用新的 Dial 对象,它将把新的呼叫作为子呼叫。我不想创建。根据@philnash 的要求,makeCall 函数的完整代码是
[HttpPost]
public ActionResult MakeCall()
{
var response = new VoiceResponse();
string from,to;
if (Request.HttpMethod == HttpMethod.Post.Method)
{
from = Request.Form["From"];
to = Request.Form["To"];
}
else
{
from = Request.QueryString["From"];
to = Request.QueryString["To"];
}
var dial = response.Dial(callerId: from);
var client = new Client(to);
dial.Append(client);
return TwiML(response);
}
编辑 3
<?xml version="1.0" encoding="utf-8"?>
<Response>
<Dial>
<Client>2170561
</Client>
</Dial>
</Response>
正如我注意到的 VOIP 呼叫,如果客户端 xml 标记位于 Dial 标记内,那么它会成功连接,但它会为每个呼叫计算两条腿并为两次呼叫收费。当一个设备想要呼叫另一台设备时,Twilio 的默认行为是在每个呼叫中进行两个呼叫还是我弄错了?
再次请注意,我正在谈论通过 Twiml 请求 url 到我们服务器的两个 android 设备 VOIP 连接。