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

详解调用钉钉AI助理消息API发送钉钉消息卡片给指定单聊用户

文章目录

    • 前言
    • 准备工作
      • 1、在钉钉开发者后台创建一个钉钉企业内部应用;
      • 2、创建并保存好应用的appKey和appSecret,后面用于获取调用API的请求token;
      • 3、了解AI助理主动发送消息API:
      • 4、应用中配置好所需权限:
        • 4.1、权限点
        • 4.2、配置方式
      • 5、配置消息卡片
        • 5.1、新建卡片
      • 6、应用中新建AI助理
    • 接口调用流程
      • Maven依赖
      • 封装一个工具类
      • 查询用户信息
        • 查看响应参数
        • 调用代码示例:
      • 调用AI助理发送消息API
        • postman调用:
        • 效果:

前言

  本文针对现在钉钉提供的AI助理能力,带你学会如何调用钉钉的AI助理主动发送消息API去发送一个自己配置的钉钉消息卡片给指定钉钉用户,可以设想一下,实现了后台对接钉钉AI助理的能力,那对于你公司的行政来说,就可以实现更多更灵活的工作场景,比如定时给某些员工发送指定的钉钉消息卡片。AI助理API调用场景的文章CSDN目前鲜有介绍,看完本文读者会明白钉钉的AI助理怎么对接。

准备工作

1、在钉钉开发者后台创建一个钉钉企业内部应用;

在这里插入图片描述

2、创建并保存好应用的appKey和appSecret,后面用于获取调用API的请求token;

3、了解AI助理主动发送消息API:

文档地址:AI 助理预备发消息(主动发送模式)
在这里插入图片描述

4、应用中配置好所需权限:

4.1、权限点

  智能交互卡片写权限;

4.2、配置方式

  在应用管理的权限中搜索添加:
在这里插入图片描述

5、配置消息卡片

  钉钉的消息卡片模板可以配置更丰富的组件和更个性化的布局,所以实际场景中,一般发送使用消息卡片承载消息内容,先带大家把消息卡片配好。

5.1、新建卡片

  我们登录开发者后台后从“开放能力”导航栏进入“卡片平台”,并且点击新建模板:
在这里插入图片描述
  填写模板创建信息:包括模板名称、卡片类型(这里以普通的消息卡片举例)、模板场景(以普通卡片举例)、关联应用(你创建的企业内部应用,创建后就能选到):
在这里插入图片描述

  信息填好后点创建我们就进入了模板编辑页面,我们可以从左边选择与拖拽自己想要的组件到卡片模板里,比如按钮、文本栏、甚至表格等复杂组件,像按钮这些组件还支持配置点击事件与跳转链接:
在这里插入图片描述
  我带大家配置一个包含卡片头、文本栏、点击按钮的简单卡片,首先从左边拖一个卡片头过来,并设置卡片头展示的内容:
在这里插入图片描述
  再拖一个文本栏过来放消息介绍描述:
在这里插入图片描述
  最后放置个按钮在最下面,并且属性中填写按钮文案,事件中配置点击后跳转的流程链接(比如审批流程):
在这里插入图片描述
  配置完成点右上角保存即可使用(注意,调试期间不要点发布,点发布后模板不可编辑),然后在模板列表查看自己新建的模板可以得到模板ID信息,后面调接口会用到:
在这里插入图片描述

6、应用中新建AI助理

  消息是通过API控制AI助理发送的,需要在应用中创建一个AI助理,并绑定到魔法棒应用,最后发布就可以调用接口测试了:
在这里插入图片描述

接口调用流程

Maven依赖

<dependency><groupId>com.aliyun</groupId><artifactId>dingtalk</artifactId><version>2.0.14</version>
</dependency>

封装一个工具类

工具类包含流程所需配置的读取以及token生成方法:

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.aliyun.dingtalkstorage_1_0.Client;
import com.aliyun.dingtalkstorage_1_0.models.*;
import com.aliyun.teaopenapi.models.Config;
import com.remo.pms.entity.ding.FileInfoEntity;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.HashMap;
import java.util.Map;@Component
@Data
@Slf4j
public class DingDingUtils {@Value("${ding-ding.clientId}")private String appKey;@Value("${ding-ding.clientSecret}")private String appSecret;@Value("${ding-ding.space-id}")private String spaceId;@Value("${ding-ding.union-id}")private String unionId;public Map<String, Object> getDingDingAccessToken() {Map<String, Object> result = new HashMap<>();String url = "https://oapi.dingtalk.com/gettoken?appkey=" + appKey + "&appsecret=" + appSecret;String resultStr = HttpUtils.get(url, null);JSONObject jsonObject = JSON.parseObject(resultStr);result.put("access_token", jsonObject.getString("access_token"));result.put("expires_in", jsonObject.getLongValue("expires_in"));return result;}
}

查询用户信息

  调用AI助理发送消息接口前我们需要先获得发送用户的unionid(我以单聊场景举例)。

查看响应参数

  我们先看postman调用结果,返回值有我们需要的unionid(每个钉钉用户有个对应的):
