700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 【AIO】使用ORACLE数据库存储过程发送企业微信群机器人消息

【AIO】使用ORACLE数据库存储过程发送企业微信群机器人消息

时间:2019-10-23 07:31:49

相关推荐

【AIO】使用ORACLE数据库存储过程发送企业微信群机器人消息

前言

为了对标阿里系的钉钉,腾讯于4月18日推出了企业微信

专注企业内部通讯(目前已加入客户管理及客户通讯功能),替代原有的RTX腾讯通

企业微信由于微信的生态及其易用性,已被很多企业使用,甚至个人都可以申请开通一个企业,其中经常会使用到的一个功能为消息推送。

消息推送目前分两大种,一是通过在企业微信新建应用,通过该应用发送给企业微信内指定的成员或群;二是通过企业微信群内的自建机器人,来发送消息到群。两种方式都支持api调用,但由于第一种需要新建应用,还要token和secret支持,在企业内有多个企业微信的应用开发项目时,容易发生token频繁更新导致经常失效,第二种方式不需要token,甚至不需要企业微信管理员的授权,所以第二种更方便使用。

一般像这种api调用都要再另外开发一个程序,比如JAVA/PY等,也有利用.bat/.sh这类的操作系统批处理脚本来发送,但是都依赖于操作系统,而且增加了运维监控的工作量。

本文针对第二种,介绍下如何通过ORACLE数据库存储过程来使用此功能(本文不描述如何申请开通企业微信)。

先了解企业微信官方API文档-群机器人配置说明

https://work./api/doc/90000/90136/91770

看完文档后,可以了解到,使用这个API大致分以下几个步骤

1.创建一个群聊机器人

2.获得群聊机器人的链接(含webhook)

3.向该链接发送消息

下面我们正式开始操作

一、创建群聊机器人及获得webhook

1.打开手机端企业微信客户端,打开一个群(不支持外部群)

2.点击右上角两个人头的图标

3.点击群机器人

4.点击添加机器人(或右上角添加)

5.输入机器人名字,点击添加按钮

6.获得webhook的地址,直接点复制,也可返回查看

该地址格式如下,注意保密不要泄露https://qyapi./cgi-bin/webhook/send?key=a******-***-***-***-******

二、在ORACLE数据库中配置ACL授权(可能需要SYS用户),允许ORACLE数据库访问企业微信API的地址

beginsys.dbms_network_acl_admin.create_acl( -- 创建访问控制文件(ACL)acl => 'utl_http.xml', -- 文件名称 description => 'HTTP Access', -- 描述 principal => 'ORACLE_USER', -- 授权或者取消授权账号,大小写敏感is_grant => TRUE, -- 授权还是取消授权privilege => 'connect', -- 授权或者取消授权的权限列表 start_date => null, -- 起始日期 end_date => null -- 结束日期 );sys.dbms_network_acl_admin.add_privilege( -- 添加访问权限列表项 acl => 'utl_http.xml', -- 刚才创建的acl名称principal => 'ORACLE_USER', -- 授权或取消授权用户 is_grant => TRUE, -- 与上同privilege => 'resolve', -- 权限列表 start_date => null,end_date => null);sys.dbms_network_acl_admin.assign_acl( -- 该段命令意思是允许访问acl名为utl_http.xml下授权的用户,使用oracle网络访问包,所允许访问的目的主机,及其端口范围。 acl => 'utl_http.xml',host => 'qyapi.',lower_port => 1, -- 允许访问的起始端口号 upper_port => 9999 -- 允许访问的截止端口号 );commit;end;/

三、配置ORACLE数据库的WALLET

该api地址为https开头,表示启用了ssl加密,之前在使用ORACLE数据库存储过程发送加密email(SSL)【ORACLE】简单谈谈ORACLE中WALLET(钱夹)

两文中提到,这种情况需要配置oracle的wallet,我们可以直接用浏览器打开https://qyapi.

这个地址,使用浏览器来获得证书文件,已实测这个证书在失效1个月后仍然可以正常发送消息(-07-15时测试结果,不代表未来,如果提示证书失效请自行更新wallet)

wallet配置方法请参考之前这篇文章

四、编译数据库包 qyapi_weixin_robot_sql

create or replace package qyapi_weixin_robot_sql is-- Author : DarkAthena-- Created : -06-15 13:33:16-- Purpose : 企业微信群机器人APIg_WALLET_path varchar2(1000):='H:\WINDOWS.X64_193000_db_home\ssl_wallet';--钱夹保存路径g_wallet_pwd varchar2(1000) :='12345678'; --钱夹密码,若设置了自动登录,可为空g_content_type varchar2(1000):='application/json';procedure sendmsg_text(i_webhook varchar2,i_content_text varchar2);--发送文本信息procedure sendmsg_file(i_webhook varchar2,i_dirvarchar2,i_file_name varchar2,i_display_file_name varchar2);--发送文件信息procedure sendmsg_image(i_webhook varchar2,i_dir varchar2,i_imagename varchar2);--发送图片信息end qyapi_weixin_robot_sql;/

完整源码请访问我的github项目获取/Dark-Athena/workweixinrobot-oracle

五、修改数据库包qyapi_weixin_robot_sql中wallet及wallet密码的配置

g_WALLET_path varchar2(1000):='H:\WINDOWS.X64_193000_db_home\ssl_wallet';--钱夹保存路径g_wallet_pwd varchar2(1000) :='12345678'; --钱夹密码,若设置了自动登录,可为空

六、测试发送

由于常用的就是文本、文件、图片三种内容,因此只对这三种进行了封装,markdown/图文暂不支持(要实现其实也很简单,懒得搞了)

1.发送文本信息

beginqyapi_weixin_robot_sql.sendmsg_text(i_webhook=> 'a******-***-***-***-******',--这里只要webhook地址后面的keyi_content_text => '亲爱的主人,早安');end;/

2.发送文件

beginqyapi_weixin_robot_sql.sendmsg_file(i_webhook => 'a******-***-***-***-******',i_dir=>'SENDFILE_DIR',--这里为数据库中配置的目录,下同, create or replace directory SENDFILE_DIR as 'H:\WINDOWS.X64_193000_db_home\TEMP'i_file_name =>'0715_456798215648977.xlsx',--实际文件名i_display_file_name =>'昨日账单0715.xlsx'--聊天窗口中要显示的文件名);end;/

3.发送图片

其实图片也是可以通过文件发送的,但是如果是通过文件的形式发送,用户需要点击这个图片打开才能看到内容,如果是以图片显示发送,则在聊天窗口中可以直接显示图片内容

beginqyapi_weixin_robot_sql.sendmsg_image(i_webhook => 'a******-***-***-***-******',i_dir =>'SENDFILE_DIR' ,i_imagename => '1625668522172.jpg');end;/

0715 更新补充

之前在 oracle 11g上测试的时候,这个api必须有包含对应证书的wallet才能发送,当然也可以把地址中的https的s去掉,只是这样安全度会降低。今天写这篇文章时同步在oracle 19c上测试,发现去掉钱夹的配置,地址为https时一样可以正常发送,原因不明。所以之后可能会在这个包中再多配置一个参数,由用户自行决定是否要启用ssl

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。