当前位置: 首页 > backend >正文

多信息流展示利器 - 利用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/"}
}
参数名是否必填类型说明
msgtypeString消息类型为 actionCard
titleString标题
textString内容(支持Markdown语法)
singleTitleString单个按钮的标题
singleURLString单个按钮的跳转链接
独立跳转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/"}]}
}
参数名是否必填类型说明
msgtypeString消息类型为 actionCard
titleString标题
textString内容(支持Markdown语法)
btnOrientationString按钮排列方向,0为竖直,1为横向
btnsArray按钮列表
btns[].titleString按钮标题
btns[].actionURLString按钮的跳转链接

示例代码
整体跳转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"} ]}
}
参数名是否必填类型说明
msgtypeString消息类型为 feedCard
linksArray链接列表
links[].titleString链接标题
links[].messageURLString跳转链接
links[].picURLString图片链接

示例代码
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类型消息的详细说明与示例代码。希望这些内容能帮助开发者更好地理解和应用钉钉机器人的高级功能。如果有任何问题或需要进一步的帮助,请随时留言!

http://www.xdnf.cn/news/14996.html

相关文章:

  • 征程 6|工具链量化简介与代码实操
  • 基于Java+SpringBoot 协同过滤算法私人诊所管理系统
  • STM32第十八天 ESP8266-01S和电脑实现串口通信
  • SpringAI学习笔记-MCP客户端简单示例
  • OSPFv3和v2区别(续)
  • SKUA-GOCAD入门教程-第九节 面的创建与编辑1
  • RISC-V:开源芯浪潮下的技术突围与职业新赛道 (一)为什么RISC-V是颠覆性创新?
  • 二刷(李宏毅深度学习,醍醐灌顶,长刷长爽)
  • QML事件处理:鼠标、拖拽与键盘事件
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | StickyNavbar(粘性导航栏)
  • 【学习笔记】网络设备(华为交换机)基础知识 24 —— 以太网子接口基础知识
  • Java 阻塞队列:7种类型全解析
  • [Swarm] 上下文变量 | 接入function功能调用 | Mcp
  • Spring注解驱动开发
  • C语言使用Protobuf进行网络通信
  • Docker、Git与虚拟机:技术原理与深度对比(更新版)
  • SSH密钥 与 Ed25519密钥 是什么关系
  • 深入解析 structuredClone API:现代JS深拷贝的终极方案
  • 找出父节点名称和子节点名称拼接
  • C语言基础(1)
  • (四)机器学习小白入门YOLOv :图片标注实操手册
  • 插板式步进伺服模组:化工行业如何控制流量
  • Tensor数据转换
  • 华为eNSP防火墙实验(包含详细步骤)
  • 单稳态触发器Multisim电路仿真——硬件工程师笔记
  • Vue3组合式API应用:状态共享与逻辑复用最佳实践
  • 音频被动降噪技术
  • C++异步编程入门
  • ESP32-使用VSCODE 各种问题总结汇总
  • 【踩坑实录】RabbitMQ 高并发异常“爆仓”事故还原与配置优化实战指南