首页 > 解决方案 > Slack 机器人不解释 json 消息

问题描述

我对 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("&", "&amp;");
            json.Replace("<", "&lt;");
            json.Replace(">", "&gt;");

            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;

也许我的回复中缺少一些标题,或者我应该以其他方式发送它?

标签: c#.netjsonazureslack-api

解决方案


您的回复缺少该blocks属性,这是告诉 Slack 您的消息中有布局块所必需的。

完整消息的 JSON 如下所示:

{
    "blocks": [{
        "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"
        }
    }]
}

推荐阅读