Slack中的链接Markdown无法解析

241

我做错了什么?迄今为止,我在Slack应用程序中尝试的所有示例Markdown链接都未能正常工作。

我在Slack应用程序中的聊天窗口中粘贴了下面的示例。我从slack markdown syntax获取了此示例,但它仍然将其视为文字而非链接:

[like this](http://someurl)

所以我最终在Slack聊天中看到的不仅是“like this”作为链接。

或者也许上面的内容是错误的,在这种情况下,我的问题将是如何在Slack中显式地创建链接?我想要指定某个文本可点击到特定的URL(超链接)。


1
似乎是未解决的错误(我也无法使用)https://github.com/slackhq/hubot-slack/issues/114 - Petr Gazarov
他们不仅没有实现这个功能,而且也没有包含黑暗主题!对于如此受欢迎的工具来说,这是令人无法容忍的。另一方面,这就是受欢迎的工具突然变得不受欢迎的原因... - pkaramol
4
Slack的markdown链接语法是<http://someurl|like this>,与github不同。我认为你说得对,一些Slack示例中确实存在这个错误,但github的语法不起作用。 - eemz
15个回答

236

Slack使用自己的Markdown语法:
Slack Markdown链接的格式如下:<http://someurl|like this>

注意:你只能通过Slack API来实现,而不能作为简单消息在Slack客户端中发送。

消息构建器示例
输入图像描述 更多信息请参见文档


89
能否通过Slack客户端完成这个任务? - Chris Miller
355
为避免过于复杂,他们可以采用一种流行和经过充分验证的格式,比如Markdown。;-) - joeytwiddle
105
这意味着Slack有意为之,做了一些用户友好且直观的事情,而我非常确定这违反了他们公司的政策。 - Peter R
9
请在此处点赞支持这个功能请求: https://slack.canny.io/feature-requests/p/as-a-user-i-can-use-markdown-hyperlink-formatting-in-messages - Jules Sam. Randolph
10
将它称为markdown的变种是具有误导性的。实际上,它更像是“他们自己的格式化方式,有时看起来有点像markdown”。 - Jasper
显示剩余7条评论

194

目前Slack不支持超链接,参见此链接中的提示:

注意:在Slack消息中无法超链接单词。


更新:

Slack终于在其聊天界面中添加了此功能(来源):

  • 选中文本,然后点击格式工具栏中的链接图标
  • 选中文本,然后在Mac上按Command+Shift+U,在Windows/Linux上按Ctrl+Shift+U

复制要共享的链接并粘贴到链接下的空白字段中,然后单击保存


28
这个问题特别涉及到“slack-api”,它确实支持超链接文本。 - spencer.sm
8
很不幸,超链接已经存在了20多年,很难想象这是一个安全问题。黏贴超长链接真的很烦人,至少slack应该添加自动URL缩短服务(当然是可选的)。 - superarts.org
1
看起来现在这是可能的。但是我无法让它工作。无论我做什么,Slack都只会在频道中收到“Array”作为消息。请参见此处的示例:https://api.slack.com/messaging/composing/formatting#linking-urls - TJ Zimmerman
4
原问题询问如何使用Markdown来实现某个目标,而这个回答似乎与此无关。 - Mike T
8
需要翻译的内容:Worth mentioned that none of these work if you select Format messages with markup in the settings, to get rid of the text formatting toolbar.值得一提的是,如果您在设置中选择了“使用标记格式化消息”,则这些都不起作用,以便摆脱文本格式化工具栏。 - Roberto
1
这是有用的信息,但它并没有回答问题,问题具体涉及使用Markdown。这里很混乱,因为有Slack WSIWYG编辑器,有客户端中的Slack Markdown,还有Slack API中的Markdown。我认为原始问题是关于客户端中的Markdown(至少这就是我想做的)。显然不可能,而且Slack已经禁用了功能请求。 - msw1520

51

2
已确认 [label](link) 在 Slack 应用程序中可以使用,但需要注意的是,该页面不再记录此内容。 - Araxia
2
谢谢!你让我的一天、一个月、一年和一个世纪都变得美好了。 - 9-Pin
2
但是,在Mac应用程序上,只有在禁用所见即所得编辑器时才能正常工作。不清楚他们为什么会在两个编辑器中强制进行看似不必要的权衡。 - Ben M
1
顺便说一下,在API中这仍然无法工作。链接仍然必须使用旧的<L|T>格式。 - SineSwiper
1
它必须是一个有效的URL,例如直接复制示例中的“链接”无法解析,但是例如将“[your text](stackoverflow.com)”放入其中可以工作。谢谢! - RvdV

34

目前Slack还不支持在直接消息中使用此功能,只能通过Slack API实现。但是你可以给我提交的功能请求投票


