钉钉机器人发送折线图卡片 工具类代码

本文介绍了如何在钉钉开放平台上通过机器人功能创建并投放包含折线图和柱状图的卡片,涉及依赖配置、权限设置、参数示例和工具类调用,展示了如何使用Java代码实现卡片的发送操作。
摘要由CSDN通过智能技术生成
钉钉机器人 “创建并投放卡片 接口 ”   可以  发送折线图、柱状图

官方文档:创建并投放卡片 - 钉钉开放平台

0依赖、1模板、2机器人放到内部应用、3放开这个权限 、4工具类、5调用工具类 拼接入参

卡片模板 自己看文档创建,卡片模板的id 有用

0、依赖 
<dependency>
  <groupId>com.aliyun</groupId>
  <artifactId>dingtalk</artifactId>
  <version>2.0.87</version>
</dependency>

        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>alibaba-dingtalk-service-sdk</artifactId>
            <version>2.0.0</version>
        </dependency>
1、找到你的机器人,迁移到内部应用

2、放开这个权限    Card.Instance.Write

3、参数要求,重要 (这是发给个人的)

3.1 发给群的参数这样写 (看红框里的)

3.2其他参数

3.3 你的入参是这样的就对了
{
  "cardData":{
    "cardParamMap":{
        "count":"{\"data\":[{\"x\":\"N0\",\"type\":\"line\",\"y\":48},{\"x\":\"N1\",\"type\":\"line\",\"y\":74}],\"type\":\"histogram\",\"config\":{}}"
            }
  },
  "outTrackId":"test23",
  "cardTemplateId":"785b7cec-c8c5-4bba-99be-6da77befb022.schema",
  "openSpaceId":"dtv1.card//im_group.cid4cUEK93zmHMHb1ycvDESQQ==",

  "imRobotOpenDeliverModel":{
    "spaceType":"IM_ROBOT"
  },
  "imGroupOpenSpaceModel":{
    "supportForward":false
  },
  "imGroupOpenDeliverModel":{
    "robotCode":"ding0a8fitygi7torxla"
  }
}
4、柱状图效果

卡片模板 自己看文档创建,卡片模板的id 有用

5、工具类代码
import com.aliyun.dingtalkcard_1_0.models.CreateAndDeliverHeaders;
import com.aliyun.dingtalkcard_1_0.models.CreateAndDeliverRequest;
import com.aliyun.dingtalkcard_1_0.models.CreateAndDeliverResponse;
import com.aliyun.tea.TeaException;
import com.aliyun.teautil.models.RuntimeOptions;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.RandomStringUtils;

import java.util.Map;

/**
 * @author szl
 * @date 2024/2/29 0029 10:38
 */
@Slf4j
public class DingCardUtils {
    public static final String APP_KEY = "dinwergsdfrx";
    public static final String APP_SECRET = "G8Gasdfsdfasd";
    public static String cardTemplateId_personal = "3b8besadfsdf-85asdff1.schema";
    public static String cardTemplateId_principal = "96sadf9.schema";

    public static com.aliyun.dingtalkcard_1_0.Client createClient() throws Exception {
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config();
        config.protocol = "https";
        config.regionId = "central";
        return new com.aliyun.dingtalkcard_1_0.Client(config);
    }

    /**
     * 给某个人 创建并投放卡片
     */
    public static void sendDingcard(String receiveUserId, String outTrackId, Map<String, String> cardDataCardParamMap, String cardTemplateId, String Key) throws Exception {
        com.aliyun.dingtalkcard_1_0.Client client = createClient();
        CreateAndDeliverHeaders createAndDeliverHeaders = new CreateAndDeliverHeaders();
        String accessToken = DingUtils.setAccessToken();
        createAndDeliverHeaders.xAcsDingtalkAccessToken = accessToken;
        CreateAndDeliverRequest.CreateAndDeliverRequestCardData cardData = new CreateAndDeliverRequest.CreateAndDeliverRequestCardData()
                .setCardParamMap(cardDataCardParamMap);
        CreateAndDeliverRequest.CreateAndDeliverRequestImRobotOpenDeliverModel imRobotOpenDeliverModel = new CreateAndDeliverRequest.CreateAndDeliverRequestImRobotOpenDeliverModel()
                .setSpaceType("IM_ROBOT");//折线图卡片需要这个
        CreateAndDeliverRequest.CreateAndDeliverRequestImRobotOpenSpaceModel imRobotOpenSpaceModel = new CreateAndDeliverRequest.CreateAndDeliverRequestImRobotOpenSpaceModel()
                .setSupportForward(false);
        CreateAndDeliverRequest.CreateAndDeliverRequestImGroupOpenDeliverModel imGroupOpenDeliverModel = new CreateAndDeliverRequest.CreateAndDeliverRequestImGroupOpenDeliverModel()
                .setRobotCode(APP_KEY);

        CreateAndDeliverRequest createAndDeliverRequest = new CreateAndDeliverRequest()
                .setOutTrackId(outTrackId)
                .setCardTemplateId(cardTemplateId)
                .setOutTrackId(outTrackId)
                .setCardData(cardData)
                .setImRobotOpenSpaceModel(imRobotOpenSpaceModel)
                .setOpenSpaceId("dtv1.card//IM_ROBOT." + receiveUserId + ";")
                .setImGroupOpenDeliverModel(imGroupOpenDeliverModel)
                .setImRobotOpenDeliverModel(imRobotOpenDeliverModel)
                .setUserIdType(1);
        try {
            CreateAndDeliverResponse andDeliverWithOptions = client.createAndDeliverWithOptions(createAndDeliverRequest, createAndDeliverHeaders, new RuntimeOptions());
            log.info("卡片id为:" + andDeliverWithOptions);
        } catch (TeaException err) {
            err.printStackTrace();
        }
    }

