前言

为了对标阿里系的钉钉,腾讯于2016年4月18日推出了企业微信
专注企业内部通讯(目前已加入客户管理及客户通讯功能),替代原有的RTX腾讯通

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

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

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

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

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

https://work.weixin.qq.com/api/doc/90000/90136/91770
看完文档后,可以了解到,使用这个API大致分以下几个步骤
1.创建一个群聊机器人
2.获得群聊机器人的链接(含webhook)
3.向该链接发送消息

下面我们正式开始操作

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

1.打开手机端企业微信客户端,打开一个群(不支持外部群)
2.点击右上角两个人头的图标
3.点击群机器人
4.点击添加机器人(或右上角添加)
5.输入机器人名字,点击添加按钮
6.获得webhook的地址,直接点复制,也可返回查看
该地址格式如下,注意保密不要泄露https://qyapi.weixin.qq.com/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.weixin.qq.com',lower_port => 1, -- 允许访问的起始端口号    upper_port => 9999 -- 允许访问的截止端口号  );commit;
end;
/

三、配置ORACLE数据库的WALLET

该api地址为https开头,表示启用了ssl加密,之前在使用ORACLE数据库存储过程发送加密email(SSL)【ORACLE】简单谈谈ORACLE中WALLET(钱夹)
两文中提到,这种情况需要配置oracle的wallet,我们可以直接用浏览器打开https://qyapi.weixin.qq.com
这个地址,使用浏览器来获得证书文件,已实测这个证书在失效1个月后仍然可以正常发送消息(2021-07-15时测试结果,不代表未来,如果提示证书失效请自行更新wallet)
wallet配置方法请参考之前这篇文章

四、编译数据库包 qyapi_weixin_robot_sql

create or replace package qyapi_weixin_robot_sql is-- Author  : DarkAthena-- Created : 2020-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_dir      varchar2,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项目获取https://github.com/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         =>'20210715_456798215648977.xlsx',--实际文件名i_display_file_name =>'昨日账单20210715.xlsx'--聊天窗口中要显示的文件名
);
end;
/

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

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

20210715 更新补充

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

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

  1. 运用python实现企业微信群机器人消息推送

    使用场景:将BI报表精准推送入(群),精准触达用户 目的:提高管理层对数据的感知度 工具:python+企业微信 步骤: 1.创建企业微信群机器人,提取Webhook地址(群机器人地址) 2.编写代码 ...

  2. 工作随记-Java利用企业微信群机器人定时发送消息

    hi,大家好,我是恰恰 阅读本文需要2分钟~ 最近利用企业微信群机器人做的需求主要有 1.返奖率通知与告警:抽奖箱能抽出垃圾也能抽出大货,每隔5分钟查询一下这个返奖率,如果用户频繁抽出大货,这个抽奖箱 ...

  3. SAP ABAP 添加企业微信群机器人并调用 API 发送消息

    SAP ABAP 添加企业微信群机器人并调用 API 发送消息 引言: 这篇文章以我在个人开源项目"任务管理服务(ZTASK)"中的应用为例,通过讲述使用企业微信机器人实现任务的通 ...

  4. 如何使用企业微信群机器人定时发送消息

    场景描述: 每天早上8点钟通过企业微信群机器人发消息提醒大家打卡.在Aboter中该如何实现呢? 步骤: 首先创建一个IPaaS流程,触发条件组件编辑区选择[定时触发]类型.编辑区进行如下设置: 拖动 ...

  5. python 企业微信群机器人_企业微信群机器人应用:使用python从网站抓取行业资讯并定时推送...

    在企业经营过程中,及时了解行业相关信息(市场动态.竞品策略.行业数据等等)是非常必要的.通常情况下,商品部门.营销部门.市场部门可能都会安排专门的人员定期进行这些信息的搜集.整理,再进行内部的分享. ...

  6. div区域内容抓取_企业微信群机器人应用:使用python从网站抓取行业资讯并定时推送...

    在企业经营过程中,及时了解行业相关信息(市场动态.竞品策略.行业数据等等)是非常必要的.通常情况下,商品部门.营销部门.市场部门可能都会安排专门的人员定期进行这些信息的搜集.整理,再进行内部的分享. ...

  7. delphi 企业微信消息机器人_GitHub - guoxianlong/insight: Insight是一个可以管理企业微信群机器人的小工具,可以非常方便的往群里发布即时消息和定时消息。...

    最科幻的企业微信群机器人管理工具 非常方便的发布群即时消息和定时消息,解放双手,提升沟通效率 部署教程 更新日志(2020.05.31) 修复设置为智能跳过工作日时,周日依然提醒问题. 前端修复定时成 ...

  8. Python实现企业微信群机器人自动化推送

    人工智能(Artificial Intelligence),英文缩写为AI.它是研究.开发用于模拟.延伸和扩展人的智能的理论.方法.技术及应用系统的一门新的技术科学. --<百度百科> 文 ...

  9. 钉钉群机器人关键词自动回复_企业微信群机器人怎么用?企业微信群机器人有什么功能?...

    使用企业微信办公时,我们可以在群聊中添加群机器人,自动推送消息,回答客户提问,那么企业微信群机器人怎么添加呢? 因为企业微信内部群机器人和外部群机器人的添加方式有一点区别,下面我们分开来讲述. 内部群 ...

最新文章

  1. 三十之惑–面霸的八月(第二部分)
  2. java的sdk在哪个文件夹_我的计算机中的Java SDK文件夹在哪里? Ubuntu 12.04
  3. 洛谷 5205 【模板】多项式开根
  4. Ghost 2.16.3 发布,基于 Markdown 的在线写作平台
  5. 登陆界面(jsp)客户端验证
  6. aspnet core 2.1中使用jwt从原理到精通二
  7. html的数据类型有哪些,数据库数据类型有哪些
  8. 创建Maven分布式前台系统架构,写出京动态导航,跨域返Json数据
  9. Spring Data 起步
  10. Java注解之自定义注解
  11. java udp发送速率_项目总结22:Java UDP Socket数据的发送和接收
  12. R-CNN解读+代码梳理
  13. ZEMAX | 绘图分辨率结果对光线追迹的影响
  14. 红宝书背诵笔记 — 必考词
  15. 【EMD和EEMD】EEMD工具箱使用
  16. CF632E Thief in a Shop 题解
  17. Apache Spark源码阅读环境搭建
  18. cv2.error: OpenCV(4.5.2) C:\Users\runneradmin\AppData\Local\Temp\pip-req-build-1y7gm6kn\opencv\modul
  19. hdu 1069 Monkey and Banana 【动态规划】
  20. Excel表格视图受保护,无法编辑,怎么解除视图保护?

热门文章

  1. 如何在eclipse中运行jsp
  2. 手机长曝光是什么意思_实用贴!手把手教你如何实现手机长曝光!
  3. ansible自动化运维详解(一)ansible的安装部署、参数使用、清单管理、配置文件参数及用户级ansible操作环境构建
  4. 共享单车数据分析的SQL数据库设计
  5. 百度网盘一直显示等待下载 不开始
  6. linux 我的世界 跨平台联机,我的世界跨平台能联机吗 跨操作系统联机方法
  7. 安卓开发解决ERROR type 3 的问题。
  8. Android花样loading进度条(二)-简单环形进度条
  9. 企业百家号蓝V认证,移动端排名展示,提升企业品牌知名度!
  10. Java 使用HttpURLConnection获取网易云(我喜欢的音乐)歌单内歌曲