【发布时间】:2017-12-11 16:13:02
【问题描述】:
在 Slack website 上,我可以像这样格式化消息:
{
"text": "<http://google.com|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 解释为链接并将其显示为:
但是,如果我尝试使用尖括号中的链接发送消息,并且链接和链接文本(在 Slack 的网站上有效)之间有管道,如下所示:
var send = new MessageToSlack()
{
type = "message",
channel = msg.channel,
text = $"<http://google.com|to google>"
};
ws.SendAsync(JsonConvert.SerializeObject(send), b => { });
我最终得到:
<http://google.com|to google>
那么我如何让我的机器人工作呢?为什么它不能通过链接正确解析?我错过了什么?
据我从文档中可以看出,这应该可行。 Here 在格式化消息的部分中说:
RTM API 仅支持发布使用我们默认消息格式化模式格式化的简单消息。
还有指向here 的链接确实提到了与管道字符的链接,所以我认为它应该工作。
(注意MessageToSlack 只是一个普通的.NET 类,具有type、channel 和text 属性,这些属性被 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,它将正常工作,但使用起来有点繁琐,并且文档引导我相信链接应该可以工作,而无需跳过那个特定的箍。我只是误读了文档吗?还是文档在这一点上不是很清楚?
【问题讨论】:
-
猜测是使用
&gt;和&lt;而不是 ? -
@Default:我确实尝试过。结果相同。
-
我也猜想它是一些意想不到的字符编码。请发布发送到 Slack 的实际 JSON 字符串。
-
@ErikKalkoken:添加了 JSON。我觉得还不错?
-
不支持:github.com/slackhq/slack-api-docs/issues/32(其他slack libs中有更多类似问题)