OA信息系统与钉钉开放平台的消息推送模块对接

2020-05-18 02:44薛凯
电子乐园·上旬刊 2020年9期
关键词:钉钉调用开放平台

摘要:钉钉开放平台提供了丰富的第三方对接程序接口,为了更好的支持手机办公和电脑钉钉的使用,本文通过实例的形式完成单位内部OA系统与钉钉开放平台的消息推送的模块工作。

关键词:钉钉开放平台;钉钉与内部OA对接

钉钉是阿里巴巴旗下的通讯类工具,专门打造各单位通用化OA系统,是一款免费版通讯类软件,帮助企业能够快速的完成与钉钉的对接工作。本文将以钉钉开放平台中的企业内部应用为例,完成单位内部OA系统与钉钉开放平台系统的接口对接,以实例的形式完成单位内部OA系统与钉钉开放平台的消息推送的模块工作。其中主要包括钉钉的ACCESS_TOKEN的获取、消息通知、接口调用说明、系统间对照关系等对接涉及的工作。

一、总览

企业内部OA系统通常建立在文件驱动的方式,以文件流为导向,推送或收发到各联系人或OA账号内,企业内部OA系统通常都有自己的组织架构,需要将钉钉的组织架构与OA系统的组织架构进行对照,并完成消息推送。企业内部OA系统作为独立的运作系统,我们与其对接时不能破坏内部的逻辑架构,也不能强行让OA系统进行内部改造,本文采用轮询企业OA系统数据库方式来监听发文信息,并采用钉钉提供的API方式进行接口对接,推送OA文件链接。。

二、数据表的创建

本文采用数据库轮询监听的方式工作,本文需要创建6个数据表,DingTalkDeptInfo为从钉钉组织架构中获取的科室信息,DingTalkPersonInfo为从钉钉组织架构中获取的人员信息,DingTalkUndoInfo为钉钉推送消息中撤销任务列表信息,DingTalkSendInfo为钉钉完成推送消息信息列表,OAvsDingTalk为OA系统与钉钉系统的内部人员对照表,OAUserInfo为OA系统用户ID信息表。钉钉的组织架构分为一级科室和二级科室等架构,支持多节点结构,我们要获取当前科室下的所有员工信息时,钉钉开发平台接口要求必须传入父节点ID,所以我们在设计表时,将科室单独存放在一个表中,人员单独创建另一个表。其中DingTalkSendInfo为主要表格,里面包含钉钉已发送过的OA文件ID(DingSendOAId),钉钉推送服务返回状态信息(DingMsg),钉钉人员ID(DingUserId),钉钉系统返回发送任务ID(DingTaskId),发送时间(CreateTime)。其他表格内容项不赘述。

三、程序设计流程及关键点

TalkServer以Timer定時器每隔10s将会调用一次OA发文推送函数,OA发文推送函数采用Thread线程方式,首先先获取DingTalkSendInfo表中已发送的最大的DingSendOAId,然后再查询OA系统当前最大的OAId,采用for循环的形式将DingSendOAId作为i起始变量,i小于OAId,i变量自增的形式,循环发送需要发送ID。代码如:for (long i = DingSendOAId; i < OAId; i++)。OA文件系统存在树形结构的形式,我们需要通过主目录获取子目录明细项目,推送钉钉消息时,只推送一个发文标题,而子目录将以程序列表的形式发送给钉钉用户,OA系统需要按照网络安全要求,将公网IP地址映射给OA发文系统服务器,这样推送给钉钉用户的消息可以通过互联网访问内部OA系统查看文件。在推送消息前,应从OA系统获取文件相关的ID,发送人,接收人等信息,然后将主目录列表的公网IP地址及标题等相关信息作为主目录数据,构建完成主目录数据后,通过for循环构造子目录数据明细项目及对应文件的链接地址。推送主目录时,我们还需要OA与钉钉用户对照表OAUserInfo中获取钉钉用户的ID,这时我们还需要考虑,会存在OA一个账户,但钉钉存在两个部门都会使用同一个OA账户的情况,OAUserInfo里的对应关系可能存在一个OA账户对应多个钉钉用户或科室ID,利用for循环,将同一个主目录,依次发送给多个用户。同时我们还会对撤销或删除的OA文件进行撤销函数处理,因为每一次的钉钉消息推送,都会返回taskId,我们将存放在数据库DingTalkSendInfo表中,通过对OA系统的监听,获取到最近10次的撤销文件ID,与撤销任务表DingTalkUndoInfo中ID进行for循环对比,如果存在最新的ID,则调用钉钉的撤销函数API,以上内容为程序的基本流程设计。

四、钉钉开放平台函数介绍和使用

手机端网页的显示采用H5微应用的方式进行开发,我们需要将OA系统当前发文的子目录以列表的形式在钉钉APP上显示,所以我们需要开发H5页面用来显示发文的附件明细,我们可以使用

    标记对和
  • 两个标记对,绘制前台附件明细页面,以post传参格式化字符串链接地址的方式,调用OA系统相关内部文件。钉钉为了安全,应用访问需要获取 access_token身份凭证,调用接口时,通过access_token来鉴权调用者的身份,在钉钉的后台管理页应用存在AppKey和AppSecret,我们以GET方式请求调用钉钉的API地址https://oapi.dingtalk.com/gettoken,入参为AppKey和AppSecret。发送通知消息采用POST调用方式调用地址,其中入参Body参数userid_list和dept_id_list为两个重要参数,userid_list为钉钉企业内部用户的userid列表,dept_id_list为接收者的部门id列表,该部门下的所有人员都是接收到此消息。为了能够获取钉钉的组织架构中人员和部门ID,我需要调用钉钉获取通讯录管理权限,其中涉及获取用户详情和获取部门用户列表和部门用户详情,而发送消息,我们可以参考开放平台中的发送工作通知和撤销工作通知来进行开发。

    参考文献

    [1]朱夏迪.医院HIS系统调用钉钉开放平台的简单实例[J].中国新通信,2016,18(19):146-147.

    作者简介:薛凯,男,山东省青岛市,1990年5月,本科,高级系统架构师,软件设计师,青岛市黄岛区人民医院信息中心工作,主要从事软件维护、软件开发

    青岛市黄岛区人民医院,信息中心 266400

    猜你喜欢
    钉钉调用开放平台
    基于“钉钉”的精神病学线上教学模式初探
    腾讯安全应急响应开放平台正式上线
    基于Android Broadcast的短信安全监听系统的设计和实现
    微软Teams,拿什么抢《钉钉》的饭碗?
    钉钉在烟草公司办公中的应用探讨
    《钉钉》vs.《企业微信》,较量刚刚开始
    中职会计教学模式的转变分析
    利用RFC技术实现SAP系统接口通信
    人人网注册供应商直逼2000家
    C++语言中函数参数传递方式剖析