0

所以我在玩 Twilio Studio,并构建一个示例 IVR。我让它向一个 API 发出 Web 请求,该 API 根据客户的电话号码查找客户。这行得通,我可以得到/说出他们的名字。

我在下一步遇到问题,我想做另一个 http 请求并将我在 webrequest1 中获得的“customer_id”传递给 webrequest2,但看起来所有 Web 请求都在呼叫开始时立即触发而不是按顺序触发/序列化。

它看起来有点像这样;

  • 来电,发出 http 请求以查找客户(我得到他们的 customer_id 和姓名)
  • 如果存在客户名称,则在内容上进行拆分(确实如此,它会沿着这条决策路径进行)
  • 对“get_open_invoice_count”做另一个http请求,这个请求需要customer_id而不是他们的电话号码。

通过查看日志,它总是有一个空白值,即使在上面的“说”步骤中我可以说出他们的 customer_id 和名称。

我几乎可以想象有人会说我应该去使用一个函数,但由于某种原因,我无法获得一个简单的函数来执行(获取)获取请求。

我试图将其复制/粘贴到一个函数中,但我认为这个示例不完整: https: //support.twilio.com/hc/en-us/articles/115007737928-Getting-Started-with-Twilio-函数-Beta-

var got = require('got');
got('https://swapi.co/api/people/?search=r2', {json: true})
  .then(function(response) {
   console.log(response)
   twiml.message(response.body.results[0].url)
   callback(null, twiml);
  })
  .catch(function(error) {
    callback(error)
  })

如果这是正确的方法,我很乐意看到这些 ^ 示例之一,它返回可用于流程的其余部分的 json。我错过了关于执行模型的一些东西吗?我希望它在人们流经工作室时逐步执行,但我想知道它是否在启动时执行整个事情?

也许问这个问题的另一种方式是;如果我想让 IVR 像 - 如果我知道你是谁,我会送你走这条路,如果我知道你是谁,我想查找一些帐户详细信息并告诉你,并给你不同的选择,而不是你是陌生人。 - - 你怎么做到这一点?

4

1 回答 1

0

你是对的 - 文档中的代码摘录只是演示如何使用该got包的一部分。

在完整的 Twilio 无服务器函数的上下文中,相同的用法可能如下所示:

exports.handler = function(context, event, callback) {
  var twiml = new Twilio.twiml.MessagingResponse();

  var got = require('got');

  got('https://example.com/api/people/?search=r2', { json: true })
    .then(function(response) {
      console.log(response);
      twiml.message(response.body.results[0].url);

      callback(null, twiml);
    })
    .catch(function(error) {
      callback(error);
    });
};

但是,这里问题的另一部分是,在 Twilio Runtime 上构建应用程序时,本文档中的建议对于 Functions 是完全合理的,但是从 Studio Flow 上下文调用这些函数时有一些未说明的警告。以下是一些相关文档:https: //support.twilio.com/hc/en-us/articles/360019580493-Using-Twilio-Functions-to-Enhance-Studio-Voice-Calls-with-Custom-TwiML

如果您直接从入站号码调用此函数,则该函数是可以接受的,但是当您使用 Studio 流中的 Function 小部件返回 TwiML 时,Studio 会释放对调用的控制。

如果要调用从流中返回 TwiML的外部逻辑,并希望稍后返回到该流,则需要使用TwiML 重定向小部件(有关详细信息,请参阅“将控件返回给 Studio”)。

但是,您不必在调用外部逻辑时将 TwiML 返回到 Studio!听起来您想拨打外部电话以获取一些信息,然后让您的流程根据该信息将呼叫定向到一条或另一条路径。使用运行时函数时,只需让函数返回一个对象而不是 twiml,然后您就可以在流中以液体变量的形式访问该对象的属性,例如{{widgets.MY_WIDGET_NAME.parsed.PROPERTY_NAME}}. 有关更多信息,请参阅Run Function 小部件的文档。然后,您将在流程中的函数之后使用“基于...的拆分”小部件将调用定向到所需的分支。

这里要提到的另一件事是Make HTTP Request小部件。如果您的运行时函数只是包装对另一个 Web 服务的调用,那么您可能只需使用小部件直接调用该服务即可。当服务在您的控制之下时,这最有效,因为您可以确保返回的数据采用小部件可用的格式。

于 2021-01-13T03:18:28.543 回答