【发布时间】:2020-06-29 11:37:56
【问题描述】:
如链接https://github.com/twilio/voice-quickstart-android#bullet5中给出的,
我们需要创建 TwiML 应用程序,并且应该设置语音请求 url,例如https://twiliodev.mycompany.com/makeCall 拨打电话。那么在 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 动词中附加 Client 动词,我使用 Client 动词作为
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>
那么请您帮忙如何在Call动词中添加Client动词。
谢谢。
编辑 2
正如@philnash 所建议的,这个c#link 是用于浏览器到客户端的调用,并且它使用新的拨号客户端作为
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 连接。
【问题讨论】:
-
不确定那里发生了什么,也许您可以共享整个代码而不是 sn-ps?作为参考,这是文档中的 C# 示例:twilio.com/docs/voice/twiml/…
-
@philnash 此链接 twilio.com/docs/voice/twiml/... 用于拨号网络到客户端,我正在使用客户端到客户端调用(注意客户端是指两个 android 设备)。请检查已编辑的问题,谢谢。
-
从网络拨号到客户端与从客户端到客户端是一样的(事实上,唯一的区别是,如果您将客户端拨到电话,然后您需要一个 callerId 作为您帐户中的号码)。如果你是
Appendingclient到dial它真的应该嵌套在 XML 输出中。那是奇怪的行为。另外,我不确定您对子呼叫的含义是什么,当您有两个端点(在本例中为 2 个客户端)时,呼叫将有两条腿,一个 将 是孩子。跨度> -
@philnash 感谢回复,然后 Twilio 如何收费,如果孩子呼叫状态为无人接听。
-
您确实需要为两个通话段付费,是的。一个呼叫支路是从第一个设备到 Twilio,第二个呼叫支路是从 Twilio 到第二个设备。详情查看这篇文章:support.twilio.com/hc/en-us/articles/…
标签: twilio twilio-twiml twilio-programmable-voice