寻找Twilio的Hunt Group,使用Twilio Functions。 (又名FindMe)

时间:2017-07-25 13:38:41

标签: twilio twiml

我正在尝试与Twilio Twiml建立一个寻线组

我是否必须为寻线组中的每个号码设置不同的twimlbin?

或者有没有办法将所有这些加入到一个Twimlbin中?

Twimlbin 1:
<Response>
    <Dial 
         action="http://www.ourapp.com/webhook;FailUrl=/Twimlbin 2" 
         timeout="10" 
         callerId="555-555-5555">
         NUMBER1
    </Dial>
</Response>


Twimlbin 2:
<Response>
    <Dial 
         action="http://www.ourapp.com/webhook;FailUrl=/Twimlbin 3" 
         timeout="10" 
         callerId="555-555-5555">
         NUMBER2
    </Dial>
</Response>

... Repeat N times for each agent ...

谢谢: - )

1 个答案:

答案 0 :(得分:1)

Twilio开发者传道者在这里。

TwiML Bins非常适合TwiML的静态位,但是你的用例需要更多。

我建议您查看Twilio Functions,它允许您在Twilio的基础架构中运行Node.js代码。 I've built and tested a version of this that works with Twilio Functions

以下是对其工作原理的解释:

从您的数字数组开始:

const numbers = [...];

然后,在函数中,检查callstatus是否已完成,如果是,则挂断。

exports.handler = function(context, event, callback) {
  const response = new Twilio.twiml.VoiceResponse();
  if (event.DialCallStatus === "complete" || event.finished) {
    // Call was answered and completed or no one picked up
    response.hangup();
  } else {

如果不是,我们计算出要拨打的下一个号码。如果您在URL中有下一个号码。如果你确实将它保存到变量,否则选择数组中的第一个数字:

    const numberToDial = event.nextNumber ? event.nextNumber : numbers[0];

然后,分配下一个要从阵列拨打的号码。

    let url;
    const currentNumberIndex = numbers.indexOf(numberToDial);
    if (currentNumberIndex + 1 === numbers.length) {
      // no more numbers to call after this.
      url = "/hunt?finished=true";
    } else {
      const nextNumber = numbers[currentNumberIndex + 1];
      url = "/hunt?nextNumber=" + encodeURIComponent(nextNumber);
    }

然后生成TwiML以拨打下一个号码并将URL作为操作传递。您可以添加自己的URL作为statusCallbackUrl,以跟踪状态。

    const dial = response.dial({ action: url });
    dial.number({ statusCallback: "https://yourapp.com/statuscallback" }, numberToDial);
  }

  callback(null, response);
}

我不能保证这会起作用,但我希望你能看到我的目标。让我知道它是否有帮助。