10
抱歉,链接失效了 :( - ocramot
2
他们似乎已经禁用了他们的Canny渠道来收集功能请求。希望这只是暂时的。 - Jules Sam. Randolph
8
链接没有断掉,他们是有意禁用了这个板块。呜呜。 - rmharrison
每天我似乎都会发现一个新的讨厌 Slack 的理由。 - William Pursell

32
截至2020年2月14日,在我所在的一个Slack实例中,我可以创建/粘贴超链接!

hyperlink screenshot

将 Teams 会议信息复制到 Slack 中并粘贴超链接的示例:

paste hyperlink example


Slack已更新他们的文档。但仍然没有使用Markdown的方法,例如[blah](https://stackoverflow.com)无法工作。

很棒的功能,当剪贴板上有URL时,选择一些文本并按下CTRL + V,它会创建一个超链接

select text & ctrl + v video]


通过一些反向工程,我能够通过C#将文本放在Windows剪贴板上,并成功地粘贴到Slack中:

var textToDisplay = "Test";
var url = "https://stackoverflow.com";
var arbitraryText = "Mike D.";
var dataObject = new DataObject();
//to my surprise, the Fragment comments ARE required
dataObject.SetData(DataFormats.Html, @$"<html><body>
    <!--StartFragment-->
    <a href=""{url}"">{textToDisplay}</a>
    <!--EndFragment-->
    </body></html>");
//have to set the Text format too otherwise it won't work
dataObject.SetData(DataFormats.Text, arbitraryText);
Clipboard.SetDataObject(dataObject);

26
由于这基本上是答案,所以我点了个赞。喜欢粘贴链接功能,也喜欢热键...不幸的是,我已经禁用了它们的所见即所得编辑器,因为它总是干扰我写其他东西,而对于那些愿意在纯文本中使用Markdown(类似)格式的我们来说,貌似没有其他替代方案。 - Tyler James Young
1
我成功让它运行,没有使用片段注释。 - tennabey
1
我相当讨厌热键Ctrl+Shift+U,这个组合键在Linux系统上(ibus输入法)已经用了几十年来输入Unicode字符。 - törzsmókus
我的 Slack 有链接工具,但我真的很想像他们的文档所说的那样用 markdown text 来完成。 - timblaktu
1
@timblaktu 是的,你可以通过 Preferences -> Advanced -> Input options -> Format messages with markup 来实现(参见下面的答案);截至2022年10月,你将不得不放弃文本格式化工具栏。 - Ricardo
显示剩余3条评论

26

7

Reuben答案是可行的,但它看起来像一个无标题文件上传,就像这里看到的上传到Slack的无标题文件。然而,通过稍微修改,你可以轻松地发布一个自然外观的信息,其中包含一个工作超链接,就像你在这里看到的带有超链接的自然外观Slack帖子,只需使用chat.postMessage Slack api方法而不是“file.upload”,并采用Slack自己的消息格式化而不是Markdown。操作如下:

curl -F text="*<https://someurl|like this>*" -F as_user=true -F link_names=true -F channel=C1.....7L -F token=xoxp-... https://slack.com/api/chat.postMessage

在这个例子中,没有使用link_names=true参数,但是可以使用它来@提到用户和#引用频道。

5

我的标记设置被禁用了,一旦我启用它(首选项->高级->使用标记格式化消息),它就可以工作。

在此输入图片描述


3
从可用性的角度来看,这些是“独占”的并不好。 - GokcenG

4
作为 Slack Messages 的替代方案(在 Wilhemanswer 中介绍),您可以通过 API 创建 Slack 帖子并使用至少一些 Markdown。这两者都创建类似于 <h2><a href="https://someurl">like this</a></h2> 的内容:
curl -F filetype=post -F content="# [like this](https://someurl)" -F channels=C1.....7L -F token=xoxp-... https://slack.com/api/files.upload

或者将 content="..." 替换为 file=@post.md

curl -F filetype=post -F file=@post.md -F channels=C1.....7L -F token=xoxp-... https://slack.com/api/files.upload

这里使用的是files.upload。我认为以自己的身份尝试发帖最简单的方法是使用传统令牌。从频道的URI中获取频道ID。


2
我编写了这段代码,将文本中的Markdown链接转换为Slack期望的链接格式:

我编写了这段代码,将文本中的Markdown链接转换为Slack期望的链接格式:

Original Answer翻译成"最初的回答"
// Pretty hacky, convert [sup](http://example.com) to <http://example.com|sup>
const reformatLinks = /\[(.*?)\]\((.*?)\)/g
const slackBody = body.replace(reformatLinks, (_m, text, url) => `<${url}|${text}>`)

据我所知,Slack不支持在文本中插入图片链接。最初的回答。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接