我有一个用 C# 编写的 MVP 应用程序。
在较高层面上,我的应用程序执行以下操作:
将用户的电话系统注册到他们的个人资料中,并作为 Twilio 中批准的 DID 呼叫者。
用户按下网站中的按钮,Twilio 呼叫用户,用户按下 1 后,Twilio 添加他们应该呼叫的目的地号码。 Twilio 对通话进行录音(是的,我们已同意)。
问题陈述:
在移动设备上,当我单击按钮发起呼叫时,Twilio 会正确地使移动设备响铃。用户可以接收并参与对目的地号码的呼叫。通话结束后,Twilio 用户可以挂断手机。在除 Twilio 之外的任何其他情况下,这都会结束通话。但在这种情况下,当 Twilio 用户挂断电话时,Twilio 会立即回拨 Twilio 用户,从而使用户陷入循环。就像尝试重新连接断开连接的用户一样。
期望的结果:
当 Twilio 用户挂断手机时,Twilio 通话应完全结束,而不是尝试重新连接。
我认为如何实现这一目标:
将此尾随逻辑添加到 CallStatusCallback Webhook。据我了解,这应该在通话状态发生变化时触发。
当 Twilio 发回 callStatus == 已完成时,然后发出挂断命令,如下所定义:
https://www.twilio.com/docs/voice/twiml/hangup
这是正确的语法/逻辑吗?
response.Hangup() 如何知道结束由 webhook 触发的呼叫?
[HttpPost("twilio-webhook-CallStatusCallback")]
公共 ActionResult CallStatusCallback()
{
var callStatus = Request.Form["CallStatus"];
if(callStatus ==“已完成”)
{
// 处理呼叫完成事件
var 响应 = new VoiceResponse();
response.Hangup();
返回TwiML(响应);
}
// 如果需要,处理其他呼叫状态
返回新的HttpStatusCodeResult(HttpStatusCode.OK);
}
我尝试添加 Webhook,但需要帮助检测正确的状态并向该特定呼叫发送 Hangup() 命令。
当某人断开连接时,Twilio 不会自动回电。您在代码中的某个位置指示 Twilio 执行此操作。也许是状态回调事件?请注意,您可以(并且通常会)需要有不同的回调 Webhook 端点或使用任意查询参数来跟踪调用状态,这就是“response.Hangup() 知道结束由 Webhook 触发的调用”的方式。换句话说,如果是初始调用,则 webhook 仅返回 twiml,或者向被调用者和调用者返回不同的 twiml。
要包含查询参数,请使用以下类型的格式: https://yourwebhookendpoint.com/action/twiml/hangup?callersrole=caller
当调用 yourwebhookendpoint.com 时,Twilio 将包含“callersrole=caller”。