项目使用场景描述

PC网站内填好的数据发送至钉钉群,以钉钉机器人卡片形式发送
样例如图:

开发思路

首先我使用的是vue前端和egg.js后端(基于node.js)
开发思路流程:

  1. 网页内填写数据(表单或者其他都可以)
  2. 将数据整理到一个data里
  3. 将钉钉API相关信息与data一起通过钉钉API接口传过去
  4. 实现功能,钉钉机器人会发送消息

钉钉API简述

要将数据传到钉钉里有一个重要的参数就是access_token
这个参数的获取方法如下:
1. 首先需要有钉钉企业的开发者权限,如果没有需要跟自己企业的钉钉管理员进行申请,没有这个,后续的功能寸步难行。但是可以自己在钉钉建立一个企业组织就权限了,至少测试功能什么的够用了
2. 登录钉钉的开发者后台 钉钉开发者后台 ,登陆后选择有开发者权限的企业,进入页面后在右上角会看到 CorpId 和 API Token ,有权限的是直接可以看到的,没权限的看到的是 ******
无权限如下图

有权限的如下图:

3. 获取appkey和 appsecret
在企业内部开发-钉钉应用里找到应用的appkey和 appsecret,没有应用的话建立一个

4. 通过 appkey和 appsecret 获取 access_token
进入钉钉开发文档,找到获取企业内部应用的access_token的方法介绍,里面有HTTP请求和JAVA SDK的两种方法,其他后端语言在API调试工具里面有方法,我用的是HTTP的方法
将 appkey和 appsecret 两个参数通过GET请求发送过去,会得到一个含有access_token的json

GET https://oapi.dingtalk.com/gettoken?appkey=appkey&appsecret=appsecret

因为某种不知名的原因,我实在后端进行请求的,不过我在后端是发送的HTTP请求
代码如下:

const appkey = '';
const appsecret = '';
const requestPromise = require("request-promise");// 获取钉钉access_token
const getAccessToken = async (corpid, corpsecret) => {const result = await requestPromise({ uri: 'https://oapi.dingtalk.com/gettoken', qs: { appkey, appsecret } });
};console.log(result);


后续涉及到钉钉的API基本都需要access_token作为参数传过去
如果使用后端进行调用access_token的话,可以使用钉钉的API在线调试工具
如果是用后端调用需要先下载安装后端对应的钉钉SDK
基本上常用的后端语言都有对应的SDK包

钉钉机器人消息发送

首先,要在企业内有一个钉钉机器人,在这里设置钉钉开放平台-企业内部应用
右侧有机器人选项,设置好之后能够看到钉钉机器人的AppKey 这个是一会要用到的

之后需要有钉钉群的群会话openConversationId,相当于群的唯一ID,通过钉钉API文档 - 中的方法获取openConversationId

还需要有一个钉钉机器人的卡片消息模板(因为我用的是卡片消息)进入到卡面模板页面 创建一个卡片,拿到卡片模板的ID
准备工作做完了,下面就可以发消息了
首先先看下钉钉机器人发消息的API文档
同样有HTTP请求和后端语言的请求方法
我还是在后端用的HTTP请求,后端语言的需要自行下载SDK,并根据API调试工具生成的代码自行调整