在这里插入图片描述

调用代码示例:
String accessToken = dingDingUtils.getDingDingAccessToken().get("access_token").toString();
String url = "https://oapi.dingtalk.com/topapi/v2/user/get?language=zh_CN";
url = url + "&access_token=" + accessToken ;
url = url + "&userid=" + "用户ID";String resultStr = HttpUtils.get(url, null);
JSONObject jsonObject = JSON.parseObject(resultStr);
String unionId = jsonObject.getJSONObject("result").getString("unionid");
log.info("unionid:{}", unionId);

调用AI助理发送消息API

postman调用:

  我们先看postman调用结果,参数就只有三个,unionid、content(模板ID)、contentType(给ai_card即可),注意header中还需要传入accessToken,返回值有conversationToken就成功了:
在这里插入图片描述

效果:

  调用完立马能看到钉钉收到消息卡片通知:
在这里插入图片描述

相关文章:

详解调用钉钉AI助理消息API发送钉钉消息卡片给指定单聊用户

文章目录 前言准备工作1、在钉钉开发者后台创建一个钉钉企业内部应用&#xff1b;2、创建并保存好应用的appKey和appSecret&#xff0c;后面用于获取调用API的请求token&#xff1b;3、了解AI助理主动发送消息API&#xff1a;4、应用中配置好所需权限&#xff1a;4.1、权限点4.…...

57 长短期记忆网络(LSTM)_by《李沐:动手学深度学习v2》pytorch版

系列文章目录 文章目录 系列文章目录长短期记忆网络&#xff08;LSTM&#xff09;门控记忆元输入门、忘记门和输出门候选记忆元 (相当于RNN中计算 H t H_t Ht​)记忆元隐状态 从零开始实现初始化模型参数定义模型训练和预测 简洁实现小结练习 长短期记忆网络&#xff08;LSTM&a…...

Linux系统安装教程

Linux安装流程 一、前置准备工作二、开始安装Linux 一、前置准备工作 安装好VMWare虚拟机&#xff0c;并下载Linux系统的安装包&#xff1b; Linux安装包路径为&#xff1a;安装包链接 &#xff0c; 提取码为&#xff1a;4tiM 二、开始安装Linux...

Redis: Sentinel工作原理和故障迁移流程

Sentinel 哨兵几个核心概念 1 ) 定时任务 Sentinel 它是如何工作的&#xff0c;是如何感知到其他的 Sentinel 节点以及 Master/Slave节点的就是通过它的一系列定时任务来做到的&#xff0c;它内部有三个定时任务 第一个就是每一秒每个 Sentinel 对其他 Sentinel 和 Redis 节点…...

通信工程学习:什么是IGMP因特网组管理协议

IGMP&#xff1a;因特网组管理协议 IGMP&#xff08;Internet Group Management Protocol&#xff0c;因特网组管理协议&#xff09;是TCP/IP协议簇中负责组播成员管理的协议。它主要用于在用户主机和与其直接相连的组播路由器之间建立和维护组播组成员关系。以下是关于IGMP协议…...

高效批量导入多个SQL文件至SQL Server数据库的实用方法

当需要批量导入多个SQL文件到SQL Server数据库时&#xff0c;可以通过以下几种方法来实现&#xff1a; 方法一&#xff1a;使用SQLCMD命令行工具&#xff08;亲测可用&#xff09; 准备SQL文件&#xff1a;确保所有的SQL文件都位于同一个文件夹内&#xff0c;并且文件扩展名为…...

【树莓派系列】树莓派wiringPi库详解,官方外设开发

树莓派wiringPi库详解&#xff0c;官方外设开发 文章目录 树莓派wiringPi库详解&#xff0c;官方外设开发一、安装wiringPi库二、wiringPi库API大全1.硬件初始化函数2.通用GPIO控制函数3.时间控制函数4.串口通信串口API串口通信配置多串口通信配置串口自发自收测试串口间通信测…...

前端模块化CommonJs、ESM、AMD总结

前端开发模式进化史 前端工程化正是为了应对这些演化中出现的挑战和需求而发展起来的&#xff1a; 前后端混合&#xff1a;服务端渲染&#xff0c;javascript仅实现交互前后端分离&#xff1a;借助 ajax 实现前后端分离、单页应用(SPA)等新模式模块化开发&#xff1a;npm 管理…...

JavaWeb - 8 - 请求响应 分层解耦

请求响应 请求&#xff08;HttpServletRequest&#xff09;&#xff1a;获取请求数据 响应&#xff08;HttpServletResponse&#xff09;&#xff1a;设置响应数据 BS架构&#xff1a;Browser/Server&#xff0c;浏览器/服务器架构模式。客户端只需要浏览器&#xff0c;应用程…...

1G,2G,3G,4G,5G各代通信技术的关键技术,联系和区别

目录 1G2G3G4G5G各代通信技术的联系和区别联系区别 1G 1G的主要特点是无线移动化。关键技术为蜂窝组网&#xff0c;支持频率复用和移动切换&#xff0c;可以实现个人和个人移动状态下不间断的语音通信。 1G通信系统现已关闭&#xff0c;其主要缺点是串好和盗号。 2G 数字化…...

