多信息流展示利器 - 利用FeedCard优化企业通知与公告发布
在实际开发过程中,发送消息不仅仅是为了展示信息,更重要的是能够引导用户进行下一步操作。ActionCard 和 FeedCard 类型的消息正是为此而设计。ActionCard 适用于需要突出按钮交互的场景,例如审批通知、任务提醒等;而 FeedCard 更适合用于展示多条结构化信息,如新闻资讯、公告列表等。合理使用这两种消息类型,可以显著提升机器人与用户之间的互动效率和体验。
此外,在构建企业级应用时,还需注意消息的安全性与可维护性。例如,对于敏感信息的推送,应确保 Webhook 地址不被泄露;在多人协作的项目中,建议将消息模板统一管理,便于后续修改与扩展。同时,钉钉开放平台也提供了详细的文档支持与调试工具,开发者可以参考官方文档获取更多高级功能,如 @成员、消息卡片样式定制等,从而打造更加专业的企业机器人服务。
上文链接:钉钉企业内部机器人开发技巧:支持的消息类型详解-CSDN博客
场景四:发送ActionCard消息类型
预期效果
- 整体跳转ActionCard类型:用户点击卡片上的按钮时,将被引导至一个指定的URL。
- 独立跳转ActionCard类型:卡片上包含多个按钮,每个按钮可以指向不同的链接。
数据格式
整体跳转ActionCard类型
{"msgtype": "actionCard","actionCard": {"title": "整体跳转actionCard消息", "text": "[这是一张图片](https://img.alicdn.com/tfs/TB1NwmBEL9TBuNjy1zbXXXpepXa-2400-1218.png) \n 这是一个整体跳转actionCard消息","singleTitle" : "阅读全文","singleURL" : "https://open.dingtalk.com/document/"}
}
参数名 | 是否必填 | 类型 | 说明 |
---|---|---|---|
msgtype | 是 | String | 消息类型为 actionCard |
title | 是 | String | 标题 |
text | 是 | String | 内容(支持Markdown语法) |
singleTitle | 是 | String | 单个按钮的标题 |
singleURL | 是 | String | 单个按钮的跳转链接 |
独立跳转ActionCard类型
{"msgtype": "actionCard","actionCard": {"title": "独立跳转actionCard消息", "text": "[这是一张图片](https://img.alicdn.com/tfs/TB1NwmBEL9TBuNjy1zbXXXpepXa-2400-1218.png) \n 这是一个独立跳转actionCard消息", "btnOrientation": "1", "btns": [{"title": "查看摘要", "actionURL": "https://open.dingtalk.com/document/"}, {"title": "不感兴趣", "actionURL": "https://open.dingtalk.com/"}]}
}
参数名 | 是否必填 | 类型 | 说明 |
---|---|---|---|
msgtype | 是 | String | 消息类型为 actionCard |
title | 是 | String | 标题 |
text | 是 | String | 内容(支持Markdown语法) |
btnOrientation | 否 | String | 按钮排列方向,0为竖直,1为横向 |
btns | 是 | Array | 按钮列表 |
btns[].title | 是 | String | 按钮标题 |
btns[].actionURL | 是 | String | 按钮的跳转链接 |
示例代码
整体跳转ActionCard类型
private void actionCard(DingTalkClient client) {try {OapiRobotSendRequest request = new OapiRobotSendRequest();request.setMsgtype("actionCard");OapiRobotSendRequest.Actioncard actioncard = new OapiRobotSendRequest.Actioncard();actioncard.setTitle("整体跳转actionCard消息");actioncard.setText("[这是一张图片](https://img.alicdn.com/tfs/TB1NwmBEL9TBuNjy1zbXXXpepXa-2400-1218.png) \n 这是一个整体跳转actionCard消息");actioncard.setSingleTitle("阅读全文");actioncard.setSingleURL("https://open.dingtalk.com/document/");request.setActionCard(actioncard);OapiRobotSendResponse response = client.execute(request);System.out.println(response.getBody());} catch (ApiException e) {e.printStackTrace();}
}
独立跳转ActionCard类型
private void actionCard(DingTalkClient client) {try {OapiRobotSendRequest request = new OapiRobotSendRequest();request.setMsgtype("actionCard");OapiRobotSendRequest.Actioncard actioncard = new OapiRobotSendRequest.Actioncard();actioncard.setTitle("独立跳转actionCard消息");actioncard.setText("[这是一张图片](https://img.alicdn.com/tfs/TB1NwmBEL9TBuNjy1zbXXXpepXa-2400-1218.png) \n 这是一个独立跳转actionCard消息");// 创建两个按钮List<OapiRobotSendRequest.Btns> btnsList = new ArrayList<>();OapiRobotSendRequest.Btns btnOne = new OapiRobotSendRequest.Btns();btnOne.setTitle("查看摘要");btnOne.setActionURL("https://open.dingtalk.com/document/");btnsList.add(btnOne);OapiRobotSendRequest.Btns btnTwo = new OapiRobotSendRequest.Btns();btnTwo.setTitle("不感兴趣");btnTwo.setActionURL("https://open.dingtalk.com/");btnsList.add(btnTwo);actioncard.setBtns(btnsList);actioncard.setBtnOrientation("1"); // 设置按钮横向排列request.setActionCard(actioncard);OapiRobotSendResponse response = client.execute(request);System.out.println(response.getBody());} catch (ApiException e) {e.printStackTrace();}
}
场景五:发送FeedCard消息类型
预期效果
通过FeedCard类型的消息,可以在群聊中展示一组带有图片和链接的卡片信息,适用于展示新闻、公告等多条内容。
数据格式
{"msgtype": "feedCard","feedCard": {"links": [{"title": "这是feedcard消息1", "messageURL": "https://open.dingtalk.com/document/", "picURL": "https://img.alicdn.com/tfs/TB1NwmBEL9TBuNjy1zbXXXpepXa-2400-1218.png"},{"title": "这是feedcard的消息2", "messageURL": "https://open.dingtalk.com/", "picURL": "https://img.alicdn.com/tfs/TB1NwmBEL9TBuNjy1zbXXXpepXa-2400-1218.png"},{"title": "这是feedcard的消息3", "messageURL": "https://www.dingtalk.com/", "picURL": "https://img.alicdn.com/tfs/TB1NwmBEL9TBuNjy1zbXXXpepXa-2400-1218.png"} ]}
}
参数名 | 是否必填 | 类型 | 说明 |
---|---|---|---|
msgtype | 是 | String | 消息类型为 feedCard |
links | 是 | Array | 链接列表 |
links[].title | 是 | String | 链接标题 |
links[].messageURL | 是 | String | 跳转链接 |
links[].picURL | 是 | String | 图片链接 |
示例代码
package com.dingtalk;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.dingtalk.api.DefaultDingTalkClient;
import com.dingtalk.api.DingTalkClient;
import com.dingtalk.api.request.OapiRobotSendRequest;
import com.dingtalk.api.response.OapiRobotSendResponse;
import com.taobao.api.ApiException;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;import java.util.ArrayList;
import java.util.List;@RestController
public class RobotsController3 {private static final String FEED = "feedCard消息";/*** 实现机器人发送feedCard消息*/@RequestMapping(value = "/robots", method = RequestMethod.POST)public String helloRobots(@RequestBody(required = false) JSONObject json) {System.out.println(JSON.toJSONString(json));String content = json.getJSONObject("text").get("content").toString().replaceAll(" ", "");System.out.println(content);String sessionWebhook = json.getString("sessionWebhook");DingTalkClient client = new DefaultDingTalkClient(sessionWebhook);if (FEED.equals(content)) {feedCard(client);}return null;}/*** feedCard消息类型** @param client*/private void feedCard(DingTalkClient client) {try {OapiRobotSendRequest request = new OapiRobotSendRequest();request.setMsgtype("feedCard");OapiRobotSendRequest.Feedcard feedcard = new OapiRobotSendRequest.Feedcard();OapiRobotSendRequest.Links linkOne = new OapiRobotSendRequest.Links();linkOne.setTitle("这是feedcard消息1");linkOne.setMessageURL("https://open.dingtalk.com/document/");linkOne.setPicURL("https://img.alicdn.com/tfs/TB1NwmBEL9TBuNjy1zbXXXpepXa-2400-1218.png");OapiRobotSendRequest.Links linkTwo = new OapiRobotSendRequest.Links();linkTwo.setTitle("这是feedcard的消息2");linkTwo.setMessageURL("https://open.dingtalk.com/");linkTwo.setPicURL("https://img.alicdn.com/tfs/TB1NwmBEL9TBuNjy1zbXXXpepXa-2400-1218.png");OapiRobotSendRequest.Links linkThree = new OapiRobotSendRequest.Links();linkThree.setTitle("这是feedcard的消息3");linkThree.setMessageURL("https://www.dingtalk.com/");linkThree.setPicURL("https://img.alicdn.com/tfs/TB1NwmBEL9TBuNjy1zbXXXpepXa-2400-1218.png");List<OapiRobotSendRequest.Links> linksList = new ArrayList<>();linksList.add(linkOne);linksList.add(linkTwo);linksList.add(linkThree);feedcard.setLinks(linksList);request.setFeedCard(feedcard);OapiRobotSendResponse response = client.execute(request);System.out.println(response.getBody());} catch (ApiException e) {e.printStackTrace();}}
}
以上就是关于钉钉企业内部机器人发送ActionCard和FeedCard类型消息的详细说明与示例代码。希望这些内容能帮助开发者更好地理解和应用钉钉机器人的高级功能。如果有任何问题或需要进一步的帮助,请随时留言!