卡片
卡片消息给予开发者便利,让用户感觉更方便的交互展示形式。卡片消息统一为JSON对象,发送卡片消息时,将JSON对象套入messageBody
字段即可。
卡片编辑器
为了方便开发者使用,我们提供了可视化卡片编辑器在新窗口打开,通过卡片编辑器可以很方便的构建你想要的卡片样式。
卡片属性
字段
字段 | 类型 | 必传 | 说明 |
---|
content | string | 否 | 附加文本,支持Markdown语法、菱形语法 |
card | object | 是 | 卡片,限制10000个字符,支持Markdown语法,不支持菱形语法 |
卡片
字段 | 类型 | 必传 | 说明 |
---|
type | string | 是 | 类型,固定填写card |
components | list<object> | 是 | 内容组件 |
theme | string | 是 | 卡片风格,grey,red,orange,yellow ,green,indigo,blue,purple,black,default |
title | string | 否 | 卡片标题,只支持普通文本,可以为空字符串 |
JSON
{
"content": "这是一段卡片外的文字消息,可以附带Markdown语法、@用户、#频道等菱形语法功能,在卡片编辑器中不会实时预览。",
"card": {
"type": "card",
"components": [],
"theme": "grey",
"title": "这是一个卡片标题"
}
}
内容组件
标题
字段
字段 | 类型 | 必传 | 说明 |
---|
type | string | 是 | 组件类型,当前填写header |
text | object | 是 | 标题数据 |
标题数据
字段 | 类型 | 必传 | 说明 |
---|
type | string | 是 | 文本类型,plain-text:普通文本,dodo-md:Markdown文本 |
content | string | 是 | 文本内容,支持Markdown语法,最多显示2行 |
JSON
{
"type": "header",
"text": {
"type": "dodo-md",
"content": "一个标题字号的文本内容,支持Markdown"
}
}
文本
字段
字段 | 类型 | 必传 | 说明 |
---|
type | string | 是 | 组件类型,当前填写section |
text | object | 是 | 文本数据 |
文本数据
字段 | 类型 | 必传 | 说明 |
---|
type | string | 是 | 文本类型,plain-text:普通文本,dodo-md:Markdown文本 |
content | string | 是 | 文本内容,支持Markdown语法 |
JSON
{
"type": "section",
"text": {
"type": "dodo-md",
"content": "一长段文本字号的文本内容,支持Markdown,最大支持字符数2000。"
}
}
多栏文本
字段
字段 | 类型 | 必传 | 说明 |
---|
type | string | 是 | 组件类型,当前填写section |
text | object | 是 | 文本数据 |
文本数据
字段 | 类型 | 必传 | 说明 |
---|
type | string | 是 | 数据类型,当前填写paragraph |
cols | string | 是 | 栏数,2~6栏 |
fields | list<object> | 是 | 数据列表 |
数据列表
字段 | 类型 | 必传 | 说明 |
---|
type | string | 是 | 文本类型,plain-text:普通文本,dodo-md:markdown文本 |
content | string | 是 | 文本内容 |
JSON
{
"type": "section",
"text": {
"type": "paragraph",
"cols": 6,
"fields": [{
"type": "dodo-md",
"content": "第一栏\n内容"
}, {
"type": "dodo-md",
"content": "第二栏\n内容"
}, {
"type": "dodo-md",
"content": "第三栏\n内容"
}, {
"type": "dodo-md",
"content": "第四栏\n内容"
}, {
"type": "dodo-md",
"content": "第五栏\n内容"
}, {
"type": "dodo-md",
"content": "第六栏\n内容"
}
]
}
}
备注
字段
字段 | 类型 | 必传 | 说明 |
---|
type | string | 是 | 组件类型,当前填写remark |
elements | list<object> | 是 | 数据列表 |
数据列表
字段 | 类型 | 必传 | 说明 |
---|
type | string | 是 | 数据类型,image:图片,plain-text:普通文本,dodo-md:markdown文本 |
content | string | 否 | 文本内容,数据类型为文本 时必填 |
src | string | 否 | 图片地址,一般用作备注头部图标显示,数据类型为图片 时必填 |
JSON
{
"type": "remark",
"elements": [{
"type": "image",
"src": "https://img.imdodo.com/upload/cdn/4803E0BBF8678A657EBD762D7AC45710_1660189645624.png"
}, {
"type": "dodo-md",
"content": "BiliBili"
}, {
"type": "image",
"src": "https://img.imdodo.com/upload/cdn/1C274FE42B6C98494A06D674559B2206_1658739484506.png"
}, {
"type": "dodo-md",
"content": "DoDo"
}
]
}
图片
字段
字段 | 类型 | 必传 | 说明 |
---|
type | string | 是 | 组件类型,当前填写image |
src | string | 是 | 图片地址 |
JSON
{
"type": "image",
"src": "https://img.imdodo.com/upload/cdn/09151DF5C726C6E2F5915E5B117EF98E_1660189645615.png"
}
多图
字段
字段 | 类型 | 必传 | 说明 |
---|
type | string | 是 | 组件类型,当前填写image-group |
elements | list<object> | 是 | 数据列表,最多9条 |
数据列表
字段 | 类型 | 必传 | 说明 |
---|
type | string | 是 | 数据类型,当前填写image |
src | string | 是 | 图片地址 |
JSON
{
"type": "image-group",
"elements": [{
"type": "image",
"src": "https://img.imdodo.com/upload/cdn/1C274FE42B6C98494A06D674559B2206_1658739484506.png"
}, {
"type": "image",
"src": "https://img.imdodo.com/upload/cdn/09151DF5C726C6E2F5915E5B117EF98E_1660189645615.png"
}
]
}
视频
提示
视频链接,必须是官方的链接,后期会提供视频上传接口,前期可通过DoDo群内上传视频,从消息事件内获得视频链接
字段
字段 | 类型 | 必传 | 说明 |
---|
type | string | 是 | 组件类型,当前填写video |
title | string | 否 | 视频标题 |
cover | string | 是 | 视频封面 |
src | string | 是 | 视频地址 |
JSON
{
"type": "video",
"title": "屏幕内覆盖视频地址",
"cover": "https://img.imdodo.com/dodo/2493bf9b000b8dc18e77d079ac517bb9.png",
"src": "https://video.imdodo.com/dodo/7f0a1979c818fa05cf7bdeae20aad24b.mp4"
}
倒计时
字段
字段 | 类型 | 必传 | 说明 |
---|
type | string | 是 | 组件类型,当前填写countdown |
title | string | 否 | 倒计时标题 |
style | string | 是 | 显示样式,day:按天显示,hour :按小时显示 |
endTime | long | 是 | 结束时间戳 |
JSON
{
"type": "countdown",
"title": "主题",
"style": "hour",
"endTime": 1660644927968
}
分割线
字段
字段 | 类型 | 必传 | 说明 |
---|
type | string | 是 | 组件类型,当前填写divider |
JSON
交互组件
按钮
提示
所有按钮的Action都会回传事件给开发者,且会带上value值
字段
字段 | 类型 | 必传 | 说明 |
---|
type | string | 是 | 组件类型,当前填写button-group |
elements | list<object> | 是 | 数据列表 |
数据列表
字段 | 类型 | 必传 | 说明 |
---|
type | string | 是 | 数据类型,当前填写button |
interactCustomId | string | 否 | 自定义按钮ID |
click | object | 是 | 按钮点击动作 |
color | string | 是 | 按钮颜色,grey,red,orange,green,blue,purple,default |
name | string | 是 | 按钮名称 |
form | object | 否 | 回传表单,仅当按钮点击动作为form时需要填写 |
按钮点击动作
字段 | 类型 | 必传 | 说明 |
---|
value | string | 否 | Value |
action | string | 是 | 按钮动作类型,link_url:跳转链接,call_back:回传参数,copy_content:复制内容,form:回传表单 |
JSON
{
"type": "button-group",
"elements": [{
"type": "button",
"interactCustomId": "交互自定义id1",
"click": {
"value": "https://www.imdodo.com",
"action": "link_url"
},
"color": "blue",
"name": "链接跳转"
}, {
"type": "button",
"interactCustomId": "交互自定义id2",
"click": {
"value": "value",
"action": "call_back"
},
"color": "green",
"name": "回传参数"
}, {
"type": "button",
"interactCustomId": "交互自定义id3",
"click": {
"value": "这段话会在点击按钮后复制到剪贴板",
"action": "copy_content"
},
"color": "grey",
"name": "复制内容"
}, {
"type": "button",
"interactCustomId": "交互自定义id",
"click": {
"value": "",
"action": "form"
},
"color": "grey",
"name": "回传表单",
"form": {
"title": "表单标题",
"elements": [{
"type": "input",
"key": "选项自定义id1",
"title": "第1个问题",
"rows": 4,
"placeholder": "未填写时的默认内容",
"minChar": 1,
"maxChar": 4000
}, {
"type": "input",
"key": "选项自定义id2",
"title": "第2个问题",
"rows": 1,
"placeholder": "输入框提示",
"minChar": 0,
"maxChar": 1000
}
]
}
}
]
}
列表选择器
字段
字段 | 类型 | 必传 | 说明 |
---|
type | string | 是 | 组件类型,当前填写list-selector |
interactCustomId | string | 否 | 交互自定义ID |
placeholder | string | 否 | 输入框提示 |
elements | list<object> | 是 | 数据列表 |
min | int | 是 | 最少选中个数 |
max | int | 是 | 最大选中个数 |
数据列表
字段 | 类型 | 必传 | 说明 |
---|
name | string | 是 | 选项名 |
desc | string | 否 | 选项描述 |
JSON
{
"type": "list-selector",
"interactCustomId": "交互自定义id",
"placeholder": "未选择时显示的文本内容",
"elements": [{
"name": "选项1",
"desc": "可以填一些描述"
}, {
"name": "选项2"
}, {
"name": "选项3",
"desc": "也可以不填"
}
],
"min": 1,
"max": 2
}
回传表单
提示
表单页面由表单按钮触发,因此外层需要先定义表单按钮!!!
字段
字段 | 类型 | 必传 | 说明 |
---|
title | string | 是 | 表单标题 |
elements | list<object> | 是 | 数据列表 |
数据列表
字段 | 类型 | 必传 | 说明 |
---|
type | string | 是 | 选项类型,input:输入框 |
key | string | 是 | 选项自定义ID |
title | string | 是 | 选项名称 |
rows | int | 是 | 输入框高度,填1表示单行,最多4行 |
placeholder | string | 否 | 输入框提示 |
minChar | int | 是 | 最小字符数,介于0~4000 |
maxChar | int | 是 | 最大字符数,介于1~4000,且最大字符数不得小于最小字符数 |
JSON
{
"title": "表单标题",
"elements": [{
"type": "input",
"key": "选项自定义id1",
"title": "第1个问题",
"rows": 4,
"placeholder": "未填写时的默认内容",
"minChar": 1,
"maxChar": 4000
}, {
"type": "input",
"key": "选项自定义id2",
"title": "第2个问题",
"rows": 1,
"placeholder": "输入框提示",
"minChar": 0,
"maxChar": 1000
}
]
}
文字 + 模块
字段
字段 | 类型 | 必传 | 说明 |
---|
type | string | 是 | 组件类型,当前填写section |
align | string | 否 | 对齐方式,left:左对齐,right:右对齐 |
text | object | 是 | 文本 |
accessory | object | 是 | 附件 |
文本
左侧文本可以设置为文本或多栏文本
附件
右侧附件可以设置为图片或按钮
JSON
{
"type": "section",
"text": {
"type": "dodo-md",
"content": "左侧文本可以设置为文本或多栏文本,右侧附件为可以设置图片或按钮"
},
"align": "right",
"accessory": {
"type": "button",
"click": {
"value": "https://www.imdodo.com",
"action": "link_url"
},
"color": "green",
"name": "按钮"
}
}