1.移动端安卓系统打开链接正常,苹果系统打开链接调用接口失败

说明:需要获得点击该链接的用户信息,因此需要使用钉钉跳转协议在钉钉当前页面打开,通过免登码的方式来获取用户信息,直接使用http协议跳转浏览器的方式无法拿到免登码,因此需要对http://standard-action-robot-dt-daily.ingress.dayu.work/call?method=POST&api=/robot/stopIteration&params={“projectId”:“69”,“iterationId”:“128”,“conversationId”:“cidhipuXrhPi1Ud8CHlt05V4Q==”,“actionItemIds”:"",“flag”:“Y”}
进行包装 -->

免登”是指用户进入应用后,无需输入钉钉用户名和密码,应用程序可自动获取当前用户身份,进而登录系统的流程。

地址一:dingtalk://dingtalkclient/page/link?dd_mode=push&pc_slide=true&url=http://standard-action-robot-dt-daily.ingress.dayu.work/call?method=POST&api=/robot/stopIteration&params={“projectId”:“69”,“iterationId”:“128”,“conversationId”:“cidhipuXrhPi1Ud8CHlt05V4Q==”,“actionItemIds”:"",“flag”:“Y”}

这里对dingtalk://dingtalkclient/page/link?dd_mode=push&pc_slide=true&url=做一下参数说明:
跳转到H5页面
link(侧边栏/容器划出)

参数 说明
url 页面URL,必须做urlencode。(对url进行转义)
dd_mode iOS端使用。
push:iOS从左向右推入一个容器
present:iOS从下向上弹出一个容器
pc_slide pc_slide=true 时,PC 端会在应用内打开这个 URL。

钉钉发送的消息链接地址如果直接发送_地址一,是无法正常工作的.当你使用了钉钉统一跳转协议,http://standard-action-robot-dt-daily.ingress.dayu.work/call?method=POST&api=/robot/stopIteration&params={“projectId”:“69”,“iterationId”:“128”,“conversationId”:“cidhipuXrhPi1Ud8CHlt05V4Q==”,“actionItemIds”:"",“flag”:“Y”}这一部分将作为“钉钉统一跳转协议”地址的入参,所以需要经过urlEncode
于是我们对http地址进行转义后得到:
http%3A%2F%2Fstandard-action-robot-dt-daily.ingress.dayu.work%2Fcall%3Fmethod%3DPOST%26api%3D%2Frobot%2FstopIteration%26params%3D%7B%22projectId%22%3A%2269%22%2C%22iterationId%22%3A%22128%22%2C%22conversationId%22%3A%22cidhipuXrhPi1Ud8CHlt05V4Q%3D%3D%22%2C%22actionItemIds%22%3A%22%22%2C%22flag%22%3A%22Y%22%7D
这个时候完整的地址链接是:dingtalk://dingtalkclient/page/link?dd_mode=push&pc_slide=true&url=http%3A%2F%2Fstandard-action-robot-dt-daily.ingress.dayu.work%2Fcall%3Fmethod%3DPOST%26api%3D%2Frobot%2FstopIteration%26params%3D%7B%22projectId%22%3A%2269%22%2C%22iterationId%22%3A%22128%22%2C%22conversationId%22%3A%22cidhipuXrhPi1Ud8CHlt05V4Q%3D%3D%22%2C%22actionItemIds%22%3A%22%22%2C%22flag%22%3A%22Y%22%7D(
地址二)
这个时候我们惊奇地发现PC端点击链接一切正常,移动端安卓系统也正常,但是移动端苹果系统报错了,排查发现,params={“projectId”:“69”,“iterationId”:“128”,“conversationId”:“cidhipuXrhPi1Ud8CHlt05V4Q==”,“actionItemIds”:"",“flag”:“Y”}
的参数是空的,也就是说params的参数丢失了,后端接口肯定就报错了.

解决方案:由于不同系统自带的浏览器内核不同,因此需要先对{“projectId”:“69”,“iterationId”:“128”,“conversationId”:“cidhipuXrhPi1Ud8CHlt05V4Q==”,“actionItemIds”:"",“flag”:“Y”}进行转义,然后再对整个http链接进行转义.
最终地址为_:dingtalk://dingtalkclient/page/link?dd_mode=push&pc_slide=true&url=http%3A%2F%2Fstandard-action-robot-dt-daily.ingress.dayu.work%2Fcall%3Fmethod%3DPOST%26api%3D%2Frobot%2FstopIteration%26params%3D%257B%2522projectId%2522%253A%252269%2522%252C%2522iterationId%2522%253A%2522128%2522%252C%2522conversationId%2522%253A%2522cidhipuXrhPi1Ud8CHlt05V4Q%253D%253D%2522%252C%2522actionItemIds%2522%253A%2522%2522%252C%2522flag%2522%253A%2522Y%2522%257D

