Slack mrkdwn

Slack mrkdwn (opens new window) 是 Slack 平台专门定制的 Markdown 语言版本。它允许开发者创建视觉上吸引人、结构化的消息,强调关键信息,并为他们的 Slack 消息增添风格。

在本指南中,我们将探讨 mrkdwn 的细微之处,从基本的格式设置功能到高级功能,配合实际示例,让您入门并构建适合您应用程序的正确的 Slack 通知。

mrkdwn 不是 Markdown #

乍一看,Slack 的 mrkdwn 和流行的 Markdown 语法非常相似。

Slack 的 mrkdwn 和 John Gruber 的 Markdown 语法都提供了一种使用简单的纯文本标记格式化文本的方法。然而,由于它们的不同目的,每种语言的设计和功能是不同的。

Markdown 被设计为一种轻量级的标记语言,将纯文本转换为结构有效的HTML的语言。它允许作者轻松地标记他们的文本,以便将其清晰地转换为HTML。大多数开发者在Github上使用Markdown。您可以在存储库的Readme和单个提交消息中使用Markdown。Markdown也是Notion平台的核心组件。

Slack的mrkdwn是专门为Slack平台定制的自定义格式语法。它的唯一目标是在Slack内部更容易编写丰富、视觉上吸引人的文本,并利用平台的核心功能,如@提及和频道。

不同的目的导致语法上的核心差异。最明显的是,Markdown使用#支持多个标题级别。例如,### Header 3表示HTML中的<h3>标签。而mrkdwn不以同样的方式支持多个标题级别。在Slack消息中何时使用标题?对于较短的消息来说,它更加简洁。

表格或语法高亮也是同样的情况。 以下是Markdown的中文翻译并删除第一级标题:“ng”。这些对于完整的文档非常重要,但在Slack消息中不太重要。相反,mrkdwn具有特殊的链接格式,如<@U12345678>用于用户提及或<!channel>用于通知频道的所有成员。鉴于这些功能是特定于平台的,Markdown没有本地等效功能。

此外,mrkdwn还有一些与Markdown不同的设计选择,例如使用下划线表示斜体,而不是单个星号,或者使用尖括号表示链接,而不是方括号。

基本格式:mrkdwn的基础 #

mrkdwn的核心元素可以帮助您清晰地传达信息,强调关键点,并使您的文本易于扫描和理解。

在常规文本中通常使用三个元素:

  • 使用星号(*)字符将文本包裹在中,使文本加粗以强调单词或短语。

  • 使用下划线(_)字符将文本包裹在中,使文本斜体化。 使用Markdown来进行细微的强调或指示作品的标题。

  • 用波浪号(~)将文本包裹起来,表示划掉文本以示更正或突出某些不再相关的内容。

然后我们有两种方法可以在Slack消息中添加代码。如果您正在构建应用程序监控平台的警报并需要显示失败的代码,则这可能特别有用。

内联代码适用于突出显示代码、命令或特殊术语。为此,您用反引号(`)将文本包裹起来。

多行代码块非常适合共享较长的代码片段或预格式化文本。为了实现这一点,您需要用三个反引号(`)将文本包裹起来。要添加新行,您必须使用\n

在整个过程中,我们使用Block Kit (opens new window)来展示如何在Slack API中使用mrkdwn。Block Kit使开发人员能够在Slack中构建交互式和视觉上吸引人的消息。通过在这些块中使用mrkdwn,您可以实现 在结构和文本呈现之间保持良好的平衡,确保您的消息不仅互动而且清晰吸引人。

如果您将这些写入通知应用的代码中,它们将如下所示:

{
  "blocks": [
    {
      "type": "section",
      "text": {
        "type": "mrkdwn",
        "text": "这是 *粗体* \n 这是 _斜体_ \n 这是 ~删除线~ \n 这是 `代码` \n ```这是一个代码块\n它是多行的```"
      }
    }
  ]
}

该消息在Slack中的显示效果如下:

[Slack格式化](https://res.cloudinary.com/practicaldev/image/fetch/s--eMk8oIrq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/txhdu5bkmkn6ikk7ujce. 这种格式的主要目标是增强理解力并吸引对重要信息的关注。过度使用可能会使信息更难阅读。因此,虽然用格式化装饰每条消息很诱人,但始终要优先考虑清晰度。

您可以在Slack mrkdwn格式文档 (opens new window)中找到有关mrkdwn的所有特殊格式。

链接和提及:直接与用户和内容互动

Slack的基本要素之一是您可以使用通知通过提及来直接与个人和团队互动,并通过链接将这些用户引导到特定的频道、应用程序或网站。

我们可以将这些拆分为两种类型:内部Slack链接和提及,以及指向网站和电子邮件的外部链接。

在内部,mrkdwn使用@符号来提及特定用户(例如@colin)或用户组,例如@here@everyone@channel。与提及相关的 你直接在Slack上工作,礼仪在这里很重要。除非你真的需要每个人,否则不要使用@everyone

在Slack内部,你也可以使用井号(#)来突出显示和指导用户到其他频道。

要链接到Slack之外的页面,你可以使用超链接。在mrkdwn中,这些的格式是<URL|显示的文本>。所以<https://knock.app|Knock>将被呈现为可点击的链接,标题为“Knock”,指向https://knock.app (opens new window)

你也可以使用这种语法来链接到电子邮件地址,只需在电子邮件地址前加上mailto协议。所以<mailto:[email protected]|[email protected]>将被呈现为可点击的“[email protected]”链接,打开用户默认的电子邮件客户端,并将[email protected]设置为收件人。

以下是这些的代码示例:

{
  "blocks": [
    {
      "type": "section",
      "text": {
        "type": "mrkdwn",
        "text": "这是一个链接到<https://knock.app|Knock>"
      }
    }
  ]
}
``` 以下是Markdown的中文翻译,并删除了一级标题:

这是对用户@andrew的提及
这是对@channel的提及
这是指向#random频道的链接
这是一个电子邮件链接<mailto:[email protected]|[email protected]>

在Slack中显示如下:

![Slack Taggin](https://res.cloudinary.com/practicaldev/image/fetch/s--dwnzPTP_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0qsija9jrmuhm6cgks5d.png)

在利用特殊链接和提及时,始终要考虑上下文和目标受众。虽然提及是引起某人注意的强大方式,但如果过度使用可能会产生干扰。

同样,链接到频道或外部网站应谨慎进行,以确保内容的适宜性。 ## 列表和引用:组织你的消息

组织消息可以让你传达多个要点或突出特定的信息。在mrkdwn中,你可以使用列表和引用来使你的消息更易于理解。

在mrkdwn中,没有特定的列表语法,至少在通过API发送消息时是这样的。相反,你可以使用任何符号来指定一个无序列表。

{ "blocks": [ { "type": "section", "text": { "type": "mrkdwn", "text": "- 项目1 \n - 项目2 \n - 项目3 \n - 项目4" } } ] }


这将呈现为:

[![Slack 无序列表](https://res.cloudinary.com/practicaldev/image/fetch/s--VQuG_jUp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ozi7gjike0vw172l4fex.png)](https://res.cloudinary.com/practical 有序列表只是用数字或字母作为符号。例如:

{ "blocks": [ { "type": "section", "text": { "type": "mrkdwn", "text": "1. 项目1 \n 2. 项目2 \n 3. 项目3 \n 4. 项目4" } } ] }


进入全屏模式 退出全屏模式

变为:

[![Slack Ordered](https://res.cloudinary.com/practicaldev/image/fetch/s--Ayjh-oG9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/weht67lqw1io52e43xzl.png)](https://res.cloudinary.com/practicaldev/image/fetch/s--Ayjh-oG9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/weht67lqw1io52e43xzl.png)

要添加块引用以突出显示或强调特定部分,如引文或重要事项 > 这是一个引用块。它可以跨多行,并经常用于突出特定的信息或引用。

列表和引用块是提高可读性的很好的工具,但它们应该谨慎使用。过多的列表可能会使读者感到困惑,过多的引用可能会削弱强调效果。 特殊格式:提升您的Slack消息

您可能需要使用mrkdwn的几个其他选项。

首先,使用日期格式化以一致且易读的方式显示日期。在这里,您使用UNIX格式的时间戳,并使用语法`<!date^timestamp^{date_format}|{fallback_text}>`,就像这样:

{ "blocks": [ { "type": "section", "text": { "type": "mrkdwn", "text": "今天是:\n\n <!date^1697250654^{date_short}|2023年10月13日> \n <!date^1697250654^{date_short_pretty}|2023年10月13日> \n <!date^1697250654^{date_long}|2023年10月13日> \n <!date^1697250654^{date_long_pretty}|2023年10月13日> \n <!date^1697250654^{date_num}|2023年10月13日> \n <!date^1697250654^{date}|2023年10月13日>" } } ] }


进入全屏模式退出全屏模式

提示:在JavaScript或TypeScript中,可以使用`const unixTimestamp = Math.floor(Date.now() / 1000)`来获取当前日期的UNIX格式。

您还可以结合一些上面的mrkdwn。例如,要加粗一个链接,您可以使用:

{ "blocks": [ { "type": "section", "text": { "type": "mrkdwn", "text": "这是一个加粗链接:https://knock.app|*Knock* (opens new window)" } } ] }


进入全屏模式 退出全屏模式

这将呈现一个加粗的链接:

[![Slack加粗链接](https://res.cloudinary.com/practicaldev/image/fetch/s--9g-EyX98--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploa 将以下的Markdown翻译成中文并删除一级标题:ds/articles/4deyfprsk6ee8gfwwpk6.png)](https://res.cloudinary.com/practicaldev/image/fetch/s--9g-EyX98--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4deyfprsk6ee8gfwwpk6.png)

还有,最后但绝对不是最不重要的,你还有表情符号:

{ "blocks": [ { "type": "section", "text": { "type": "mrkdwn", "text": "🌎 🚀 ⭐️ 👽 🌔 🌞 ⚡️ 🔥 ☁️ ☔️ 🌈 🐱 🐶 🐭 🐘 🐯 🐓 🐍" } } ] }


进入全屏模式 退出全屏模式

这给我们带来了:

[![Slack 表情符号](https://res.cloudinary.com/practicaldev/image/fetch/s--oLkx1j2I--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4je0bb53g5g2x9ywdc30.png)](https://res.cloudinary.com/practicaldev/image/fetch/s--oLkx1j2I--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev 请记住,你永远不能有足够的表情符号。

## 把所有内容放在一起:一个mrkdwn警报

让我们将所有这些内容放在一起,形成一个应用程序监控平台可能通过Slack发送的警报。我们可能会使用的一些元素包括:

* **通知特定的个人或团队**。应用程序可能会从SRE或值班人员的数据库中获取这些信息。在这里,我们将使用`@-mentions`。
* **对警报的简洁描述**。在这里,我们将使用基本的格式来突出显示问题。
* **指向仪表板和相关信息的链接**。以便团队可以更深入地了解问题。
* **需要采取的步骤列表**。这些可以预定义并添加到Block Kit中。
* **日期和时间信息**。这样任何看到警报的人都会知道警报发生的时间。
* **表情符号**。这可以为警报增添视觉吸引力并引起注意。

总之, mrkdwn此警报的格式将是:

{ "blocks": [ { "type": "section", "text": { "type": "mrkdwn", "text": "@colin \n @sres \n\n <!date^1697250654^{date_num}|2023年10月13日> \n\n [APM ALERT]: 发现高错误率! 🔴 \n - 服务:用户认证API \n - 环境:生产环境 \n\n 📈 指标 \n\n 错误率15%(阈值:5%) \n 响应时间900ms(平均值:200ms) \n 吞吐量1200 rpm(每分钟请求数) \n 🗺 地理影响:美国东部,欧洲中部 \n \n 🆘 相关事件: \n https://example.com|数据库延迟峰值 (opens new window) \n https://example.com|Redis连接故障 (opens new window) \n \n 🔗 仪表板链接https://example.com|APM仪表板 (opens new window) \n \n 💬 推荐操作: \n 1. 验证后端数据库的健康和连接状态。 \n 2. 检查Redis服务器和相关指标。 \n 3. 评估最近的部署是否存在潜在问题。 } } ]


Slack 的 mrkdwn 是一个强大的工具。使用 mrkdwn 可以增强关键信息的可读性和强调性。上面的示例警报就展示了这一点,突出了团队的重要数据,并确保他们可以迅速采取行动。

将 mrkdwn 集成到将您的Slack通知美化不仅仅使消息更加美观,更重要的是使其变得更加用户友好。当时间紧迫且清晰度至关重要时,充分利用mrkdwn的潜力可以确保您的提醒不仅仅被注意到,而且能够有效地采取行动。

在Knock,我们进一步将mrkdwn整合到我们的[模板引擎](https://docs.knock.app/integrations/chat/slack/designing-slack-templates)中,并使用液态标签进行模板化和易于使用的JSON编辑器进行增强。这使您可以根据自己的需求设计您的Slack通知。

查看一些[Slack通知示例](https://docs.knock.app/integrations/chat/slack/slack-examples)以获取灵感,并在[此处](https://dashboard.knock.app/signup)免费开始使用。