第三方应用在通话过程中调用setspeakerphoneon没有用_企业应用对接企业微信脱坑指南...

397fc4ca5267c84ecfd15186edf21985.png

我们在开发企业应用的过程中,发现越来越多的用户开始使用企业微信,并且在用了之后,好多人表示:真香!于是诸多用户表示:

“你们的应用能不能对接上企业微信啊?让我们可以直接在企业微信中打开轻流。”

“能够把企业微信的通讯录同步到轻流吗?这样就不需要在轻流里邀请人了!”

“我们公司所有的上班考勤记录都在企业微信里,这个数据能够直接导入到轻流吗?”

“公司用的是腾讯企业邮箱,这个邮箱组织可以同步到轻流吗?”

“......”(此处省略上万字)

558a6aec7562c40bc9aab879f377b22f.png

于是轻流的小伙伴决定,让轻流对接上企业微信,使之成为企业微信里一个应用!

当然,这不是一个事无巨细的企业微信对接指南(想看详细对接步骤的,请移步企业微信的开发文档)。

一、分清楚三个Token

在进行对接开发,调用企业微信API时,我们会遇到三种Token,分别是:

  • providerToken,服务商的Token:用于调用服务商级别的接口,比如扫码登录;
  • suiteToken,应用的Token:这里的应用指的是我们自己开发的应用,比如轻流,用来获取预授权码,获取授权企业的企业信息;
  • corpToken,授权企业的Token:当客户授权我们的应用访问他的企业信息时,我们使用这个Token去调用企业微信的API,比如通讯录管理。

每个Token的作用都是不一样的!所以:

ecd824aa0e611aad0ce8e1597ad7c57e.png

在调用的时候一定要分清楚!

在调用的时候一定要分清楚!

在调用的时候一定要分清楚!

二、主动同步通讯录时需要注意增量同步

把企业微信的通讯录同步到企业应用里,可以采用两种方式:主动调用企业微信的API同步通讯录,接收来自企业微信的通讯录变更事件更新通讯录。

主动同步发生在什么时候呢?我们认为有两种情况:

  1. 应用收到了新的授权事件,那么应用接下来需要主动同步通讯录;
  2. 由于网络或者其它原因,通讯录变更事件应用没有收到或者处理事件发送了错误,那么为了保证应用通讯录的正常使用,需要主动同步通讯录。

主动同步通讯录的时候,需要把获取到新的通讯录结构与应用里已有的通讯录结构进行对比,删除掉在企业微信已经被删除的用户,增加企业微信里新增的用户, 如果用户的信息有更新,那么还要更新用户的信息(比如昵称和头像)。在进行对比的时候,可以把用户的UserID和部门的DeptID作为Key,然后找到新增、删除和更新的部分。

把主动同步做好之后,基本上只要用户发起主动同步操作,那么应用就会构建最新的通讯录啦!

但是,如果仅仅只做了这个,你会发现用户某天会突然和你说:

“为什么我组织里一个成员,登录系统之后,发现和他相关的数据都不见?!”

对,这就是企业微信里的一个设定:企业微信用户的UserID是可以变化的!

3fd17ea658d15d6a7926d7e96f66fb93.png

如果用户的UserID变化了,那么我们自己开发的应用就会把他识别成另外一个人,然后重新为他创建一个应用里的账号,并与这个企业微信用户关联起来。然后,这个企业微信用户登录应用的时候,就会感觉换了天地(啥都没了,惊不惊喜,意不意外?)

6eb01b553347ead7e558b403d42ace51.png

那么该怎么解决这个问题?请看第三节——处理来自企业微信的通讯录变更事件。

三、处理来自企业微信的通讯变更事件

在企业微信组织的管理员更改企业微信的通讯录的时候,企业微信的服务器会向第三方应用注册的回调地址里发送http请求,反馈通讯录的变更。

也就是说,如果我们把这些变更事件都处理好了,理论来说应用不需要主动同步通讯录就可以保持通讯录和企业微信的通讯录一致

e272afb4fba193135cd1ec3b43df317f.png

通讯录变更事件大致分为三类:

  • 成员变更事件:成员的添加、删除和更新;
  • 部门变更事件:部门的添加、删除和更新;
  • 标签变更事件:标签更新(授权应用访问的标签不能删除也不能添加),标签的更新包括了标签里的成员的新增和删除、部门的新增和删除。

上一节说到了UserID的变更,就可以在成员的更新事件中接收到,在对应的Handler中处理好,就不会出现问题了。

然后,我们把所有事件的Handler全部写好了,部署到测试环境开始测试。

Step1:在企业微信通讯录中添加了一个用户,在添加的时候指明了该用户的部门和角色。

Step2:观察来自企业微信的通讯录更新事件...

然后我们发现企业微信居然给我们发送了三个事件!一个用户添加事件,一个部门更新事件,一个角色更新事件,并且这三个事件每次到达的顺序是不一样的(乱序发射)

9cb2d9fda1c308b401aee5ed449e0bee.png

所以,如果你要写各个事件的Handler,请多做实验,观察各种花式操作下,企业微信会给你发送什么事件。

由以上实验结果可知,每个事件的处理,都需要认真考虑。比如接收到了部门更新事件,需要去检查部门的成员,如果有新的成员,需要把这个成员添加到应用通讯录;接收到了用户添加事件,需要检查这个用户是不是已经在应用通讯中。

四、注意客户的授权范围

在踩完以上的坑以后,开发者还需要注意企业微信授权给应用的可见的范围。

理论上来说,用户可以通过三种方式被同步进应用的通讯录:

  • 用户直接在应用的授权范围内;
  • 用户在应用授权范围里的部门中;
  • 用户在应用授权范围里的标签中或者标签里的部门中(没错,企业微信的标签可以放入部门)。

所以,当你的客户问你:“为什么我们的组织的成员在你的应用里看不到”,这个时候你一定要和他确认一下他的成员是否在授权范围中。

因为标签里可以包含部门和成员,那么一个成员可以不是通过标签同步进来,可以是通过标签同步进来,也可以是同时通过两种方式同步进来。

那么这么时候就要小心了!如果你收到了一个标签更新事件,表明这个标签里移除了成员A。但是成员A在授权的部门仍然可见,那么你只需要移除成员A和这个标签的关联,而不是移除成员A。

轻流的建议:需要记录成员或者部门同步进通讯录的途径

2bdd797de788fe5529ece09b691ae0e4.png

最后的Tips

请使用队列处理企业微信的通讯录请求,一个一个处理,不要并行处理,否则造成了数据不一致会让你抓狂。

222abe2eb4276110f16aa266c501c69c.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值