2.JSAPI鉴权失败相关问题

对于一些钉钉业务、安全相关的JSAPI的调用,需要先鉴权,然后再调用.
比如在获取免登码时需要进行JSAPI鉴权,这个时候需要后端生成签名发给钉钉,然后前端根据签名生成规则去生成签名并和后端发给钉钉的签名进行比对.
项目上遇到了前后端生成的签名值不一致的问题.
**签名值生成参数: public static **String sign(String jsticket, String nonceStr, **long **timeStamp, String url);
jsticket -->根据钉钉开放平台开发者后台微应用的应用凭证AppKey和AppSecret去生成.
noceStr -->随机字符串
timeStamp -->时间戳
url --> 调用的链接地址
排查发现签名值不一致的原因是服务器的jsticket为null.
报错如下:

ERROR topsdk - 2021-02-25 15:56:42.113^_^_dingtalk_^_^dingtalk.oapi.get_jsapi_ticket^_^192.168.56.1^_^Windows 10^_^304^_^https://oapi.dingtalk.com/get_jsapi_ticket^_^access_token=5ce212b978ac305aa5478fc608b80369^_^{"errcode":60020,"errmsg":"请参考FAQ:https://open-doc.dingtalk.com/microapp/faquestions/cvbtph。错误原因:访问ip不在白名单之中,request ip=120.198.22.22 appKey\u0028dinggzw3c804duwtgvot\u0029"}

解决方案:把120.198.22.22添加到服务器出口IP中即可.如果本地开发测试时ip会变则要特别留意这个错误

3.使用机器人发送消息,提示没有权限

这里很坑,用户主动@机器人时是在机器人这里接收消息的.

也就是说机器人是被动地接收消息.H5微应用才可以配置权限主动地发消息.

解决方案:用户艾特机器人发送的消息在机器人中配置接收地址,需要群里定时发消息时使用H5微应用并配置权限.

4.idea本地项目运行成功,maven编译打包失败了

报错如下:

Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.1.4.RELEASE:repackage (repackage) on project standard-action-robot-infrastructure: Execution repackage of goal org.springframework.boot:spring-boot-maven-plugin:2.1.4.RELEASE:repackage failed: Unable to find a single main class from the following candidates [com.iwhalecloud.commons.util.TaskUtils, com.iwhalecloud.robot.utils.HttpClientUtil] -> [Help 1]

解决方案:maven打包的插件代码应该放在启动类的pom.xml文件下,不能放在其他地方

  <build><finalName>app</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><includeSystemScope>true</includeSystemScope></configuration></plugin></plugins></build>
//这段代码应该放在启动类下

5.钉钉发送markdown格式的消息无法换行和对字体加粗

数据库里保存的markdown的title字符串为:

