【发布时间】:2019-10-10 09:14:05
【问题描述】:
我们使用 lambda 函数(节点 js)向我们的 slack 通道发送消息,该通道有效。但是,当 aws 获得新行时,其格式为 \n。 JSON.stringify 然后将其编码为\\n - 松弛中的消息类似于"this is \n a new line"。我已经尝试用\n 替换\\n 但这不起作用(没有消息发布到slack)。如果我正在检查控制台输出:
{"text":"\"This is a \
new line\""}
所以它真的用一个新行代替了它。但我真正需要的是从"This is a \\n new line" 替换为"This is a \n newline",其中\n 被视为文本,因此slack 的API 知道它...??
req.write( JSON.stringify({text: JSON.stringify(rec.Sns.Message, null, ' ')}).replace('\\n', '\n') );
根据要求提供更多信息 - 它是 Slack 中的一个 webhook,是的 :)
说实话 - 我有点迷茫,因为我不知道如何直接在 AWS 中进行调试。我只是假设我有这样的东西:
console.log( JSON.stringify({text: JSON.stringify("Thats a new \n line", null, ' ')}) );
所以我最终在控制台中使用\\n。然后我尝试了
console.log( JSON.stringify({text: JSON.stringify("Thats a new \n line", null, ' ')}).replace("\\n", "\n") );
这实际上有效,但控制台输出是
Thats a new
line
这很有意义,但会破坏我的 API 调用。所以我不知道如何以This is a new \n line 编码结束..
也许发布完整的 lambda 函数是有意义的:
console.log('Loading function');
const https = require('https');
const url = require('url');
const slack_url = 'https://hooks.slack.cosm/etc';
const slack_req_opts = url.parse(slack_url);
slack_req_opts.method = 'POST';
slack_req_opts.headers = {'Content-Type': 'application/json'};
exports.handler = function(event, context) {
(event.Records || []).forEach(function (rec) {
if (rec.Sns) {
var req = https.request(slack_req_opts, function (res) {
if (res.statusCode === 200) {
context.succeed('sns posted to slack');
} else {
context.fail('status code: ' + res.statusCode);
}
});
req.on('error', function(e) {
console.log('problem with request: ' + e.message);
context.fail(e.message);
});
req.write( JSON.stringify({text: JSON.stringify(rec.Sns.Message, null, ' ')}) );
req.end();
}
});
};
【问题讨论】:
-
这行不通。您对文本字符串进行两次 JSON 编码。
-
哈!你是对的 - 它现在有效。从文档中获取代码并认为其正确...谢谢!
标签: javascript json amazon-sns slack-api