卡片消息是挺常见的一种格式,比如QQ卡牌用的是XML格式。
我们今天介绍一下slack的卡片格式,至于slack是啥,用谷歌搜会发现是一个软件名称,但用用其他的发现slack的这一套标准还是很多人用的,而且很多的开源软件都支持通过slack来发送消息。而slack被很多公司当作内部通讯工具来用,这样可以少交一部分钱。
所以我们今天要说的是,slack对接接口,并不会对该软件深入了解
一、【什么是slack】
Slack是一款面向团队的协作和通信平台,主要功能包括即时消息、文件共享、语音和视频通话、以及集成众多第三方应用和服务。Slack的核心特点是频道(channels),用户可以在不同的频道中讨论不同的话题。此外,Slack还支持私聊(DM)、群组聊天、以及高级搜索功能,帮助团队高效沟通和协作。Slack还提供丰富的API,允许开发者创建自定义的机器人和应用,进一步增强其功能。
二、【什么是卡片消息】
卡片消息(Card Message)是一种以结构化方式显示信息的消息类型,通常用于即时通讯平台如Slack、QQ、微信等。卡片消息可以包含文本、图像、按钮、链接等元素,使信息更易于阅读和交互。它们常用于通知、警报、任务更新等场景,帮助用户快速获取关键信息和进行相关操作。
下图就是一个卡片消息,不过qq卡牌是通过xml发送的,我们今天的slack卡片使用json发送
我们今天说一下mattermost的slack标准的attachment卡片如何制作,也就是类似下图这样
三、【卡片消息能做什么】
卡片消息可以扩展聊天功能,除了插入美观的外部链接、图表之外。笔者认为他最大的作用是可以和后端服务器通信,这样我们就可以把一个卡片放入聊天群中,通过聊天群的卡片按钮来做一些简单的操作。
比如下图这个卡片消息,我们完全可以将其按钮功能改为继续执行一些动作或发送一些信息。
四、【编写我们自己的slack卡片】
卡片本质是一串JSON字符串,我们通过改一改参数,来达到自己的目的。代码如下,将url改为slack服务器的ip或者url即可
import json
# Mattermost attachments示例
attachments = [
{
"fallback": "This is a fallback text if the attachment cannot be displayed.", # 当附件无法显示时的备用文本
"color": "#FF8000", # 附件左侧的颜色条,通常用来表示重要性或类别
"pretext": "This is optional pretext that appears above the attachment.", # 可选的前文本,显示在附件上方
"author_name": "Author Name", # 作者名称
"author_link": "http://author.url", # 作者链接
"author_icon": "http://path.to/author/icon.png", # 作者图标
"title": "Attachment Title", # 附件标题
"title_link": "http://title.link", # 标题链接
"text": "This is the main text of the attachment.", # 附件主要文本
"fields": [ # 附件中的字段列表
{
"title": "Field1", # 字段标题
"value": "Value1", # 字段值
"short": True # 短字段,是否在同一行显示多个字段
},
{
"title": "Field2", # 另一个字段标题
"value": "Value2", # 另一个字段值
"short": True # 仍然是短字段
}
],
"image_url": "http://path.to/image.png", # 附件中的图片URL
"thumb_url": "http://path.to/thumb.png", # 附件中的缩略图URL
"footer": "Footer text", # 附件的页脚文本
"footer_icon": "http://path.to/footer/icon.png", # 页脚图标
"ts": 123456789, # 时间戳,通常用于显示附件的时间
"actions": [ # 附件中的操作按钮
{
"name": "button", # 按钮名称
"integration": { # 按钮的集成信息
"url": "http://yourserver.com/yourendpoint", # 按钮触发的URL
"context": {
"action": "do_something" # 按钮触发时的上下文信息
}
},
"type": "button", # 按钮类型
"text": "Button Text", # 按钮文本
"style": "primary" # 按钮样式,可以是"default", "primary", "danger"
},
{
"name": "menu", # 菜单名称
"integration": { # 菜单的集成信息
"url": "http://yourserver.com/yourendpoint", # 菜单触发的URL
"context": {
"action": "select_option" # 菜单触发时的上下文信息
}
},
"type": "select", # 菜单类型
"options": [ # 菜单选项列表
{
"text": "Option 1", # 选项文本
"value": "value1" # 选项值
},
{
"text": "Option 2", # 另一个选项文本
"value": "value2" # 另一个选项值
}
]
}
]
}
]
# 将attachments对象转换为JSON格式,准备发送到Mattermost
attachments_json = json.dumps(attachments, indent=4)
print(attachments_json)