使用 API 或 HTTP POST 编辑 Twilio TwiML

Editing Twilio TwiML using API or HTTP POST

我的公司使用 Twilio Flex 作为我们的 phone 系统,我最近的任务是设置一项功能,让我们编辑在正常语音消息之前播放的 TwiML 语音消息。此 TwiML 消息将通过我在 Microsoft Teams 中发布的 Twilio 机器人进行更改。

这样做的原因是我们的支持台可以在我们正常的 "Welcome to [Company] support" 消息之前的 "We're currently experiencing issues with X" 行中添加一条短消息。

如果 TwiML 可以使用 HTTP POST/PUT 或 Twilio 的 API 进行编辑,这应该是一件小事,但到目前为止我还没有弄清楚如何。

我在 API doc 中找不到对此的任何引用,所以我决定 HTTP POST 是可行的方法。以此为起点,我可以使用 HTTP GET:

检索我的 TwiML

https://support.twilio.com/hc/en-us/articles/223132187--Not-Authorized-error-when-trying-to-view-TwiML-Bin-URL

const axios = require('axios');
const crypto = require('crypto');
const accountSidFlex = process.env.accountSidFlex;
const authTokenFlex = process.env.authTokenFlex;

var URL = 'https://handler.twilio.com/twiml/EHXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' + '?AccountSid=' + accountSidFlex
    var twilioSig = crypto.createHmac('sha1', authTokenFlex).update(new Buffer(URL, 'utf-8')).digest('Base64')
var config = {
    headers:{
    'X-TWILIO-SIGNATURE': twilioSig
    }
}

axios.get(
    URL,config  
).catch(error => console.log(error))
.then(response => {
    console.log(response.data)
})

response.data 显示 TwiML 当前的 XML 内容。

我在 POST 上的尝试只给出了与 GET 相同的输出,而 PUT 给出了 405 Method Not Allowed。

var URL = 'https://handler.twilio.com/twiml/EHXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' + '?AccountSid=' + accountSidFlex
var twilioSig = crypto.createHmac('sha1', authTokenFlex).update(new Buffer(URL, 'utf-8')).digest('Base64')

var config = {
    headers:{
    'X-TWILIO-SIGNATURE': twilioSig,
    'Content-Type': 'text/xml'
    }
}

var xml = 
'<?xml version="1.0" encoding="UTF-8"?>\
<Response><Play digits="www"/>\
<Say voice="alice">"We are currently experiencing X related issues". </Say>\
</Response>';

axios.post(
    URL,xml,config
)
.catch(error => console.log(error))
.then(response => {
    console.log(response.data)
})

理想情况下,我希望能够使用 HTTP 方法或 Twilio-API 更改特定的 TwiML,以便我们可以在 Studio Flow 中使用它。我们只是让它保持沉默,直到我们需要向它添加一些东西,并在问题过去后恢复为沉默。

如有任何帮助,我们将不胜感激!

您目前无法以编程方式更改 TwiML Bins、Studio Flows 或 Twilio Functions 的内容。我相信您正在寻找的关键功能是一种根据某些条件在 Studio 流程中动态更新消息传递(Say/Play 小部件)的方法。

一种方法是使用函数小部件检索消息的 Twilio 同步文档,将消息返回为 JSON 并让 Say/Play 小部件播放该消息。您可以在相关文档中找到添加、修改和检索的 Twilio Sync REST API 示例。

您可以使用此处详述的变量语法检索已解析的响应,https://www.twilio.com/docs/studio/widget-library#run-function