如何使用 Twilio-Client-Javascript 或使用 Twiml 发送语音消息 - 我们的理解和可能的方法

How to send a voice message using Twilio-Client-Javascript or using Twiml - Our understanding & possible approach

我们正在处理从 Twilio 客户端 SDK [Javascript] 发起调用的需求。我们有一个 ASP.Net MVC Core 应用程序处理来自 Twilio Twiml 应用程序的传入 Webhook 请求。要从客户端发起呼叫,我们使用 Twiml 拨号动词并提供发件人和收件人号码。此外,我们的要求是一旦检测到应答机就发送语音消息。

由于我们使用了Twiml的Dial verb,无法通过检测答录机,因此无法发送语音信息。这是 Dial 动词的设计,因为它是一种有人值守的呼叫机制。通过文档后,我发现 REST API 允许检测和应答机,还允许发送语音消息。 Twilio REST API 应用于无人值守呼叫启动和基于规则的工作流程。 Twiml Dial 动词使用 VoiceResponse class 发起呼叫,而 Twilio REST API 使用 CallResource 发起呼叫。 在开始研究可能的替代方案之前,我想确认我的理解。

我们正在考虑通过以下步骤实施上述用例

进行 Twilio REST API 呼叫以启动无人值守的 phone 呼叫并启用应答机检测选项。 如果 API 以 answered_by 值作为人类或未知响应,那么我们将调用一个 webhook,该 webhook 将使用 Twiml Dial 动词修补调用。 如果 API 作为机器以 answered_by 值响应,则它应使用包含可发送给被叫方的语音消息的 Twiml。

以上正确。但是,有具体问题吗?

Twilio 的应答机检测现已普遍可用

https://www.twilio.com/blog/answering-machine-detection-generally-available

我们使用 Javascript SDK 和 ASP.Net 带有 Twilio SDK 的核心 MVC 使用 TwiML 应用程序和拨号动词开发了出站呼叫机制。我们遇到了一个问题,我们发现拨号动词不支持应答机检测和语音留言丢弃。我们采用不同的方法,我们将使用 Twilio REST API 发起呼叫。它具有检测应答机和响应应答机检测结果的规定,例如修补代理或发送语音消息。此外,有 2 种可能的配置和工作流程。

  1. 机器检测:启用 answered_by 的可能值为 machine_start、human、fax 或 unknown。 1.1 如果值为 machine_start 那么我们不能发送语音消息,因为它不等待 "beep" 之后可以发送语音消息。 1.2 如果 value 是 human 那么我们可以调用一个 webhook 来将用户修补到当前调用中。 1.3 如果值是传真那么我们将不会采取任何行动[超出范围] 1.4 如果值未知,那么我们可能会修补用户以采取行动。这可能是提高用户工作效率的决定性因素。更多以未知结尾的请求会降低预期结果。

  2. MachineDetection:DetectMessageEnd answered_by 的可能值为 machine_end_beep、machine_end_silence、machine_end_other、human、fax 或 unknown。 2.1 如果值为 machine_end_beep 那么我们可以使用 TwiML url 向被叫方发送语音消息。 2.2 如果值为 machine_end_silence 那么我们可以使用 TwiML url 向被叫方发送语音消息。此类场景需要使用此默认操作进行处理,并随着时间的推移进行改进。 2.3 如果值为 machine_end_other 那么我们可以使用 TwiML url 向被叫方发送语音消息。此类场景需要使用此默认操作进行处理,并随着时间的推移进行改进。 2.4 如果 value 是 human 那么我们可以调用一个 webhook 来将用户修补到当前调用中。 2.5 如果值是传真那么我们将不会采取任何行动[超出范围] 2.6 如果值未知,那么我们可能会修补用户以采取行动。这可能是提高用户工作效率的决定性因素。更多以未知结尾的请求会降低预期结果。

参考: https://www.twilio.com/docs/voice/answering-machine-detection https://www.twilio.com/docs/voice/answering-machine-detection#webhook-parameters

基于上述工作流程,我们决定使用 MachineDetection:DetectMessageEnd 配置选项。我们确实有关于第 2.4 点的疑问。下面是一个场景, 我们已发出 API 请求以使用 MachineDetection:DetectMessageEnd 配置发起调用。被叫方选择了 phone 并引入了 himself/herself。 Twilio 已检测到人类并将 answered_by 设置为人类。这触发了一个 webhood,将用户修补到当前呼叫。加入会议的用户很可能不知道另一端是谁,最终可能会问这是谁?这可能会打扰被叫者并影响整体客户参与度。

这是我们的客户根据他的经验分享的场景。 我想知道 Twilio 检测 "answerd_by" 的速度有多快? 是否有一种机制可以允许在修补呼叫后播放被呼叫者的录音,以便用户知道谁在另一端。这是 Twilio 可以提供的东西,还是我们需要使用录音功能来做到这一点? 我知道 Twilio 有多种选项可以通过 Web API 调整 AMD 参数,但是,在项目开始之前我们可能没有足够的数据来调整它们。我们可能会在生产中推出此功能后实现目标。

我们的客户也提到,有时语音消息没有完全传送? 这也是 Twilio 客户观察到的情况吗? 如果是这样,确保不会发生这种情况的最佳做法是什么?