【宽搜】2. leetcode 102 二叉树的层序遍历

题目描述 题目链接&#xff1a;二叉树的层序遍历 根据上一篇文章的模板可以直接写代码&#xff0c;需要改变的就是将N叉树的child改为二叉树的left和right。 代码 class Solution { public:vector<vector<int>> levelOrder(TreeNode* root) {vector<vector&…...

Go语言实现长连接并发框架 - 请求分发器

文章目录 前言接口结构体接口实现项目地址最后 前言 你好&#xff0c;我是醉墨居士&#xff0c;我们上篇博客实现了任务管理器的功能&#xff0c;接下来这篇博客我们将要实现请求分发模块的开发 接口 trait/dispatcher.go type Dispatcher interface {Start()Dispatch(conn…...

Redis: 集群测试和集群原理

集群测试 1 ) SET/GET 命令 测试 set 和 get 因为其他命令也基本相似&#xff0c;我们在 101 节点上尝试连接 103 $ /usr/local/redis/bin/redis-cli -c -a 123456 -h 192.168.10.103 -p 6376我们在插入或读取一个 key的时候&#xff0c;会对这个key做一个hash运算&#xff0c…...

问题解决实录 | bash 中 tmux 颜色显示不全

点我进入博客 如下图&#xff0c;tmux 中颜色显示不全: echo $TERM输出的是 screen 但在 bash 里面输出的是 xterm-256 color 在 bash 里面输入&#xff1a; touch ~/.tmux.conf vim ~/.tmux.conf set -g default-terminal "xterm-256color"使之生效 source …...

古典舞在线交流平台:SpringBoot设计与实现详解

摘 要 随着互联网技术的发展&#xff0c;各类网站应运而生&#xff0c;网站具有新颖、展现全面的特点。因此&#xff0c;为了满足用户古典舞在线交流的需求&#xff0c;特开发了本古典舞在线交流平台。 本古典舞在线交流平台应用Java技术&#xff0c;MYSQL数据库存储数据&#…...

五子棋双人对战项目(6)——对战模块(解读代码)

目录 一、约定前后端交互接口的参数 1、房间准备就绪 &#xff08;1&#xff09;配置 websocket 连接路径 &#xff08;2&#xff09;构造 游戏就绪 的 响应对象 2、“落子” 的请求和响应 &#xff08;1&#xff09;“落子” 请求对象 &#xff08;2&#xff09;“落子…...

查缺补漏----I/O中断处理过程

中断优先级包括响应优先级和处理优先级&#xff0c;响应优先级由硬件线路或查询程序的查询顺序决定&#xff0c;不可动态改变。处理优先级可利用中断屏蔽技术动态调整&#xff0c;以实现多重中断。下面来看他们如何运用在中断处理过程中&#xff1a; 中断控制器位于CPU和外设之…...

Java API接口开发规范

文章目录 一、命名规范1.1 接口命名1.2 变量命名 二、接收参数规范2.1 请求体&#xff08;Body&#xff09;2.2 查询参数&#xff08;Query Parameters&#xff09; 三、参数检验四、接收方式规范五、异常类处理六、统一返回格式的定义七、API接口的幂等性&#xff08;Idempote…...

Go语言实现长连接并发框架 - 任务管理器

文章目录 前言接口结构体接口实现项目地址最后 前言 你好&#xff0c;我是醉墨居士&#xff0c;我们上篇博客实现了路由分组的功能&#xff0c;接下来这篇博客我们将要实现任务管理模块 接口 trait/task_mgr.go type TaskMgr interface {RouterGroupStart()StartWorker(tas…...

【大数据】深入解析分布式数据库:架构、技术与未来

目录 1. 分布式数据库的定义2. 架构类型2.1 主从架构2.2 同步与异步复制2.3 分片架构 3. 技术实现3.1 一致性模型3.2 CAP理论3.3 数据存储引擎 4. 应用场景5. 选择分布式数据库的因素5.1 数据一致性需求5.2 读写负载5.3 成本5.4 技术栈兼容性 6. 未来发展趋势总结 分布式数据库…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案

这个问题我看其他博主也写了&#xff0c;要么要会员、要么写的乱七八糟。这里我整理一下&#xff0c;把问题说清楚并且给出代码&#xff0c;拿去用就行&#xff0c;照着葫芦画瓢。 问题 在继承QWebEngineView后&#xff0c;重写mousePressEvent或event函数无法捕获鼠标按下事…...

在 Spring Boot 中使用 JSP

jsp&#xff1f; 好多年没用了。重新整一下 还费了点时间&#xff0c;记录一下。 项目结构&#xff1a; pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...

FTXUI::Dom 模块

DOM 模块定义了分层的 FTXUI::Element 树&#xff0c;可用于构建复杂的终端界面&#xff0c;支持响应终端尺寸变化。 namespace ftxui {...// 定义文档 定义布局盒子 Element document vbox({// 设置文本 设置加粗 设置文本颜色text("The window") | bold | color(…...