使用 Twilio 控制台,一旦出现新错误,我可以从那里触发 Webhook,但 Slack 需要 API 中的数据。
谢谢你
看起来 Slack 期望 webhooks 采用特定格式的 JSON 格式,最简单的形式是具有
text
属性的对象。Twilio webhook 以
application/x-www-form-urlencoded
格式发送,并带有此处列出的参数。 为了将其转换为 Slack 能够理解的 Webhook,您将需要一些代码或服务来将表单编码请求转换为具有正确字段的 JSON 请求。
您似乎不愿意自己构建和托管一些东西。如果托管是问题,我可以建议您查看
Twilio Functions 来构建它。 Twilio Functions 允许您托管可响应传入 HTTP 请求的 JavaScript 函数。
可以将这些警报 Webhook 转换为 Slack Webhook 的 Twilio 函数示例可能如下所示:
const got = require('got');
exports.handler = async function (context, event, callback) {
const slackUrl = context.SLACK_URL;
const { ErrorCode, Description, AccountSid } = event;
const message = `New error for Twilio Account ${AccountSid}.\n\n${ErrorCode}: ${Description}`
try {
await got(slackUrl, {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({ text: message })
})
callback(null, "<Response/>");
} catch(error) {
callback(error);
}
}
上面的代码未经测试,但应该给你一个良好的开始。它使用 向 Slack webhook URL 发出 HTTP 请求。在这种情况下,Webhook URL 存储在环境变量中。
exports.handler = async function (context, event, callback) {
const slackUrl = context.SLACK_URL;
const { ErrorCode, Description, AccountSid } = event
const message = `New error for Twilio Account ${AccountSid}.\n\n${ErrorCode}: ${Description}`
try {
const { default: got } = await import('got')
await got(slackUrl, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ text: message })
})
callback(null, '<Response/>')
} catch (error) {
callback(error)
}
}