如何在单次Twilio通话中多次使用<Say>指令?
解决方案
你的代码触发超时的原因是:Twilio要求函数在短时间内完成并调用callback返回响应,但你用setInterval延迟了callback的调用,直到所有句子播放完毕才返回,这超出了Twilio的超时限制。
不需要通过API更新通话资源,也不用递归或重定向,直接在初始的Twiml中按顺序组合<Say>和<Wait>指令即可实现需求:
exports.handler = async function (context, event, callback) { try { const twiml = new Twilio.twiml.VoiceResponse(); const sentences = ['Ahoy there', 'How are you today?', 'Nice to meet you', 'Hope you have a great day', 'Goodbye']; sentences.forEach((sentence, index) => { // 播放当前句子 twiml.say(sentence); // 最后一句之后无需等待 if (index !== sentences.length - 1) { twiml.wait({ length: 3 }); } }); callback(null, twiml); } catch (err) { console.error(err); callback(err); } };
说明
这段代码一次性构建完整的Twiml响应:
- 用
twiml.say()添加每个要播放的句子 - 除最后一句外,每句后添加3秒的等待指令
twiml.wait() - Twilio会自动按顺序执行所有指令,完成播放和等待逻辑,无需后续API调用,从根本上避免超时问题。
内容的提问来源于stack exchange,提问作者Ruchir Baronia
相关产品推荐
相关产品推荐

