这个错误是笼统的
千万不要被这个错误提示 引入歧路。最近调用 发送钉钉工作台消息的时候报错,agentId 不合法。于是我换了好几个 应用,重新配置调用,中间有一段时间是可以的。第二天一早发现又不行啦。我这里呢,是多家公司的发送钉钉工作台消息功能。当时还是很着急的。怎么办呢,提个工单给到 钉钉客户,但是没啥卵用呀,等了许久也没有啥结果。
第一反应
看到这个报错,我的第一反应就是 查一下 应用情况。看一下应用是否出现以下情况:
- 应用被停用
- 应用被删除
- 应用参数 agentId、appKey、 appSecret 是否配置错误
当上述问题都不存在的情况下,仍然报错: agentId 不合法 的时候,就需要自己动动脑筋啦。
自排查之路
还是要靠自己的呀,官方既然有手册和文档,那么其他的可能做的就不咋地了吧。
发送钉钉工作台消息需要几个步骤:
- 使用 应用的key、secret 获取一个 accessToken
- 根据 accessToken 可以调用接口去获取用户的手机号对应的 userId
- 根据 userId 、accessToken 调用具体的发送消息接口
根据步骤呢,就可以排除一下自己的应用应该是在哪一步错误,导致的问题了。
1. 排查accessToken
由于 accessToken 有一定的时效性。所以一般情况下,都是将 accessToken 缓存一定的时间,而不是每次都去使用 钉钉的api 去请求获取 accessToken。 这里可以看一下 accessToken 的缓存key等是否有问题。如果使用了 A 公司的 accessToken 、B 公司的 应用 agentId 去调用接口的话,那么是会报错,agentId 不合法的。
2. 排查 userId
同上, userId 一般情况下是固定的,所以会缓存起来或者存储起来。如果 之前有存储过 userId,后期这个 用户变更了 公司,那么你存储的 userId 没有及时更新的话,也会报错,agentId 不合法。
3. 猜测
根据实践过程,有一个小猜测,当 agentId 不合法 的情况在一段时间内出现次数达到一个限制之后,这个应用就会被限制一段时间不能使用。至于这个解封时间的话,需要咨询官方啦。
解封后,agentId 不合法 的情况没有解决的话,那么又会循环往复的封禁、解封。至于应用会不会因为封禁次数过多,而强制停止这个我就不清楚啦。
这里呢,还要提醒一下大家:
钉钉开发文档是会更新的哦,接口的返回值并不是一成不变的。现在根据 部门获取用户信息的时候,便获取不到 用户的 手机号码了。所以如果你想一次性初始化公司所有用户信息的时候便会有点问题了,拿不到手机号,那么手机号和 userId 的对应关系便不能像以前那样,粗暴的一次性创建啦。
可以使用 根据手机号获取 userId 的接口,来建立起手机号和userId 的对应关系王国。或者可以通过其他的key来去多层映射。