async sendCard() {const { ctx } = this;const { Data, out_track_id, robot_code, card_template_id, open_conversation_id } = ctx.request.body; // 接收前端传来的数据let access_token = eval("(" + await getAccessToken() + ")").access_token  // 通过刚才的getAccessToken()获取access_token  // 需要将所有的参数一起打包发出去let sendval = {cardData: JSON.stringify(Data), // 前面说过的,整理好的发送的信息,别忘了用JSON.stringify()转换下格式cardBizId: out_track_id,  //  卡片的唯一ID,这个自己编写就行,就是发出来的卡片,后续可以通过这个ID对卡片进行更新等操作cardTemplateId: card_template_id,  //  卡片模板的IDrobotCode: robot_code,  //  机器人的AppKeyopenConversationId: open_conversation_id, // 群会话openConversationId}try {//  将数据通过POST请求发出去,注意access_token要在headers里面const result = await requestPromise({uri: 'https://api.dingtalk.com/v1.0/im/v1.0/robot/interactiveCards/send',method: "POST",json: true,headers: {"x-acs-dingtalk-access-token": access_token,"content-type": "application/json",},body: sendval,});// console.log(result, 'processQueryKey:');ctx.body = { errCode: 0, result };} catch (error) {console.log(error);}}

全部完整代码

'use strict';const Controller = require('egg').Controller;const appkey = '';
const appsecret = '';
const requestPromise = require("request-promise");// 获取钉钉access_token
const getAccessToken = async (corpid, corpsecret) => {const result = await requestPromise({ uri: 'https://oapi.dingtalk.com/gettoken', qs: { appkey, appsecret } });// console.log(result);return result
};class DingtalkController extends Controller {async accessToken() {const { ctx } = this;const { Data, out_track_id, robot_code, card_template_id, open_conversation_id } = ctx.request.body;let access_token = eval("(" + await getAccessToken() + ")").access_tokenlet sendval = {cardData: JSON.stringify(Data),cardBizId: out_track_id,cardTemplateId: card_template_id,robotCode: robot_code,openConversationId: open_conversation_id,}try {const result = await requestPromise({uri: 'https://api.dingtalk.com/v1.0/im/v1.0/robot/interactiveCards/send',method: "POST",json: true,headers: {"x-acs-dingtalk-access-token": access_token,"content-type": "application/json",},body: sendval,});// console.log(result, 'processQueryKey:');ctx.body = { errCode: 0, result };} catch (error) {console.log(error);}}}module.exports = DingtalkController;

钉钉开发常用网址

  1. 钉钉开发者后台 https://open-dev.dingtalk.com/#/
  2. 钉钉API在线调试工具 https://open-dev.dingtalk.com/apiExplorer#/
  3. 钉钉API开发文档 https://open.dingtalk.com/document/orgapp-server/how-to-call-apis
  4. 钉钉开放平台-企业内部应用https://open-dev.dingtalk.com/fe/app#/corp/app

网站项目通过钉钉机器人向钉钉群发送信息相关推荐

  1. 钉钉自定义机器人python_使用钉钉自定义机器人发送舔狗日记[70行][python]

    [Python] 纯文本查看 复制代码# -*- coding: utf-8 -*- import requests import json import time #下面是解密用到的模块 impor ...

  2. 企业钉钉群发送信息轮子

    tingtalk-for-laravel 是一个简单发送企业钉钉群助手的轮子 Installation $ composer require tiway/tingtalk-robot 在config/ ...

  3. 钉钉小程序生态5—钉钉群机器人消息通知和钉钉工作通知

    文章导航 钉钉小程序生态1-区分企业内部应用.第三方企业应用.第三方个人应用 钉钉小程序生态2-区分小程序和H5微应用 钉钉小程序生态3-钉钉扫码登录PC端网站 钉钉小程序生态4-钉钉小程序三方企业应 ...

  4. 钉钉机器人关键词应答_Gmail 邮件推送到钉钉群机器人(详细)教程|国内接收 Gmail 邮件...

    做这个功能费了我老大劲了,首先想到的还是利用现成的软件,尝试了一圈发现都不满意.然后不想重复造轮子,就搜索如何把 Gmail 推送到钉钉,结果只搜到了诸如 Python 如何调用 Gmail API. ...

  5. Java实现钉钉自定义机器人接入

    Java实现钉钉自定义机器人接入 1. 钉钉自定义机器人接入概述 1.1 钉钉机器人简介 1.2 自定义机器人接入 2. 钉钉自定义机器人接入实现 2.1 场景介绍 2.2 调用频率限制 2.3 创建 ...

  6. 钉钉机器人(1)创建钉钉群机器人推送消息

    创建钉钉群机器人发送消息 钉钉群机器人是一个高级扩展功能,只要有一个钉钉账号,就可以使用它.它可以将第三方信息聚合到钉钉群中,实现信息自动同步.支持Webhook协议的自定义接入,通过发明者量化机器人 ...

  7. Java项目中利用钉钉机器人Webhook向钉钉群推送告警通知

    今天来讲一下 Java项目中利用钉钉机器人Webhook向钉钉群推送告警通知 一.配置钉钉群 1.新建一个接收通知的钉钉群 如下图,创建一个接收通知的钉钉群 选择项目群,点创建 输入群名称,右侧选择群 ...

  8. 超火的钉钉自定义机器人原来是这么设置的

    企业内部有较多系统支撑着公司的核心业务流程,譬如CRM系统.交易系统.监控报警系统等等.通过钉钉的自定义机器人,可以将这些系统事件同步到钉钉的聊天群 接入自定义机器人很简单,大概以下几步 点击群设置选 ...

  9. Python 3 开发钉钉群机器人

    转载自「刘悦的技术博客」 链接: v3u.cn/a_id_132 最近疫情比较严重,很多公司依靠阿里旗下的办公软件钉钉来进行远程办公,当然了,钉钉这个产品真的是让人一言难尽,要多难用有多难用,真的让人 ...

最新文章

  1. javaScript常用知识点有哪些
  2. 【转】做正确的事情,等着被开除(Do the right thing, Wait to get fired)
  3. GARFIELD@09-28-2004
  4. OS / Linux / 制作 deb 包
  5. 华为怎么删除自带的音乐_原来华为手机相册隐藏剪辑功能!按下这个开关,还能制作音乐相册...
  6. Wireshark笔记-ping,arp相关的实验(2台主机是否能通)
  7. html绘制流程图飞线,基于jsplumb绘制流程图
  8. ReadOnly与Enabled
  9. 如何查看 Windows10 版本号
  10. 【Linux】15 张 Vim 速查表奉上,帮你提高 N 倍效率!
  11. java内存堆栈的区别
  12. Unity调用打印机打印图片
  13. .NET Framework 4 安装未成功 一般信任关系失败
  14. Circulation这篇文章帮你了解心脏最火的线粒体研究
  15. c语言-结构体实例笔记
  16. Matlab数值分析编程:牛顿下山法解方程
  17. 基于身高与体重数据集与Auto数据集分别进行线性回归和Lasso回归(代码逐行讲解,超细节)
  18. 咖啡豆是怎么生产出来的
  19. vanish(squid) + HAProxy + nginx + memcached(redis)
  20. mysql单表1000万条_mysql单表千万条数据测试

热门文章

  1. 反脆弱 : 如何在复杂世界越变越强
  2. # bzoj2215: [Poi2011]Conspiracy 2-sat
  3. 依靠大数据 社会化协同
  4. react纯函数组件useState更新页面不刷新
  5. 【小程序从0到1】网络数据请求——request合法域名|GET|POST|跨域?Ajax?
  6. 【区块链 | 智能合约】Ethereum源代码(1)- 下载、编译、启动go-ethereum
  7. [4G5G专题-33]:物理层-浅谈ZC序列的原理以及在LTE PSS中的应用
  8. PAT 乙级 1035  插入与归并
  9. 关于WPF(二)XAML
  10. php_uname()函数