用企业微信机器人做交互式前端-添加微信功能,企业微信id在哪里看

本系列所有文章请访问:概述

开通机器人

微信机器人先要在企业微信的后台开通:

  • 创建应用
  • 获取该应用的发送秘钥
  • 生成该应用接收令牌
  • 生成该应用接收秘钥

注1:该机器人的接收服务器url为:jxTMS服务器IP:端口号/企业微信号/应用ID。如:http://tms.myJxTMS.com:10018/ww4exxxxxxxxxxxxxxx/1000002/

注2:目前jxTMS暂不支持https协议

然后在jxTMS服务器上以manager角色访问快捷栏【企业微信->查看】打开本企业的企业微信配置界面,然后点击【添加机器人】在jxTMS服务器上以上述信息来配置该机器人:

用企业微信机器人做交互式前端-添加微信功能,企业微信id在哪里看

注:如果是公共应用,则两个角色处都不填,所有企业微信中的成员都可以访问该机器人。如果填了,那访问规则如下:

  • 如果填了拒绝访问的角色列表,则角色集【该成员所映射的角色以及这些角色所映射的虚拟角色】中存在这些角色的成员会被拒绝
  • 这时,如果没填允许角色,则其他成员都可以访问
  • 如果也填了允许角色,则角色集中存在这些角色的成员会被允许访问
  • 其他成员全部拒绝

配置完成后,jxTMS会自动为该机器人创建一个虚拟的uri:/corpid/appID,用以接收企业微信服务器发送过来的用户在企业微信中发给该机器人的消息。由于企业微信在正式提供服务前需验证接收url的工作是否正常,所以整个开通过程是:

1、在企业微信后台创建应用并生成前述这些信息【但暂不验证】

2、用这些信息在jxTMS开通微信机器人

3、在企业微信后台验证该url

之后就可以在企业微信中看到在【名称】中填入的微信机器人名,如tms、hr、进销存等,用户就可以访问该机器人查询信息或办理业务了。

注:一个企业不管有多少个机器人、不管这些机器人叫什么、干什么,对jxTMS来说,这些机器人只是用来和用户打交道的ui,只是用来增强操作内聚性、强化业务管控的一种组织方式。同一个企业的微信机器人之间并未有任何隔离,不需要考虑互联互通的问题。操作的安全性由jxTMS自身的权限系统、安全设计等予以保证

添加微信功能

向微信机器人添加一个功能项非常简单,如上文的容器表测试的定义:

@myModule.wxDisp('tms','容器表测试'.decode('utf-8'),'测试'.decode('utf-8'))
@myModule.event('prepareDisp', 'wxTestCT')
def wxTest(self, db, ctx):
    jx.log('wxTestCT disp')
    self.setOutput('testIn1','from wxTestCT')

可以看出,就是在通常的入口函数【参考其中的动作按钮的响应函数一节】定义后,额外添加一个jxTMS提供的java编写的wx修饰:

wx(String appName,String title,String path,String verifyStr,Boolean dataTable)

其中:

  • appName:微信机器人名,就是上面在jxTMS中添加机器人时所填写的机器人名称【不是在企业微信后台所填写的应用名,当然,这两者最好一致】

注:可定义多个机器人,各机器人的菜单根据wx修饰分别创建

  • title:显示在菜单中的功能名,如上篇文章中的【容器表测试】
  • path:从根菜单出发,一个子菜单一个子菜单的找到该功能的路径,每层子菜单选项的title用英文句号分隔,如【组织管理.人事管理】,则本功能菜单项就会出现:主菜单->组织管理->人事管理下。path中的这些子菜单如未创建,则jxTMS在向微信机器人添加时会自动创建

注:未指定path,则不会出现在任何静态定义的菜单中,而只能作为其它功能菜单动态添加的子菜单项出现

  • verifyStr:根据当前的业务上下文来确定本功能菜单项是否动态的出现在父菜单中。如,【新成员注册】就定义了verifyStr为:caller.id==0,意为检测调用者的id是否为0,为0则显示该菜单项
  • dataTable:指示是否为数据表的菜单项

然后分别针对容器表、数据表、命令提供了三个对应的简写修饰函数符:

容器表:wxDisp(String appName,String title,String path)
数据表:wxDataTable(String appName,String title,String path)
命令:wxOP(String appName,String title,String verifyStr)

如果简写不能满足需要,还是需要用wx进行修饰,如【新成员注册】就比较特殊,应修饰为:

@myModule.wx('tms','新成员注册'.decode('utf-8'),'root','caller.id==0',False)
@myModule.event('cmd', 'wxAddPeople')
def wxAddPeople(self,db,ctx):
    ......

这是由于【新成员注册】必须挂在根目录下,否则新用户看不到。

注:所有的子菜单,如果没有定义verifyStr,jxTMS会默认添加一个【caller.id>0】,以阻止未注册用户使用

用wx修饰符修饰后,该事件响应函数自动添加到该机器人的树状菜单中【未指定path的就没有固定的锚定点,而是由容器表或数据表动态添加】,jxTMS会在运行时自动为其准备好运行环境和上下文,并重定向输入输出到微信机器人的收发处理流中,使得该函数无缝工作在微信机器人中。

注:jxTMS确保事件响应函数对基于自身的动态web ui、对静态web ui和基于微信机器人的ui工作逻辑完全一致。使得基于自身动态web界面所开发的业务逻辑可无缝支持静态web界面和微信机器人。这样当需要这些ui时,可利用jxTMS低成本快速定制的能力,开发相应的动态web界面并验证后,确保一个工作稳定且业务已经验证的后台

jxTMS目前已打包为docker容器,可以下拉jxTMS的docker镜像并按jxTMS使用示例尝试使用。

本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 sumchina520@foxmail.com 举报,一经查实,本站将立刻删除。
如若转载,请注明出处:https://www.yoka8.cn/4786.html