最近要在项目中接入一个钉钉机器人,在其中遇到了各种的问题,经过自我不断的思考,思考,思考。。问题终于解决了。
背景:用的egg框架
这个是service
const CryptoJS = require("crypto-js/crypto-js"); //引入加密js
主要方法dingRemind
async dingRemind() {const time = new Date().getTime(); //获取时间戳const secret = "***"; //密钥const sign = time + "\n" + secret;const q = CryptoJS.HmacSHA256(sign, secret); // HmacSHA256计算签名const hashInBase64 = CryptoJS.enc.Base64.stringify(q); //base64加密const encodesign = encodeURI(hashInBase64); //解密const access_token = "***"; //机器人tokenconst data = {"msgtype": "markdown", //推荐markdown 内容编辑度高"markdown": {"title": "*","text":"*"},"at":{"isAtAll":true}};let result = await this.ctx.curl(`/robot/send?access_token=${access_token}×tamp=${time}&sign=${encodesign}`, {method: "POST",headers: {//自定义header"Accept": "*/*","Content-Type": "application/json;charset=utf-8"},data: data,dataType: 'json',});return result.data; }
可能会有朋友问 token 和secret怎么获得?
傻瓜式操作
点击钉钉头像-》机器人管理-》自定义
当然我这个是简易版的,各位可以在dingRemind方法里面接受几个参数,然后拼接在data常量里面的text内容,text里面是个字符串 可以在字符串里面写markdown语法 (这个自由度较高,会直接跳转浏览器打开链接 )比如:
接受二个参数 一个是name 一个是图片url
const data = {"msgtype": "markdown", "markdown": {"title": "展示","text":"### "+name+" \n> 马赛克马赛克 。 \n> ![]("+img_url+") \n> 1. [链接]() \n> 2. [链接]() \n>"},"at":{"isAtAll":true //@全体成员 默认false}};
可以在js中 请求接口(嘿嘿跨项目了 ,用postman展示一下)
这个不知道怎么配置egg路由的朋友可以看我上一篇博客 egg (一共没几篇文章,一看就知道是哪个了) 这个body是自己封装的,大家可以直接用钉钉自身返回的data
效果如下