在 twilio 调用结束时发出 API 请求

问题描述

我正在寻找一种方式来表达“谢谢”,并在 Twilio 中的函数执行结束时进行 API 调用

像这样:

        responSEObject = {
                "actions": [
                    {
                        "say": "Thank you!"
                    },{
                        "redirect": {
                            "uri": "API_LINK","method": "POST"
                        }
                    }
                ]
            }

遗憾的是,如果您有重定向,twilio 会忽略所有其他消息。我试图通过首先重定向到 TwiML 来解决这个问题:

<?xml version="1.0" encoding="UTF-8"?>
<Response>
    <Say>Thank you!</Say>
      <Redirect method="POST">API_LINK</Redirect>
</Response>

但以上也不起作用 - 在“谢谢!”之后显示应用程序错误在末尾。此外,我将查询参数与 API 调用一起传递:https://example.link?a=value&b=value。不确定,如何使用 TwiML 传递它。

这个 API 请求应该向微软团队频道发送消息。

解决方法

这里是 Twilio 开发者布道者。

首先,您似乎在谈论 Autopilot 对话的结束,而不是功能执行的结束。如果是这种情况,您将收到错误,因为您混合了 Autopilot Actions 和 TwiML。当您与 Autopilot 助手交互时,您应该只使用 Actions JSON 来响应它,而不是使用 TwiML。

此外,Autopilot 将期望对它发出的请求的所有响应(包括通过重定向)以 Actions JSON 进行响应。因此,不建议使用重定向操作发出 API 请求。

相反,我建议您使用 Twilio Function(或您自己的后端)从 JavaScript 发出 API 请求并使用“say”操作进行响应。

Twilio 函数可能如下所示:

exports.handler = function (context,event,callback) {
  // make request to Teams API
  // I'm not sure the API method you are using,but use an http client like got,superagent or node-fetch,or a dedicated API client if there is one available

  // create your actions
  const actions = {
    actions: [
      {
        "say": "Thank you!"
      }
    ]
  };

  // return the actions JSON
  callback(null,actions);
});

或者,您可以设置为 receive an Autopilot webhook when a dialogue ends。通过这种方式,您可以仅通过“说”操作来响应 Autopilot,这将导致对话结束并触发 webhook。然后在您的 webhook 处理程序中,您可以向 Teams 发出 API 请求。

让我知道这是否有帮助。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...