Python|实现泛微E-Mobile消息发送对接

  前面已经研究过如何通过微信、钉钉进行消息通知,但公司内部还在使用泛微的E-Mobile通讯工具,部分涉密信息还是通过内部通讯工具发送比较合适。今天研究下如何通过python实现E-Mobile的消息通知。

分析过程

供应商提供了一个接口文档《E9二开、第三方系统推送消息》, 但这种方式需要在ecology的消息中心进行配置。而我实际的使用需求仅仅是通过python将消息推送到emobile。
在跟厂商确认后得知,泛微没有针对emobile的接口文档。后来我曾想过通过抓包工具抓取客户端的请求体,不过没有成功。
在emobile的管理后台我发现了这样一个功能:可以创建一个消息型应用,通过发送消息的功能实现类似消息通知/消息广播的场景。
emobile管理后台
分析该页面的网络请求很容易就找到了请求地址和请求体:
接口地址
之后分别获取了文本、图片、文件、分享几种场景的请求体,通过python调用测试满足需求:
弹窗显示
消息列表

源码文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
import requests
loginurl = r'http://ip:port/emp/passport/login'
url = r'http://ip:port/emp/api/message/send'

# 获取登录信息
login_data = {"key":"","loginid":"********","password":"********","login_type":2,"loginUUID":""}
login_content = requests.post(loginurl,json=login_data)
cookies = login_content.cookies

# 发送文本消息
textContent = {
"msgtype": "text",
"agentid": 35,
"text": {
"content": "来自python的文本测试"
},
"todept": "",
"toparty": "",
"touser": "683|515",
"totag": "",
"send_type": 1,
"target_type": 1
}
# 发送图片消息
imgContent = {
"msgtype": "image",
"agentid": 35,
"image": {
"media_id": "27d81a593df64726824af72e8e9fb2c2"
},
"todept": "",
"toparty": "",
"touser": "683",
"totag": "",
"send_type": 1,
"target_type": 1
}
# 发送文件消息
fileContent = {
"msgtype": "file",
"agentid": 35,
"file": {
"media_id": "ee736fc486e348d7b0662bf13ad5fa4e"
},
"todept": "",
"toparty": "",
"touser": "683",
"totag": "",
"send_type": 1,
"target_type": 1
}
# 发送分享消息
shareContent = {
"msgtype": "share",
"agentid": 35,
"share": {
"content": "百度首页",
"extra": {
"linkurl": "http://www.baidu.com",
"linkurl_pc": "http://www.baidu.com",
"sharetypename": "工作通知",
"desc": "点击可进入百度首页",
"show_in_mobile": 1,
"show_in_pc": 1,
"desc": "Sender:陈迪,2023-06-29 10:36:00",
"sharetypebgcolor": "#965454"
}
},
"todept": "",
"toparty": "15",
"touser": "",
"totag": "",
"send_type": 1,
"target_type": 1
}

# send_type---发送类型:1-立即发送,2-定时发送,为空默认为1,如果是定时发送消息的话,那么定时发送的发送时间 为 send_time 字段
# target_type---推送目标类型,0-无,1-E-mobile,2-企业号,该消息是需要推送到什么地方,1-是em的即时通的消息上,2-是用户集成的地方云桥上,比如企业微信,钉钉等, 0是根据配置emobile和企业号都推送
# media_id---文件素材id,是用户上传到em的文件id,是表 em_sys_base_file 表存储的文件信息的文件记录id主键

# result = requests.post(url,cookies=cookies,json = textContent)
# result = requests.post(url,cookies=cookies,json = imgContent)
# result = requests.post(url,cookies=cookies,json = fileContent)
result = requests.post(url,cookies=cookies,json = shareContent)
print(result.text)

e-mobile数据库的连接

涉及图片、文件消息发送时需要media_id值,该值记录在e-mobile的mysql数据库中(表名:em_sys_base_file)。而mysql数据库默认是不允许远程连接的,需要调整用户权限,允许远程连接。操作方式如下:

1、打开命令行或终端,进入移动平台安装根目录,执行以下命令
windows: dbsvr\mysql\bin\mysql -P 4806 -u root -p
linux: /usr/emp/dbsvr/mysql/bin/mysql -u root -p --socket=/usr/emp/data/mysqldata/mysql.sock
2、输入密码并回车
3、输入sgl语句:
create user ‘root’@’%’ identified with mysql_native_password by ‘mysql的密码’;
4、输入sql语句:
grant all privileges on . to ‘root’@’%’;
回车
5、输入sql语句:
flush privileges;
回车


商业转载请联系作者获得授权,非商业转载请注明出处。

支付宝打赏 微信打赏

如果文章对你有帮助,欢迎点击上方按钮打赏作者

Python|实现泛微E-Mobile消息发送对接
http://hncd1024.github.io/2023/06/30/Python_emobileapi/
作者
CHEN DI
发布于
2023-06-30
许可协议