简体   繁体   English

Twilio 基于时间 function

[英]Twilio time based function

I'm trying to create a Twilio function so that during our business hours it continues the flow in studio, but outside of hours I want it to play the closed message then hang up.我正在尝试创建一个 Twilio function 以便在我们的工作时间内它继续在工作室中流动,但在下班时间我希望它播放已关闭的消息然后挂断。

does anyone know how to do this?有谁知道如何做到这一点?

There's a ready-to-deploy code sample in the Code Exchange that does exactly what you are looking for. 代码交换中有一个可立即部署的代码示例,它可以满足您的需求。 The great thing about this is that you can deploy it without writing any line of code - but obviously you can inspect the deployed code at any time to see what happens:这样做的好处是您可以在不编写任何代码行的情况下部署它——但显然您可以随时检查部署的代码以查看发生了什么:

const moment = require('moment');
const url = require('url');

const GREETINGS = {
  _default: {
    text: 'Hi there! You are calling after my work hours. Please leave a message after the beep',
    language: 'en-US',
    voice: 'Polly.Joey',
  },
  DE: {
    text: 'Hallo! Sie rufen außerhalb meiner Arbeitszeiten an. Bitte hinterlassen Sie mir eine Nachricht nach dem Ton.',
    language: 'de-DE',
    voice: 'Polly.Hans',
  },
};

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 phoneNumberToForwardTo = context.MY_PHONE_NUMBER;
  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();
  const translatedGreeting = GREETINGS[event.FromCountry];
  const hasTranslatedGreeting = typeof translatedGreeting !== 'undefined';
  // between monday and friday
  const isWorkingDay = day <= workWeek.end && day >= workWeek.start;
  // between 8am and 7pm
  const isWorkingHour = hour <= workHour.end && hour >= workHour.start;

  const twiml = new Twilio.twiml.VoiceResponse();

  if (isWorkingDay && isWorkingHour) {
    twiml.dial(phoneNumberToForwardTo);
  } else {
    if (hasTranslatedGreeting) {
      twiml.say(
        {
          language: translatedGreeting.language,
          voice: translatedGreeting.voice,
        },
        translatedGreeting.text
      );
    } else {
      twiml.say(
        {
          language: GREETINGS._default.language,
          voice: GREETINGS._default.voice,
        },
        GREETINGS._default.text
      );
    }
    twiml.record({
      action: url.resolve(context.PATH, 'recording'),
    });
  }
  callback(null, twiml);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM