要进行此设置,以下是用例:
- IVR 系统呼叫某人并向他们读取一个长长的 twiml 提示(大约 251 个字符)
- 在提示结束时收集用户输入
- 如果非人类接听电话,我将使用 asyncAMD 回调来获取 AMD 的结果,然后留下语音消息
我目前正在使用以下代码拨打电话:
var call = CallResource.Create(
machineDetection: "DetectMessageEnd",
asyncAmd: "true",
asyncAmdStatusCallback: new Uri("[URI to callback]"),
asyncAmdStatusCallbackMethod: HttpMethod.Post,
twiml: new Twilio.Types.Twiml("<Response><Say>[MyMessage]</Say></Response>"),
from: new Twilio.Types.PhoneNumber(configuration["fromPhoneNumber"]),
to: new Twilio.Types.PhoneNumber(configuration["toPhoneNumber"])
);
其中“MyMessage”的长度约为 251 个字符。
应答机位工作得非常好,我可以留下语音消息以防非人类回答(有关详细信息,请参阅我的问题和后续回答如何使用 Twilio AMD 留下语音邮件?)。
但是,我终其一生都无法弄清楚如何将 asyncAMD 回调延长到足够长的时间,以便在人类回答的情况下完成初始提示。
我已经尝试添加所有这些可选的 API 调整参数,但仍然无法正常工作:
machineDetectionTimeout: 59,
machineDetectionSpeechThreshold: 6000,
machineDetectionSpeechEndThreshold: 5000,
machineDetectionSilenceTimeout: 10000,
我在这里有什么选择?保释 asyncAMD 并使用阻塞 AMD?我需要能够在非人工应答的情况下留下语音消息,但我需要将调用它的回调的 asyncAMD 的结果推送足够长的时间,以便在人工应答中读取初始响应。