【发布时间】:2019-07-21 10:04:37
【问题描述】:
我对 slack-azure 集成有疑问。我正在尝试使用斜杠命令构建一个机器人,该命令将请求发送到 azure 函数。函数执行后,我想将结果返回给用户。我在函数末尾使用 JSON 和简单的 return 语句。
问题是 Slack 不解释这个 json,但它把它当作普通字符串处理并打印原始 json。
我认为 json 写入正确,因为我在 Slack Block Kit Builder 中对其进行了测试并将其发送到我的频道并正确显示。
这就是来自 Block Kit Builder 的消息的样子(也是应该的样子):
这是机器人响应的样子:
这是这个json字符串
[{"type":"section","text":{"type":"mrkdwn","text":"• https://www.nike.com/pl/t/jordan-why-not-buty-do-koszykowki-zer02-6P4dl5/AO6219-100?nst=0&cp=euns_kw_pla!pl!goo!cssgeneric!c!!!305375159198&ds_rl=1252249&gclid=Cj0KCQjwjrvpBRC0ARIsAFrFuV9pv41cqv0h8USkHXpK0yay6pqZGnAklqJukHC-JCi3EGHVQX3MELsaAmmUEALw_wcB&gclsrc=aw.ds\\n"}}]
这是我构建 json 有效负载的函数
public JArray FormatResponse(List<string> results)
{
var links = ExtractLinksFromResponse(results);
string textString = string.Empty;
foreach (var l in links)
{
textString += $@"• {l}\n";
}
dynamic response = new ExpandoObject();
response.type = "section";
dynamic text = new ExpandoObject();
text.type = "mrkdwn";
text.text = textString;
response.text = text;
string json = JsonConvert.SerializeObject(response);
json.Replace("&", "&");
json.Replace("<", "<");
json.Replace(">", ">");
var parsedJson = JObject.Parse(json);
var jsonArray = new JArray();
jsonArray.Add(parsedJson);
return jsonArray;
}
这是我的“主要”天蓝色函数的一部分,我在其中调用 FormatResponse 并将其返回给我的 Slack 机器人:
var responseContent = responseFormatter.FormatResponse(results);
var response = req.CreateResponse(HttpStatusCode.OK, responseContent, JsonMediaTypeFormatter.DefaultMediaType);
response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
return response;
也许我的回复中缺少一些标题,或者我应该以其他方式发送它?
【问题讨论】:
-
能否请您添加对您的问题不起作用的确切 JSON 字符串? (作为文本,而不是屏幕截图)谢谢!
-
当然!我已经编辑了我的帖子。
-
您是否在回复中遗漏了
blocks属性?在您的代码中没有找到它。响应消息应为:{"blocks": YOUR JSON} -
有效!谢谢!因此,Block Kit Builder 似乎无法正常工作?
-
太棒了。好吧,Block Kit Builder 只创建了 blocks 部分,但您仍然需要添加元信息来创建完整的消息。由于并非每条消息都有布局块,因此需要此属性。
标签: c# .net json azure slack-api