当前位置: 首页 > 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就成功了:
在这里插入图片描述

效果:

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

相关文章:

  • Layui表单查询导出
  • IDEA激活失败--脚本分析
  • 实习结帖(flask加上AIGC实现设计符合OpenAPI要求的OpenAPI Schema,让AIGC运行时可以调用api,协助公司门后迁移新后端等)
  • 以太网交换安全:MAC地址表安全
  • 51单片机学习第六课---B站UP主江协科技
  • 读数据湖仓04数据架构与数据工程
  • SkyWalking 自定义链路追踪
  • 【ShuQiHere】从机器语言到汇编语言:深入理解 LC-3 编程 ️
  • 矩阵学习过程中的一些思考
  • 万界星空科技铜拉丝行业MES系统,实现智能化转型
  • 7天的Django实战学习计划
  • ECharts 快速使用
  • mybatisplus的查询,分页查询,自定义多表查询,修改的几种写法
  • class 030 异或运算的骚操作
  • 汽车总线之---- LIN总线
  • 【笔记】你不知道的JS读书笔记——Promise
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • 03Go 类型总结
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • create-react-app项目添加less配置
  • css选择器
  • JS变量作用域
  • mysql 5.6 原生Online DDL解析
  • Solarized Scheme
  • Spring Boot MyBatis配置多种数据库
  • SwizzleMethod 黑魔法
  • Terraform入门 - 1. 安装Terraform
  • 百度小程序遇到的问题
  • 简单易用的leetcode开发测试工具(npm)
  • 来,膜拜下android roadmap,强大的执行力
  • 如何优雅地使用 Sublime Text
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 运行时添加log4j2的appender
  • 06-01 点餐小程序前台界面搭建
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • ​​​​​​​STM32通过SPI硬件读写W25Q64
  • ​TypeScript都不会用,也敢说会前端?
  • ​ubuntu下安装kvm虚拟机
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • (CPU/GPU)粒子继承贴图颜色发射
  • (Note)C++中的继承方式
  • (PySpark)RDD实验实战——取一个数组的中间值
  • (SERIES12)DM性能优化
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (每日一问)设计模式:设计模式的原则与分类——如何提升代码质量?
  • (顺序)容器的好伴侣 --- 容器适配器
  • (一)Thymeleaf用法——Thymeleaf简介
  • (自适应手机端)响应式服装服饰外贸企业网站模板
  • .gitattributes 文件
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .mysql secret在哪_MySQL如何使用索引