我写的按星期和时段路由呼叫的Twilio Function是否正确?
Twilio 按时段路由呼叫函数修正方案
你当前使用的代码存在几处语法和逻辑错误,以下是具体问题说明和可直接使用的修正版代码:
原代码存在的问题
- 工作日判断逻辑错误:
now.isoWeekday() == 1 || 3 || 5的写法不符合JS语法规则,3、5会被直接判定为真值,导致无论当前是周几都会进入周一/周三/周五的判断分支,正确写法需要为每个判断条件补全等值判断逻辑 - 时间判断语法错误:
now.hour() < 9:30这类写法不成立,moment的hour()方法仅返回整数小时值,要判断半小时节点需要结合minute()方法共同校验 - 存在HTML转义字符残留:代码中的
>、&&、"都是HTML转义后的内容,需要替换为原生JS的>、&&、"才能正常运行
修正后的完整代码
// 时段路由逻辑,适用于Twilio Studio IVR流程判断呼叫分支 // 请先在Twilio Functions全局配置的依赖项中添加 moment-timezone 0.5.31 const moment = require('moment-timezone'); exports.handler = function(context, event, callback) { let twiml = new Twilio.twiml.VoiceResponse(); function businessHours() { // 时区设置,当前为美国丹佛时区,可按需修改为对应时区 const now = moment().tz('America/Denver'); // 周一、周三、周五的工作时间判断 if(now.isoWeekday() === 1 || now.isoWeekday() === 3 || now.isoWeekday() === 5) { // 工作时段:8:00-9:30、12:00-17:00 const hour = now.hour(); const minute = now.minute(); if( (hour === 8) || (hour === 9 && minute < 30) || (hour >=12 && hour <17) ) { return true; } } // 周二的工作时间判断 if(now.isoWeekday() === 2) { // 工作时段:8:30-11:00 const hour = now.hour(); const minute = now.minute(); if( (hour === 8 && minute >=30) || (hour >=9 && hour <11) ) { return true; } } // 周四的工作时间判断 if(now.isoWeekday() === 4) { // 工作时段:8:00-10:30、15:00-17:00 const hour = now.hour(); const minute = now.minute(); if( (hour === 8) || (hour ===9) || (hour ===10 && minute <30) || (hour >=15 && hour <17) ) { return true; } } // 非工作时间返回false return false; }; const isOpen = businessHours(); if (isOpen) { twiml.say("Business is Open"); // 可按需替换为你自己的路由逻辑,比如直接转接坐席 } else { twiml.say("Business is Closed"); // 可按需替换为非工作时间逻辑,比如留言提示 } callback(null, twiml); };
对接Twilio Studio说明
函数部署完成后,在Studio流程中添加「Run Function」控件选择该函数,之后根据函数返回的语音响应结果配置分支即可,工作时间分支路由到对应坐席,非工作时间分支走备用流程。
内容的提问来源于stack exchange,提问作者pageperfect
相关产品推荐
相关产品推荐

