【问题标题】:Twilio Function - WhisperTwilio 功能 - 耳语
【发布时间】:2018-07-27 14:17:27
【问题描述】:

我正在尝试修改以下代码以执行耳语并要求接听的座席按 1。如果他们不接听或不按 1,则呼叫将转到语音信箱。我需要将它放在一个函数中,因为我无法从 Studio 调用 Twiml Bin。任何帮助将不胜感激。下面脚本的来源是https://github.com/philnash/useful-twilio-functions/tree/master/hunt

exports.handler = function(context, event, callback) {
  const numbers = context.PHONE_NUMBERS.split(',').map(number => number.trim());
  const response = new Twilio.twiml.VoiceResponse();
  if (event.DialCallStatus === 'complete') {
    // Call was answered and completed
    response.hangup();
  } else if (event.finished === 'true') {
    if (context.FINAL_URL) {
      response.redirect(context.FINAL_URL);
    } else {
      response.hangup();
    }
  } else {
    const numberToDial = event.nextNumber ? event.nextNumber : numbers[0];
    const currentNumberIndex = numbers.indexOf(numberToDial);
    let url;
    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);
    }
    const dial = response.dial({ action: url });
    dial.number(numberToDial);
  }
  callback(null, response);
};

【问题讨论】:

    标签: twilio twilio-functions


    【解决方案1】:

    Twilio 开发人员传道者(以及该存储库的所有者)在这里。

    要执行耳语,您需要将 url attribute 添加到 <Number>,指向返回 TwiML 的 URL 以及您想要耳语的消息。

    在上面的代码中,这意味着你需要更新这一行:

    dial.number(numberToDial);
    

    到:

    dial.number({ url: 'https://example.com/whisper' }, numberToDial);
    

    然后,您需要在该 URL 处返回嵌套在 <Gather> 中的消息,以便您可以从应答者那里获得结果。 <Gather> 需要将 action 属性设置为您将获得结果的 URL。您可以只使用 TwiML Bin 来执行此操作,结果应如下所示:

    <Response>
      <Gather action="ACTION_URL" numDigits="1">
       <Say>You are receiving a call, please dial 1 to accept or anything else to reject</Say>
      </Gather>
    </Response>
    

    最后,你的ACTION_URL 需要再次指向一个函数,这样你才能处理结果。像这样的东西应该可以工作:

    function handler(context, event, callback) {
      const response = new Twilio.twiml.VoiceResponse();
      if (event.Digits === '1') {
        response.say('Connecting you now');
      } else {
        response.hangup();
      }
      callback(null, response);
    }
    

    这将进行耳语,但由于这是该功能的搜索的一部分,因此您需要提供您的 FINAL_URL,以便在搜索结束后将呼叫者转到语音信箱。

    让我知道这是否有帮助。

    【讨论】:

    • 谢谢!这完美地工作。我们唯一需要改变的是“/hunt?”在原始代码中使用函数的完整 URL。那是因为我们从 Studio 调用函数,它会尝试处理 webhooks.twilio.com/hunt 而不是实际函数。再次感谢您!
    • 不确定您是否可以对此提供进一步帮助,但从 Studio 调用时它实际上无法正常工作。它可以正常拨打号码,但会丢失耳语功能。如果我不得不猜测,Twilio 不支持从 Studio 调用的函数从 Twiml bin 调用。使用一个函数来代替 Twiml bin 可能会起作用。有什么建议吗?
    • 我不确定是什么问题。您是否为&lt;Number&gt; url 使用绝对URL?
    • 是的。我唯一能想到的另一件事是,对于语音邮件 URL,我使用的是 Twimlet (twilio.com/labs/twimlets)。同样,如果我有电话号码直接使用它,它工作得很好,只是通过 Studio 调用它时不起作用。
    • 我建议您将其实际发送至Twilio support,因为这可能是语音通话和 Studio 交互的问题,可以修复。听起来它确实应该可以工作,特别是如果在不涉及 Studio 的情况下通过流程的呼叫可以工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    • 2019-05-14
    • 1970-01-01
    • 2019-08-04
    • 1970-01-01
    相关资源
    最近更新 更多