【问题标题】:Link formatting not working链接格式不起作用
【发布时间】:2017-12-11 16:13:02
【问题描述】:

在 Slack website 上,我可以像这样格式化消息:

{
    "text": "<http://google.com|link to google>"
}

在消息中它会如下所示:

link to google

但我正在尝试编写一个机器人,但这些链接不起作用。使用我的 websocket 连接,我可以发送这样的消息:

var send = new MessageToSlack()
{
    type = "message",
    channel = msg.channel,
    text = $"http://google.com"
};
ws.SendAsync(JsonConvert.SerializeObject(send), b => { });

并且 Slack 会正确地将 http://google.com 解释为链接并将其显示为:

http://google.com

但是,如果我尝试使用尖括号中的链接发送消息,并且链接和链接文本(在 Slack 的网站上有效)之间有管道,如下所示:

var send = new MessageToSlack()
{
    type = "message",
    channel = msg.channel,
    text = $"<http://google.com|to google>"
};
ws.SendAsync(JsonConvert.SerializeObject(send), b => { });

我最终得到:

&lt;http://google.com|to google&gt;

那么我如何让我的机器人工作呢?为什么它不能通过链接正确解析?我错过了什么?

据我从文档中可以看出,这应该可行。 Here 在格式化消息的部分中说:

RTM API 仅支持发布使用我们默认消息格式化模式格式化的简单消息。

还有指向here 的链接确实提到了与管道字符的链接,所以我认为它应该工作。

(注意MessageToSlack 只是一个普通的.NET 类,具有typechanneltext 属性,这些属性被 JSON.Net 序列化,并且似乎给出了正确的 JSON。ws 是我的 websocket 连接来自 WebSocketSharp nuget 包)

JSON:

{
    "id": 1,
    "type": "message",
    "channel": "C6QRKT0EA",
    "text": "<http://google.com|to google>"
}

编辑:因此,如果我从使用网络套接字连接回复切换到https://slack.com/api/chat.postMessage,它将正常工作,但使用起来有点繁琐,并且文档引导我相信链接应该可以工作,而无需跳过那个特定的箍。我只是误读了文档吗?还是文档在这一点上不是很清楚?

【问题讨论】:

  • 猜测是使用 &amp;gt;&amp;lt; 而不是 ?
  • @Default:我确实尝试过。结果相同。
  • 我也猜想它是一些意想不到的字符编码。请发布发送到 Slack 的实际 JSON 字符串。
  • @ErikKalkoken:添加了 JSON。我觉得还不错?
  • 不支持:github.com/slackhq/slack-api-docs/issues/32(其他slack libs中有更多类似问题)

标签: c# slack slack-api


【解决方案1】:

尝试通过将 "mrkdwn": true 添加到您的 json 来启用降价支持

{
    "type": "message",
    "channel": "C6QRKT0EA",
    "text": "<http://google.com|to google>",
    "mrkdwn": true
}

阅读Message Formatting 部分。希望它会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-07
    • 1970-01-01
    • 2020-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多