【问题标题】:Slack bot doesn't interpret json messageSlack 机器人不解释 json 消息
【发布时间】: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("&", "&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;

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

【问题讨论】:

  • 能否请您添加对您的问题不起作用的确切 JSON 字符串? (作为文本,而不是屏幕截图)谢谢!
  • 当然!我已经编辑了我的帖子。
  • 您是否在回复中遗漏了blocks 属性?在您的代码中没有找到它。响应消息应为:{"blocks": YOUR JSON}
  • 有效!谢谢!因此,Block Kit Builder 似乎无法正常工作?
  • 太棒了。好吧,Block Kit Builder 只创建了 blocks 部分,但您仍然需要添加元信息来创建完整的消息。由于并非每条消息都有布局块,因此需要此属性。

标签: c# .net json azure slack-api


【解决方案1】:

您的回复缺少 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"
        }
    }]
}

【讨论】:

    【解决方案2】:

    我正在使用 aws Lambda,我也遇到了同样的问题,但这与 JSON 的格式无关,这是因为我忘记将标头“content-type”设置为“application/json”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-20
      • 2021-08-31
      • 1970-01-01
      • 2017-09-02
      • 2019-10-28
      • 2017-04-27
      • 2016-11-20
      相关资源
      最近更新 更多