【发布时间】:2019-01-22 22:13:43
【问题描述】:
我正在尝试编写一个简单的 Twilio 设置,用于拨打外线电话、录制用户的语音消息并立即将其回放给他。我创建了两个函数:startcall 和 msgin。 StartCall 调用用户并在调用的url 参数中指定MsgIn。 MsgIn 然后有两种主要的操作模式:最初,当没有附加记录时,它返回一个 TwiML 响应开始记录,然后当作为具有适当参数的 webhook 调用时,它会回放记录并挂起向上。至少这是它应该做的。
根据我对文档的理解,我必须将 webhook 附加到 recordingStatusCallback,因为在调用 action webhook 时可能还无法录制。然而,虽然函数控制台显示两个 webhook 都已执行,但调用日志仅显示了一次后续调用 msgin,event.RecordingStatus 为空值(对应于action),调用确实挂断了不播放录音。我在这里错过了什么?
// this function's path is /msgin
exports.handler = function(context, event, callback) {
if (!event.RecordingStatus && !event.RecordingUrl) {
let twiml = new Twilio.twiml.VoiceResponse();
console.log("Initial MsgIn");
twiml.say({ voice: 'man', language: 'en-us' }, 'Leave your message');
twiml.record({
playBeep: false,
transcribe: false,
trim: "trim-silence",
timeout: 1,
recordingStatusCallback: "/msgin",
recordingStatusCallbackEvent: "completed",
action: "/msgin"
});
console.log("Recording started");
callback(null, twiml);
}
else if (event.RecordingStatus == "completed") {
let twiml = new Twilio.twiml.VoiceResponse();
console.log("Supposedly callback");
twiml.say({ voice: 'man', language: 'en-us' }, 'You said');
twiml.play(event.RecordingUrl);
twiml.hangup();
callback(null, twiml);
}
else {
console.log("Supposedly action");
callback(null, "");
}
};
【问题讨论】:
-
发现了以下问答:stackoverflow.com/questions/43599336/…。这有助于理解为什么我的回调处理不起作用,但是如果我想保持录制和回放之间的延迟尽可能低,我不知道如何使用它,而且我不知道话语可能会持续多长时间最后。
-
一个想法是启动另一个函数,它依赖于 memcached 来设置/获取记录状态(set 由回调调用,get 由 50 毫秒步进循环中的操作调用)。
标签: node.js twilio twilio-functions