    /**
     * 获取消息id
     *
     * @return
     */
    public static String getOutTrackId() {
        return System.currentTimeMillis() + RandomStringUtils.randomAlphanumeric(6);
    }

5.2 获取token 的代码  不再详细描述  APP_KEY,   APP_SECRET  自己的

/**
     * 初始化--权限Client
     *
     * @return Client
     * @throws Exception
     */
    public static com.aliyun.dingtalkoauth2_1_0.Client createAuthClient() throws Exception {
        Config config = new Config();
        config.protocol = "https";
        config.regionId = "central";
        return new com.aliyun.dingtalkoauth2_1_0.Client(config);
    }

    /**
     * 获取并设置最新accessToken,每两小时失效
     */
    public static String setAccessToken() throws Exception {
        com.aliyun.dingtalkoauth2_1_0.Client client = createAuthClient();
        GetAccessTokenRequest getAccessTokenRequest = new GetAccessTokenRequest()
                .setAppKey(APP_KEY)
                .setAppSecret(APP_SECRET);
        try {
            GetAccessTokenResponse accessToken = client.getAccessToken(getAccessTokenRequest);
            System.out.println("000----:" + accessToken);
            //设置access_token
            return accessToken.getBody().accessToken;
        } catch (TeaException err) {
            System.out.println(err.message);
            return null;
        } catch (Exception _err) {
            TeaException err = new TeaException(_err.getMessage(), _err);
            System.out.println(err.message);
            return null;
        }
    }

5.3、拼接数据,调用工具类 (入参看不懂的,评论区问)

/**
     * 拼接数据后发送
     *
     * @param aname a name
     * @param dnum  a number
     */
    public void sendDingcard(String campusName, String receiveUserId, String cardTemplateId,
                             String aname, String bname, String cname, String dname,
                             Integer anum, Integer bnum, Integer cnum, Integer dnum) {
        try {
            List<JSONObject> data = new ArrayList<>();
            JSONObject json1 = new JSONObject();
            json1.put("x", aname);
            json1.put("y", anum);
            json1.put("type", aname);
            data.add(json1);
            JSONObject json2 = new JSONObject();
            json2.put("x", bname);
            json2.put("y", bnum);
            json2.put("type", bname);
            data.add(json2);
            JSONObject json3 = new JSONObject();
            json3.put("x", cname);
            json3.put("y", cnum);
            json3.put("type", cname);
            data.add(json3);
            JSONObject json4 = new JSONObject();
            json4.put("x", dname);
            json4.put("y", dnum);
            json4.put("type", dname);
            data.add(json4);
            JSONObject count = new JSONObject();
            count.put("data", data);
            count.put("type", "histogram");
            count.put("config", new JSONObject());
            Map<String, String> cardCreateParam = new HashMap<>();
            cardCreateParam.put("campusName", campusName);
            cardCreateParam.put("yifenpei", anum.toString());
            cardCreateParam.put("weifenpei", bnum.toString());
            cardCreateParam.put("yigoutong", bnum.toString());
            cardCreateParam.put("weigoutong", cnum.toString());
            cardCreateParam.put("weizhuanhua", dnum.toString());
            cardCreateParam.put("chartData", count.toString());
            DingCardUtils.sendDingcard(receiveUserId, DingCardUtils.getOutTrackId(), cardCreateParam, cardTemplateId, null);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

看不懂的,评论区问

2024年3月1日14:02:18

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
发送图片到钉钉机器人,可以使用钉钉机器人的自定义机器人API接口。下面是一个发送图片的示例代码: ```python import requests url = 'https://oapi.dingtalk.com/robot/send?access_token=<your_access_token>' headers = { 'Content-Type': 'application/json;charset=utf-8' } data = { "msgtype": "image", "image": { "media_id": "<media_id>" } } response = requests.post(url, headers=headers, json=data) print(response.text) ``` 其中,`<your_access_token>` 是你的钉钉机器人的访问令牌,`<media_id>` 是你要发送的图片的media_id。可以使用钉钉提供的上传图片接口(https://oapi.dingtalk.com/media/upload?access_token=ACCESS_TOKEN&type=image)上传图片并获取media_id。 除了发送图片,还可以发送文本、链接、Markdown等不同类型的消息。下面是一个发送Markdown消息的示例代码: ```python import requests url = 'https://oapi.dingtalk.com/robot/send?access_token=<your_access_token>' headers = { 'Content-Type': 'application/json;charset=utf-8' } data = { "msgtype": "markdown", "markdown": { "title": "标题", "text": "## 标题二 \n\n **加粗文本** \n\n *斜体文本* \n\n [链接](http://www.baidu.com)" } } response = requests.post(url, headers=headers, json=data) print(response.text) ``` 其中,`title` 是消息标题,`text` 是Markdown格式的消息内容。 以上是发送图片和Markdown消息的示例代码,你可以根据自己的需求修改代码和消息类型。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值