@atInfo@按照标准动作要求,请完成模型的设计工作,并点击更新下面的状态 [1.已完成](dingtalk://dingtalkclient/page/link?dd_mode=push&pc_slide=true&url=#trueUrl#) &nbsp;&nbsp;   [2.未完成](dingtalk://dingtalkclient/page/link?dd_mode=push&pc_slide=true&url=#falseUrl#)

效果如下:
@atInfo@按照标准动作要求,请完成模型的设计工作,并点击更新下面的状态 1.已完成 2.未完成

这个格式太丑了,需要对该消息进行换行,并对字体进行加粗.
但是直接在字符串中加上\n,\n,甚至是百度网上说的亲测可用的\n\n也还是不行,换行符直接被转义了没有起到效果.
解决方案1:在\n前面加上两个空格在postman调用发送消息可以换行成功.

解决方案2:字符串消息手动换行好

<font color=#ffffff  style="font-weight: bold;background-color:#0099ff" >@atInfo@</font>&nbsp;
<font color=#000000 style="font-weight: bold;" >按照标准动作要求,请完成接口API的设计工作,并点击更新下面的状态</font> &nbsp;
&nbsp;  [<font color=#0099ff style="font-weight: bold;" >1.已完成</font>](dingtalk://dingtalkclient/page/link?dd_mode=push&pc_slide=true&url=#trueUrl#) &nbsp;
&nbsp;    [<font color=#0099ff style="font-weight: bold;" >2.未完成</font>](dingtalk://dingtalkclient/page/link?dd_mode=push&pc_slide=true&url=#falseUrl#)

数据库里面存这个换行符,手动赋值出来就没了.只能代码读出来才正常.
效果如下

钉钉机器人项目踩过的坑相关推荐

  1. 学习前端项目踩过的坑——记录下来

    一些必要的步骤进行前端项目的学习 新建项目 npm -y init npm i nrm -D ( 如果出现nrm包下载不下来的问题需要修改npm的远程仓库地址: //设置淘宝源 npm config ...

  2. 记录上一个项目踩过的坑

    1.objecthtmldivelement对象 var avc = document.getElementById("div1"); alert(avc ); 为objectht ...

  3. python自动化高效办公第二期,带你项目实战【二】{数据可视化、发送邮件(定时任务监控)、python聊天机器人(基于微信、钉钉)}

    相关文章和数据源: python自动化高效办公第二期,带你项目实战[一]{excel数据处理.批量化生成word模板.pdf和ppt等自动化操作} Python自动化办公--Pandas玩转Excel ...

  4. 【浙政钉】微信-专有钉钉小程序-开发踩坑实记

    文章目录 ⭐[浙政钉]微信-专有钉钉小程序-开发踩坑实记 ⭐ 创建项目 ⭐ 转化方案 ⭐ 政务钉钉调试 ⭐ 上传发布 ⭐[浙政钉]微信-专有钉钉小程序-开发踩坑实记 最近有个需求,要将微信小程序转为浙 ...

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

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

  6. 网站项目通过钉钉机器人向钉钉群发送信息

    项目使用场景描述 PC网站内填好的数据发送至钉钉群,以钉钉机器人卡片形式发送 样例如图: 开发思路 首先我使用的是vue前端和egg.js后端(基于node.js) 开发思路流程: 网页内填写数据(表 ...

  7. Jenkins:如何给coding的项目绑定钉钉机器人

    写在前面的话: 之前想弄这个功能来着,但是不巧,钉钉的Webhook正好在维护,就搁置了.于是每次合并代码之类的,我都会对着老大喊一嗓子,同意一下呗.今天喊了一嗓子后,老大说:你快弄下那个机器人提醒吧 ...

  8. 钉钉机器人怎么设置自动回复_项目部署成功后触发钉钉机器人发送消息提醒——入门配置...

    钉钉建好一个群 打开群设置, 找到群机器人 添加一个你想要的机器人 可以使用自定义 自定义机器人可以自定义头像,名字,生成一个webhook(https post的请求地址) 到这里, 钉钉机器人设置 ...

  9. 钉钉E应用开发踩过的小坑之钉钉官网有两个全局错误码链接,啥区别??

    童鞋们注意下: 做钉钉平台内部开发的有没有注意到官网有两个全局错误码链接(我只看到两个目前): https://open-doc.dingtalk.com/microapp/serverapi2/np ...

最新文章

  1. 关于iOS的社会化分享方案总结
  2. 一加3t刷机后还卡_OPPO A5?A7?A57?刷机注意:这几款手机千万别混淆!
  3. 开发人员如何有效的进行数据库设计
  4. SharePoint中CAML使用的一些总结
  5. java实现团购功能_[Java教程]jquery组件团购倒计时功能
  6. python数据结构-链表
  7. 【FlexSim2019】自学笔记:交通工具路径设置 | NetworkNode | 操作员固定路径 | 叉车固定路径
  8. linux 添加定时器,linux 添加定时任务
  9. [转载] java中final,finally,finalize三者的作用和区别
  10. CString.Format详解【摘录】
  11. 话单分析账单分析行踪分析三合一数据分析,即可话单、账单、行踪、涉税数据独立分析,也可混合分析。
  12. MATLAB GBK编码
  13. 添加蒙版及原页面不滚动
  14. BEVFusion: A Simple and Robust LiDAR-CameraFusion Framework 细读
  15. 如何学习linux系统
  16. 出来找工作,去创业公司好吗?
  17. 【原创】Exchange 用户发送邮件提示:您无权执行此操作,解决办法
  18. Python写停车场收费系统
  19. 关于分类数据编码所需了解的所有信息(使用Python代码)
  20. 炫技:拼接列表、破碎二维数组——Python sum()函数隐藏技能花式玩法

热门文章

  1. WeWork入华 盈利奇迹能否复制
  2. 基于Matlab的BiLSTM实现
  3. java防止电脑锁屏的网页_关于windows防止锁屏小程序
  4. php网页有图片加载慢,网页加载加速 之 图片延迟加载
  5. 前端上传文件或者上传文件夹
  6. linux 实现监听热插拔事件
  7. 分享一个可以下载网页上视频软件(IDM 6.33.2)下载器
  8. 【二叉树】二叉树的堂兄弟节点
  9. 二叉树的堂兄弟节点993
  10. warning #179-D:variable XXX was declared but never referenced