首页 > 解决方案 > 什么是正确的 Twilio 函数回调?

问题描述

我是 Twilio 的新手,想在我的 Studio 流程图中加入一种开关,检查我们是否在规定的工作时间。如果是(成功),则转发到该号码,如果否(失败),则转发到语音信箱。

我试图构建一个函数,有点源自这个 twilio git:https ://github.com/twilio-labs/function-templates/tree/main/voicemail 。

const moment = require('moment');
const DEFAULT_UTC_OFFSET = 0;
const DEFAULT_WORK_WEEK_START = 1; // Monday
const DEFAULT_WORK_WEEK_END = 5; // Friday
const DEFAULT_WORK_HOUR_START = 8; // 8:00, 8AM
const DEFAULT_WORK_HOUR_END = 18; // 18:59, 6:59PM

function getInteger(stringValue, defaultValue) {
  const parsedNumber = parseInt(stringValue, 10);
  if (isNaN(parsedNumber)) {
    return defaultValue;
  }
  return parsedNumber;
}

exports.handler = function(context, event, callback) {
    const timezone = getInteger(context.TIMEZONE_OFFSET, DEFAULT_UTC_OFFSET);
    const workWeek = {
        start: getInteger(context.WORK_WEEK_START, DEFAULT_WORK_WEEK_START),
        end: getInteger(context.WORK_WEEK_END, DEFAULT_WORK_WEEK_END),
    };
    const workHour = {
        start: getInteger(context.WORK_HOUR_START, DEFAULT_WORK_HOUR_START),
        end: getInteger(context.WORK_HOUR_END, DEFAULT_WORK_HOUR_END),
    };
    
    const currentTime = moment().utcOffset(timezone);
    const hour = currentTime.hour();
    const day = currentTime.day();
    
    // between monday and friday
    const isWorkingDay = day <= workWeek.end && day >= workWeek.start;
    // between 8am and 7pm
    const isWorkingHour = hour <= workHour.end && hour >= workHour.start;
    
    if (isWorkingDay && isWorkingHour) {
        return true;
    } else {
        return false;
    }
};

从我得到的错误(82002 - 运行时应用程序超时)中,回调必须不同。什么是正确的方法callback(err, response)

谢谢。

标签: twilio

解决方案


Twilio 开发人员布道者在这里。

在 Twilio 函数中,为了返回结果,您必须调用callback作为处理函数的第三个参数传入的函数。您在这里遇到超时,因为您从未调用过,callback因此该函数运行 10 秒然后超时。

我会尝试像这样返回数据:

    if (isWorkingDay && isWorkingHour) {
        return callback(null, true);
    } else {
        return callback(null, false);
    }
};

请注意,它可能不喜欢原始布尔值,因此如果这不起作用,请尝试使用 JavaScript 对象,例如:

    if (isWorkingDay && isWorkingHour) {
        return callback(null, { inWorkingTime: true });
    } else {
        return callback(null, { inWorkingTime: false });
    }
};

推荐阅读