perk-pushplus-sdk 1.2.2__tar.gz → 1.2.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/PKG-INFO +26 -2
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/README.md +25 -1
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/pyproject.toml +1 -1
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus/__init__.py +45 -1
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus/api/__init__.py +6 -0
- perk_pushplus_sdk-1.2.4/src/perk_pushplus/api/cmcc.py +38 -0
- perk_pushplus_sdk-1.2.4/src/perk_pushplus/api/forward_log.py +25 -0
- perk_pushplus_sdk-1.2.4/src/perk_pushplus/api/forward_rule.py +69 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus/client.py +6 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus/config.py +1 -1
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus/enums.py +145 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus/models/__init__.py +31 -0
- perk_pushplus_sdk-1.2.4/src/perk_pushplus/models/open_cmcc.py +28 -0
- perk_pushplus_sdk-1.2.4/src/perk_pushplus/models/open_forward.py +247 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus_sdk.egg-info/PKG-INFO +26 -2
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus_sdk.egg-info/SOURCES.txt +5 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/tests/test_enums_and_exceptions.py +11 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/tests/test_open_api.py +92 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/setup.cfg +0 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus/access_key.py +0 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus/api/access_key.py +0 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus/api/base.py +0 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus/api/channel.py +0 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus/api/clawbot.py +0 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus/api/doc.py +0 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus/api/excel.py +0 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus/api/form.py +0 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus/api/friend.py +0 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus/api/image.py +0 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus/api/message.py +0 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus/api/message_token.py +0 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus/api/open_message.py +0 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus/api/pre.py +0 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus/api/qqbot.py +0 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus/api/setting.py +0 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus/api/topic.py +0 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus/api/topic_user.py +0 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus/api/user.py +0 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus/api/webhook.py +0 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus/callback_parser.py +0 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus/exceptions.py +0 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus/http.py +0 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus/models/base.py +0 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus/models/callback.py +0 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus/models/open_access.py +0 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus/models/open_channel.py +0 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus/models/open_clawbot.py +0 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus/models/open_doc.py +0 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus/models/open_form.py +0 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus/models/open_friend.py +0 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus/models/open_image.py +0 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus/models/open_message.py +0 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus/models/open_pre.py +0 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus/models/open_qqbot.py +0 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus/models/open_setting.py +0 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus/models/open_token.py +0 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus/models/open_topic.py +0 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus/models/open_user.py +0 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus/models/open_webhook.py +0 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus/models/send.py +0 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus/multipart.py +0 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus/py.typed +0 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus/rate_limit.py +0 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus_sdk.egg-info/dependency_links.txt +0 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus_sdk.egg-info/requires.txt +0 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/src/perk_pushplus_sdk.egg-info/top_level.txt +0 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/tests/test_image_api.py +0 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/tests/test_message_api.py +0 -0
- {perk_pushplus_sdk-1.2.2 → perk_pushplus_sdk-1.2.4}/tests/test_models.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: perk-pushplus-sdk
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.4
|
|
4
4
|
Summary: pushplus(推送加) 官方接口的 Python SDK,覆盖消息发送接口与全部开放接口。
|
|
5
5
|
Author: perk-net
|
|
6
6
|
License: Apache-2.0
|
|
@@ -35,7 +35,7 @@ Requires-Dist: responses>=0.23; extra == "dev"
|
|
|
35
35
|
[pushplus(推送加)](https://www.pushplus.plus) 官方接口的 Python SDK,覆盖 **消息接口** 与 **全部开放接口**。
|
|
36
36
|
|
|
37
37
|
- **消息接口**(`/send`、`/batchSend`):单渠道 + 多渠道发送,含 Builder API。
|
|
38
|
-
- **开放接口**(`/api/open/...` 与 `/push/api/open/...`):用户、消息、消息 token、群组、群组用户、好友、webhook、渠道、ClawBot、QQ 机器人、功能设置、预处理信息、图片服务、push 表单、push 文档、push
|
|
38
|
+
- **开放接口**(`/api/open/...` 与 `/push/api/open/...`):用户、消息、消息 token、群组、群组用户、好友、webhook、渠道、ClawBot、新消息 ClawBot、QQ 机器人、功能设置、预处理信息、图片服务、push 表单、push 文档、push 表格、消息规则。
|
|
39
39
|
- **AccessKey 自动管理**:缓存 + 过期前自动刷新;`code=401` 自动刷新并重试一次。
|
|
40
40
|
- **本地限流守卫**:命中 `code=900` 后按 token 短路同 token 后续发送,避免被服务端长期封禁。
|
|
41
41
|
- **回调解析**:`message_complate`、`add_topic_user`、`add_friend` 三类回调统一解析。
|
|
@@ -168,6 +168,17 @@ topic_blacklist = client.topic_user.blacklist_list(TopicUserListQuery.of(1, 20,
|
|
|
168
168
|
# webhook 渠道
|
|
169
169
|
webhooks = client.webhook.list()
|
|
170
170
|
|
|
171
|
+
# 新消息 ClawBot:绑定 Channel API Key 后,channel 传 cmcc(仅中国移动)
|
|
172
|
+
client.cmcc.bind("ak_xxxxxxxxxxxxxxxx")
|
|
173
|
+
cmcc_info = client.cmcc.info() # cmcc_info.bound == 1 表示已绑定
|
|
174
|
+
client.cmcc.send_test()
|
|
175
|
+
client.send(SendRequest(
|
|
176
|
+
title="服务告警",
|
|
177
|
+
content="订单服务响应超时",
|
|
178
|
+
channel=Channel.CMCC,
|
|
179
|
+
template=Template.TXT,
|
|
180
|
+
))
|
|
181
|
+
|
|
171
182
|
# QQ 机器人:绑定 -> 认领群 -> 建配置 -> 发到群
|
|
172
183
|
from perk_pushplus import QqBotSaveRequest
|
|
173
184
|
link = client.qq_bot.get_bind_link() # link.url 生成二维码,或私聊发送 link.bindCode
|
|
@@ -188,6 +199,19 @@ client.setting.change_is_send(1) # 启用发送
|
|
|
188
199
|
# 预处理(会员)
|
|
189
200
|
client.pre.test(...)
|
|
190
201
|
|
|
202
|
+
# 消息规则(会员)
|
|
203
|
+
from perk_pushplus import ForwardLogListQuery, ForwardRuleSaveRequest, ForwardVariable
|
|
204
|
+
client.forward_rule.save_setting(1) # 开启,未命中时仍按默认方式推送
|
|
205
|
+
client.forward_rule.add(ForwardRuleSaveRequest(
|
|
206
|
+
ruleName="阿里云监控多渠道",
|
|
207
|
+
tokenId=-1,
|
|
208
|
+
sourceType=1,
|
|
209
|
+
titleTemplate="{{alertName}}",
|
|
210
|
+
variables=[ForwardVariable(varName="alertName", sourceType=3, extractType=1, extractKey="alertName")],
|
|
211
|
+
))
|
|
212
|
+
rules = client.forward_rule.list()
|
|
213
|
+
logs = client.forward_log.list(ForwardLogListQuery.of(1, 20, match_result=1))
|
|
214
|
+
|
|
191
215
|
# 图片服务(一行上传到 PushPlus 图床)
|
|
192
216
|
r = client.image.upload_file("/tmp/logo.png")
|
|
193
217
|
print(r.url) # 可访问的图片地址
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
[pushplus(推送加)](https://www.pushplus.plus) 官方接口的 Python SDK,覆盖 **消息接口** 与 **全部开放接口**。
|
|
4
4
|
|
|
5
5
|
- **消息接口**(`/send`、`/batchSend`):单渠道 + 多渠道发送,含 Builder API。
|
|
6
|
-
- **开放接口**(`/api/open/...` 与 `/push/api/open/...`):用户、消息、消息 token、群组、群组用户、好友、webhook、渠道、ClawBot、QQ 机器人、功能设置、预处理信息、图片服务、push 表单、push 文档、push
|
|
6
|
+
- **开放接口**(`/api/open/...` 与 `/push/api/open/...`):用户、消息、消息 token、群组、群组用户、好友、webhook、渠道、ClawBot、新消息 ClawBot、QQ 机器人、功能设置、预处理信息、图片服务、push 表单、push 文档、push 表格、消息规则。
|
|
7
7
|
- **AccessKey 自动管理**:缓存 + 过期前自动刷新;`code=401` 自动刷新并重试一次。
|
|
8
8
|
- **本地限流守卫**:命中 `code=900` 后按 token 短路同 token 后续发送,避免被服务端长期封禁。
|
|
9
9
|
- **回调解析**:`message_complate`、`add_topic_user`、`add_friend` 三类回调统一解析。
|
|
@@ -136,6 +136,17 @@ topic_blacklist = client.topic_user.blacklist_list(TopicUserListQuery.of(1, 20,
|
|
|
136
136
|
# webhook 渠道
|
|
137
137
|
webhooks = client.webhook.list()
|
|
138
138
|
|
|
139
|
+
# 新消息 ClawBot:绑定 Channel API Key 后,channel 传 cmcc(仅中国移动)
|
|
140
|
+
client.cmcc.bind("ak_xxxxxxxxxxxxxxxx")
|
|
141
|
+
cmcc_info = client.cmcc.info() # cmcc_info.bound == 1 表示已绑定
|
|
142
|
+
client.cmcc.send_test()
|
|
143
|
+
client.send(SendRequest(
|
|
144
|
+
title="服务告警",
|
|
145
|
+
content="订单服务响应超时",
|
|
146
|
+
channel=Channel.CMCC,
|
|
147
|
+
template=Template.TXT,
|
|
148
|
+
))
|
|
149
|
+
|
|
139
150
|
# QQ 机器人:绑定 -> 认领群 -> 建配置 -> 发到群
|
|
140
151
|
from perk_pushplus import QqBotSaveRequest
|
|
141
152
|
link = client.qq_bot.get_bind_link() # link.url 生成二维码,或私聊发送 link.bindCode
|
|
@@ -156,6 +167,19 @@ client.setting.change_is_send(1) # 启用发送
|
|
|
156
167
|
# 预处理(会员)
|
|
157
168
|
client.pre.test(...)
|
|
158
169
|
|
|
170
|
+
# 消息规则(会员)
|
|
171
|
+
from perk_pushplus import ForwardLogListQuery, ForwardRuleSaveRequest, ForwardVariable
|
|
172
|
+
client.forward_rule.save_setting(1) # 开启,未命中时仍按默认方式推送
|
|
173
|
+
client.forward_rule.add(ForwardRuleSaveRequest(
|
|
174
|
+
ruleName="阿里云监控多渠道",
|
|
175
|
+
tokenId=-1,
|
|
176
|
+
sourceType=1,
|
|
177
|
+
titleTemplate="{{alertName}}",
|
|
178
|
+
variables=[ForwardVariable(varName="alertName", sourceType=3, extractType=1, extractKey="alertName")],
|
|
179
|
+
))
|
|
180
|
+
rules = client.forward_rule.list()
|
|
181
|
+
logs = client.forward_log.list(ForwardLogListQuery.of(1, 20, match_result=1))
|
|
182
|
+
|
|
159
183
|
# 图片服务(一行上传到 PushPlus 图床)
|
|
160
184
|
r = client.image.upload_file("/tmp/logo.png")
|
|
161
185
|
print(r.url) # 可访问的图片地址
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "perk-pushplus-sdk"
|
|
7
|
-
version = "1.2.
|
|
7
|
+
version = "1.2.4"
|
|
8
8
|
description = "pushplus(推送加) 官方接口的 Python SDK,覆盖消息发送接口与全部开放接口。"
|
|
9
9
|
readme = { file = "README.md", content-type = "text/markdown" }
|
|
10
10
|
requires-python = ">=3.8"
|
|
@@ -29,6 +29,13 @@ from .enums import (
|
|
|
29
29
|
Channel,
|
|
30
30
|
ErrorCode,
|
|
31
31
|
FormStatus,
|
|
32
|
+
ForwardConditionOperator,
|
|
33
|
+
ForwardExtractType,
|
|
34
|
+
ForwardMatchResult,
|
|
35
|
+
ForwardMessageType,
|
|
36
|
+
ForwardMode,
|
|
37
|
+
ForwardSourceType,
|
|
38
|
+
ForwardVarSourceType,
|
|
32
39
|
SendStatus,
|
|
33
40
|
ShareLogin,
|
|
34
41
|
SharePerm,
|
|
@@ -47,6 +54,8 @@ from .models import (
|
|
|
47
54
|
ClawBotInfo,
|
|
48
55
|
ClawBotMessage,
|
|
49
56
|
ClawBotQrCode,
|
|
57
|
+
CmccBindRequest,
|
|
58
|
+
CmccInfo,
|
|
50
59
|
CpItem,
|
|
51
60
|
DocContent,
|
|
52
61
|
DocListItem,
|
|
@@ -63,6 +72,19 @@ from .models import (
|
|
|
63
72
|
FormSaveRequest,
|
|
64
73
|
FormSettings,
|
|
65
74
|
FormTheme,
|
|
75
|
+
ForwardCondition,
|
|
76
|
+
ForwardConditionItem,
|
|
77
|
+
ForwardLogDetail,
|
|
78
|
+
ForwardLogItem,
|
|
79
|
+
ForwardLogListQuery,
|
|
80
|
+
ForwardRuleDetail,
|
|
81
|
+
ForwardRuleItem,
|
|
82
|
+
ForwardRuleSaveRequest,
|
|
83
|
+
ForwardRuleSetting,
|
|
84
|
+
ForwardRuleTestRequest,
|
|
85
|
+
ForwardRuleTestResult,
|
|
86
|
+
ForwardTarget,
|
|
87
|
+
ForwardVariable,
|
|
66
88
|
FriendItem,
|
|
67
89
|
FriendQrCode,
|
|
68
90
|
FriendBlacklistItem,
|
|
@@ -114,7 +136,7 @@ from .models import (
|
|
|
114
136
|
)
|
|
115
137
|
from .rate_limit import RateLimitGuard
|
|
116
138
|
|
|
117
|
-
__version__ = "1.2.
|
|
139
|
+
__version__ = "1.2.4"
|
|
118
140
|
|
|
119
141
|
__all__ = [
|
|
120
142
|
"__version__",
|
|
@@ -139,6 +161,13 @@ __all__ = [
|
|
|
139
161
|
"FormStatus",
|
|
140
162
|
"SharePerm",
|
|
141
163
|
"ShareLogin",
|
|
164
|
+
"ForwardMode",
|
|
165
|
+
"ForwardSourceType",
|
|
166
|
+
"ForwardVarSourceType",
|
|
167
|
+
"ForwardExtractType",
|
|
168
|
+
"ForwardMatchResult",
|
|
169
|
+
"ForwardConditionOperator",
|
|
170
|
+
"ForwardMessageType",
|
|
142
171
|
"ApiResponse",
|
|
143
172
|
"PageQuery",
|
|
144
173
|
"PageResult",
|
|
@@ -181,6 +210,8 @@ __all__ = [
|
|
|
181
210
|
"ClawBotQrCode",
|
|
182
211
|
"ClawBotInfo",
|
|
183
212
|
"ClawBotMessage",
|
|
213
|
+
"CmccBindRequest",
|
|
214
|
+
"CmccInfo",
|
|
184
215
|
"QqBotBindLink",
|
|
185
216
|
"QqBotInfo",
|
|
186
217
|
"QqBotBindInfo",
|
|
@@ -212,4 +243,17 @@ __all__ = [
|
|
|
212
243
|
"DocContent",
|
|
213
244
|
"ExcelVo",
|
|
214
245
|
"ExcelContent",
|
|
246
|
+
"ForwardConditionItem",
|
|
247
|
+
"ForwardCondition",
|
|
248
|
+
"ForwardVariable",
|
|
249
|
+
"ForwardTarget",
|
|
250
|
+
"ForwardRuleItem",
|
|
251
|
+
"ForwardRuleDetail",
|
|
252
|
+
"ForwardRuleSaveRequest",
|
|
253
|
+
"ForwardRuleTestRequest",
|
|
254
|
+
"ForwardRuleTestResult",
|
|
255
|
+
"ForwardRuleSetting",
|
|
256
|
+
"ForwardLogListQuery",
|
|
257
|
+
"ForwardLogItem",
|
|
258
|
+
"ForwardLogDetail",
|
|
215
259
|
]
|
|
@@ -3,11 +3,14 @@ from .access_key import AccessKeyApi
|
|
|
3
3
|
from .base import AbstractApi, OpenAbstractApi
|
|
4
4
|
from .channel import ChannelApi
|
|
5
5
|
from .clawbot import ClawBotApi
|
|
6
|
+
from .cmcc import CmccApi
|
|
6
7
|
from .friend import FriendApi
|
|
7
8
|
from .image import ImageApi
|
|
8
9
|
from .form import FormApi
|
|
9
10
|
from .doc import DocApi
|
|
10
11
|
from .excel import ExcelApi
|
|
12
|
+
from .forward_log import ForwardLogApi
|
|
13
|
+
from .forward_rule import ForwardRuleApi
|
|
11
14
|
from .message import MessageApi
|
|
12
15
|
from .message_token import MessageTokenApi
|
|
13
16
|
from .open_message import OpenMessageApi
|
|
@@ -33,6 +36,7 @@ __all__ = [
|
|
|
33
36
|
"WebhookApi",
|
|
34
37
|
"ChannelApi",
|
|
35
38
|
"ClawBotApi",
|
|
39
|
+
"CmccApi",
|
|
36
40
|
"QqBotApi",
|
|
37
41
|
"SettingApi",
|
|
38
42
|
"PreApi",
|
|
@@ -40,4 +44,6 @@ __all__ = [
|
|
|
40
44
|
"FormApi",
|
|
41
45
|
"DocApi",
|
|
42
46
|
"ExcelApi",
|
|
47
|
+
"ForwardRuleApi",
|
|
48
|
+
"ForwardLogApi",
|
|
43
49
|
]
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"""开放接口 - 新消息 ClawBot(文档「九. 新消息ClawBot接口」)。
|
|
2
|
+
|
|
3
|
+
需先在手机 5G 消息的「新消息ClawBot」应用号中获取 Channel API Key,再调用绑定接口。
|
|
4
|
+
发送消息时 channel 传 ``cmcc``。仅支持中国移动用户。
|
|
5
|
+
"""
|
|
6
|
+
from __future__ import annotations
|
|
7
|
+
|
|
8
|
+
from ..models import CmccBindRequest, CmccInfo
|
|
9
|
+
from .base import OpenAbstractApi
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class CmccApi(OpenAbstractApi):
|
|
13
|
+
"""新消息 ClawBot 渠道相关接口。"""
|
|
14
|
+
|
|
15
|
+
def bind(self, api_key: str) -> None:
|
|
16
|
+
"""绑定新消息 ClawBot。``api_key`` 必须以 ``ak_`` 或 ``app_`` 开头。"""
|
|
17
|
+
|
|
18
|
+
self.execute_open(
|
|
19
|
+
"POST", "/api/open/cmcc/bind", CmccBindRequest(apiKey=api_key), None
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
def info(self) -> CmccInfo:
|
|
23
|
+
"""查询绑定状态。"""
|
|
24
|
+
|
|
25
|
+
return self.execute_open("GET", "/api/open/cmcc/info", None, CmccInfo)
|
|
26
|
+
|
|
27
|
+
def unbind(self) -> None:
|
|
28
|
+
"""解绑新消息 ClawBot。"""
|
|
29
|
+
|
|
30
|
+
self.execute_open("GET", "/api/open/cmcc/unbind", None, None)
|
|
31
|
+
|
|
32
|
+
def send_test(self) -> None:
|
|
33
|
+
"""发送测试消息。未绑定会返回「未绑定新消息ClawBot」。"""
|
|
34
|
+
|
|
35
|
+
self.execute_open("GET", "/api/open/cmcc/test", None, None)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
__all__ = ["CmccApi"]
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"""开放接口 - 消息规则触发记录(文档「十四. 消息规则接口」第 10、11 节)。"""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
from typing import Optional
|
|
5
|
+
|
|
6
|
+
from ..models import ForwardLogDetail, ForwardLogItem, ForwardLogListQuery, PageResult
|
|
7
|
+
from .base import OpenAbstractApi
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class ForwardLogApi(OpenAbstractApi):
|
|
11
|
+
"""消息规则触发记录。"""
|
|
12
|
+
|
|
13
|
+
def list(self, query: Optional[ForwardLogListQuery] = None) -> PageResult[ForwardLogItem]:
|
|
14
|
+
body = query if query is not None else ForwardLogListQuery()
|
|
15
|
+
result = self.execute_open(
|
|
16
|
+
"POST", "/api/open/forwardLog/list", body, PageResult[ForwardLogItem]
|
|
17
|
+
)
|
|
18
|
+
return result or PageResult(list=[])
|
|
19
|
+
|
|
20
|
+
def detail(self, log_id: int) -> ForwardLogDetail:
|
|
21
|
+
path = self.append_query("/api/open/forwardLog/detail", {"logId": int(log_id)})
|
|
22
|
+
return self.execute_open("GET", path, None, ForwardLogDetail)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
__all__ = ["ForwardLogApi"]
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"""开放接口 - 消息规则(文档「十四. 消息规则接口」)。需开通会员后才能开启。"""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
from typing import Optional
|
|
5
|
+
|
|
6
|
+
from ..models import (
|
|
7
|
+
ForwardRuleDetail,
|
|
8
|
+
ForwardRuleItem,
|
|
9
|
+
ForwardRuleSaveRequest,
|
|
10
|
+
ForwardRuleSetting,
|
|
11
|
+
ForwardRuleTestRequest,
|
|
12
|
+
ForwardRuleTestResult,
|
|
13
|
+
PageQuery,
|
|
14
|
+
PageResult,
|
|
15
|
+
)
|
|
16
|
+
from .base import OpenAbstractApi
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class ForwardRuleApi(OpenAbstractApi):
|
|
20
|
+
"""消息规则(仅会员)。"""
|
|
21
|
+
|
|
22
|
+
def list(self, query: Optional[PageQuery] = None) -> PageResult[ForwardRuleItem]:
|
|
23
|
+
body = query if query is not None else PageQuery()
|
|
24
|
+
result = self.execute_open(
|
|
25
|
+
"POST", "/api/open/forwardRule/list", body, PageResult[ForwardRuleItem]
|
|
26
|
+
)
|
|
27
|
+
return result or PageResult(list=[])
|
|
28
|
+
|
|
29
|
+
def detail(self, rule_id: int) -> ForwardRuleDetail:
|
|
30
|
+
path = self.append_query("/api/open/forwardRule/detail", {"ruleId": int(rule_id)})
|
|
31
|
+
return self.execute_open("GET", path, None, ForwardRuleDetail)
|
|
32
|
+
|
|
33
|
+
def add(self, req: ForwardRuleSaveRequest) -> None:
|
|
34
|
+
self.execute_open("POST", "/api/open/forwardRule/add", req, None)
|
|
35
|
+
|
|
36
|
+
def edit(self, req: ForwardRuleSaveRequest) -> None:
|
|
37
|
+
"""修改消息规则;会整体覆盖模板变量和发送目标。"""
|
|
38
|
+
|
|
39
|
+
self.execute_open("POST", "/api/open/forwardRule/edit", req, None)
|
|
40
|
+
|
|
41
|
+
def delete(self, rule_id: int) -> None:
|
|
42
|
+
path = self.append_query("/api/open/forwardRule/delete", {"ruleId": int(rule_id)})
|
|
43
|
+
self.execute_open("DELETE", path, None, None)
|
|
44
|
+
|
|
45
|
+
def change_status(self, rule_id: int, status: int) -> None:
|
|
46
|
+
"""启用 / 停用消息规则:1 启用,0 停用。"""
|
|
47
|
+
|
|
48
|
+
path = self.append_query(
|
|
49
|
+
"/api/open/forwardRule/changeStatus",
|
|
50
|
+
{"ruleId": int(rule_id), "status": int(status)},
|
|
51
|
+
)
|
|
52
|
+
self.execute_open("GET", path, None, None)
|
|
53
|
+
|
|
54
|
+
def test(self, req: ForwardRuleTestRequest) -> ForwardRuleTestResult:
|
|
55
|
+
"""用模拟请求测试规则,不会真正发送消息。"""
|
|
56
|
+
|
|
57
|
+
return self.execute_open("POST", "/api/open/forwardRule/test", req, ForwardRuleTestResult)
|
|
58
|
+
|
|
59
|
+
def get_setting(self) -> ForwardRuleSetting:
|
|
60
|
+
return self.execute_open("GET", "/api/open/forwardRule/setting", None, ForwardRuleSetting)
|
|
61
|
+
|
|
62
|
+
def save_setting(self, mode: int) -> None:
|
|
63
|
+
"""设置总开关:0 关闭,1 开启且未命中仍推送,2 开启且未命中不推送。"""
|
|
64
|
+
|
|
65
|
+
path = self.append_query("/api/open/forwardRule/setting", {"mode": int(mode)})
|
|
66
|
+
self.execute_open("GET", path, None, None)
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
__all__ = ["ForwardRuleApi"]
|
|
@@ -9,6 +9,7 @@ from .api import (
|
|
|
9
9
|
AccessKeyApi,
|
|
10
10
|
ChannelApi,
|
|
11
11
|
ClawBotApi,
|
|
12
|
+
CmccApi,
|
|
12
13
|
FriendApi,
|
|
13
14
|
ImageApi,
|
|
14
15
|
MessageApi,
|
|
@@ -24,6 +25,8 @@ from .api import (
|
|
|
24
25
|
FormApi,
|
|
25
26
|
DocApi,
|
|
26
27
|
ExcelApi,
|
|
28
|
+
ForwardLogApi,
|
|
29
|
+
ForwardRuleApi,
|
|
27
30
|
)
|
|
28
31
|
from .config import PushPlusConfig
|
|
29
32
|
from .exceptions import PushPlusError
|
|
@@ -77,6 +80,7 @@ class PushPlusClient:
|
|
|
77
80
|
self.webhook = WebhookApi(config, self.http_requester, self.access_key_manager)
|
|
78
81
|
self.channel = ChannelApi(config, self.http_requester, self.access_key_manager)
|
|
79
82
|
self.claw_bot = ClawBotApi(config, self.http_requester, self.access_key_manager)
|
|
83
|
+
self.cmcc = CmccApi(config, self.http_requester, self.access_key_manager)
|
|
80
84
|
self.qq_bot = QqBotApi(config, self.http_requester, self.access_key_manager)
|
|
81
85
|
self.setting = SettingApi(config, self.http_requester, self.access_key_manager)
|
|
82
86
|
self.pre = PreApi(config, self.http_requester, self.access_key_manager)
|
|
@@ -84,6 +88,8 @@ class PushPlusClient:
|
|
|
84
88
|
self.form = FormApi(config, self.http_requester, self.access_key_manager)
|
|
85
89
|
self.doc = DocApi(config, self.http_requester, self.access_key_manager)
|
|
86
90
|
self.excel = ExcelApi(config, self.http_requester, self.access_key_manager)
|
|
91
|
+
self.forward_rule = ForwardRuleApi(config, self.http_requester, self.access_key_manager)
|
|
92
|
+
self.forward_log = ForwardLogApi(config, self.http_requester, self.access_key_manager)
|
|
87
93
|
|
|
88
94
|
@classmethod
|
|
89
95
|
def of(cls, config: PushPlusConfig) -> "PushPlusClient":
|
|
@@ -42,6 +42,8 @@ class Channel(_StrCodeEnum):
|
|
|
42
42
|
"""App 渠道(安卓/鸿蒙/iOS)。"""
|
|
43
43
|
CLAWBOT = "clawbot"
|
|
44
44
|
"""微信 ClawBot。"""
|
|
45
|
+
CMCC = "cmcc"
|
|
46
|
+
"""新消息 ClawBot(中国移动 5G 消息);仅支持中国移动用户。"""
|
|
45
47
|
QQ = "qq"
|
|
46
48
|
"""QQ 机器人;不带 option 发给自己,option 填配置编码则发到对应 QQ 群。"""
|
|
47
49
|
|
|
@@ -257,6 +259,142 @@ class ShareLogin(_IntCodeEnum):
|
|
|
257
259
|
return self.value
|
|
258
260
|
|
|
259
261
|
|
|
262
|
+
class ForwardMode(_IntCodeEnum):
|
|
263
|
+
"""消息规则总开关。0-关闭,1-开启且未命中仍推送,2-开启且未命中不推送。"""
|
|
264
|
+
|
|
265
|
+
OFF = 0
|
|
266
|
+
ON_FALLBACK = 1
|
|
267
|
+
ON_STRICT = 2
|
|
268
|
+
|
|
269
|
+
@property
|
|
270
|
+
def code(self) -> int:
|
|
271
|
+
return self.value
|
|
272
|
+
|
|
273
|
+
@property
|
|
274
|
+
def description(self) -> str:
|
|
275
|
+
return _FORWARD_MODE_DESCRIPTIONS[self]
|
|
276
|
+
|
|
277
|
+
|
|
278
|
+
_FORWARD_MODE_DESCRIPTIONS = {
|
|
279
|
+
ForwardMode.OFF: "关闭(推送与原来一致)",
|
|
280
|
+
ForwardMode.ON_FALLBACK: "开启,未命中时仍按默认方式推送",
|
|
281
|
+
ForwardMode.ON_STRICT: "开启,未命中时不推送",
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
|
|
285
|
+
class ForwardSourceType(_IntCodeEnum):
|
|
286
|
+
"""消息规则触发来源。0-全部,1-消息接口,2-邮件。"""
|
|
287
|
+
|
|
288
|
+
ALL = 0
|
|
289
|
+
API = 1
|
|
290
|
+
MAIL = 2
|
|
291
|
+
|
|
292
|
+
@property
|
|
293
|
+
def code(self) -> int:
|
|
294
|
+
return self.value
|
|
295
|
+
|
|
296
|
+
@property
|
|
297
|
+
def description(self) -> str:
|
|
298
|
+
return _FORWARD_SOURCE_TYPE_DESCRIPTIONS[self]
|
|
299
|
+
|
|
300
|
+
|
|
301
|
+
_FORWARD_SOURCE_TYPE_DESCRIPTIONS = {
|
|
302
|
+
ForwardSourceType.ALL: "全部",
|
|
303
|
+
ForwardSourceType.API: "消息接口",
|
|
304
|
+
ForwardSourceType.MAIL: "邮件",
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
|
|
308
|
+
class ForwardVarSourceType(_IntCodeEnum):
|
|
309
|
+
"""模板变量来源。1-请求头,2-Query参数,3-请求体,4-URL路径,5-主题(邮件)。"""
|
|
310
|
+
|
|
311
|
+
HEADER = 1
|
|
312
|
+
QUERY = 2
|
|
313
|
+
BODY = 3
|
|
314
|
+
PATH = 4
|
|
315
|
+
SUBJECT = 5
|
|
316
|
+
|
|
317
|
+
@property
|
|
318
|
+
def code(self) -> int:
|
|
319
|
+
return self.value
|
|
320
|
+
|
|
321
|
+
|
|
322
|
+
class ForwardExtractType(_IntCodeEnum):
|
|
323
|
+
"""模板变量提取方式。1-序列化数据,2-正则表达式,3-JSONPath,4-原始全文。"""
|
|
324
|
+
|
|
325
|
+
SERIALIZED = 1
|
|
326
|
+
REGEX = 2
|
|
327
|
+
JSON_PATH = 3
|
|
328
|
+
RAW = 4
|
|
329
|
+
|
|
330
|
+
@property
|
|
331
|
+
def code(self) -> int:
|
|
332
|
+
return self.value
|
|
333
|
+
|
|
334
|
+
|
|
335
|
+
class ForwardMatchResult(_IntCodeEnum):
|
|
336
|
+
"""触发记录匹配结果。0-条件不满足,1-已转发,2-频率限制,3-不在触发时间段,4-执行异常。"""
|
|
337
|
+
|
|
338
|
+
NOT_MATCHED = 0
|
|
339
|
+
FORWARDED = 1
|
|
340
|
+
RATE_LIMITED = 2
|
|
341
|
+
OUT_OF_TIME = 3
|
|
342
|
+
ERROR = 4
|
|
343
|
+
|
|
344
|
+
@property
|
|
345
|
+
def code(self) -> int:
|
|
346
|
+
return self.value
|
|
347
|
+
|
|
348
|
+
@property
|
|
349
|
+
def description(self) -> str:
|
|
350
|
+
return _FORWARD_MATCH_RESULT_DESCRIPTIONS[self]
|
|
351
|
+
|
|
352
|
+
|
|
353
|
+
_FORWARD_MATCH_RESULT_DESCRIPTIONS = {
|
|
354
|
+
ForwardMatchResult.NOT_MATCHED: "条件不满足",
|
|
355
|
+
ForwardMatchResult.FORWARDED: "已转发",
|
|
356
|
+
ForwardMatchResult.RATE_LIMITED: "频率限制",
|
|
357
|
+
ForwardMatchResult.OUT_OF_TIME: "不在触发时间段",
|
|
358
|
+
ForwardMatchResult.ERROR: "执行异常",
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
|
|
362
|
+
class ForwardConditionOperator(_StrCodeEnum):
|
|
363
|
+
"""图形化触发条件运算符。"""
|
|
364
|
+
|
|
365
|
+
EQ = "eq"
|
|
366
|
+
NE = "ne"
|
|
367
|
+
CONTAINS = "contains"
|
|
368
|
+
NOT_CONTAINS = "notContains"
|
|
369
|
+
STARTS_WITH = "startsWith"
|
|
370
|
+
ENDS_WITH = "endsWith"
|
|
371
|
+
REGEX = "regex"
|
|
372
|
+
GT = "gt"
|
|
373
|
+
GTE = "gte"
|
|
374
|
+
LT = "lt"
|
|
375
|
+
LTE = "lte"
|
|
376
|
+
IN = "in"
|
|
377
|
+
NOT_IN = "notIn"
|
|
378
|
+
EMPTY = "empty"
|
|
379
|
+
NOT_EMPTY = "notEmpty"
|
|
380
|
+
|
|
381
|
+
@property
|
|
382
|
+
def code(self) -> str:
|
|
383
|
+
return self.value
|
|
384
|
+
|
|
385
|
+
|
|
386
|
+
class ForwardMessageType(_StrCodeEnum):
|
|
387
|
+
"""消息规则发送目标的消息类型。也支持写成 ``{{变量名}}``。"""
|
|
388
|
+
|
|
389
|
+
ONE = "one"
|
|
390
|
+
TOPIC = "topic"
|
|
391
|
+
FRIEND = "friend"
|
|
392
|
+
|
|
393
|
+
@property
|
|
394
|
+
def code(self) -> str:
|
|
395
|
+
return self.value
|
|
396
|
+
|
|
397
|
+
|
|
260
398
|
__all__ = [
|
|
261
399
|
"Channel",
|
|
262
400
|
"Template",
|
|
@@ -267,4 +405,11 @@ __all__ = [
|
|
|
267
405
|
"FormStatus",
|
|
268
406
|
"SharePerm",
|
|
269
407
|
"ShareLogin",
|
|
408
|
+
"ForwardMode",
|
|
409
|
+
"ForwardSourceType",
|
|
410
|
+
"ForwardVarSourceType",
|
|
411
|
+
"ForwardExtractType",
|
|
412
|
+
"ForwardMatchResult",
|
|
413
|
+
"ForwardConditionOperator",
|
|
414
|
+
"ForwardMessageType",
|
|
270
415
|
]
|
|
@@ -36,6 +36,7 @@ from .open_friend import FriendBlacklistItem, FriendItem, FriendQrCode
|
|
|
36
36
|
from .open_webhook import WebhookItem, WebhookSaveRequest
|
|
37
37
|
from .open_channel import CpItem, MailDetail, MailItem, MpItem
|
|
38
38
|
from .open_clawbot import ClawBotInfo, ClawBotMessage, ClawBotQrCode
|
|
39
|
+
from .open_cmcc import CmccBindRequest, CmccInfo
|
|
39
40
|
from .open_qqbot import (
|
|
40
41
|
QqBotBindInfo,
|
|
41
42
|
QqBotBindLink,
|
|
@@ -59,6 +60,21 @@ from .open_form import (
|
|
|
59
60
|
FormTheme,
|
|
60
61
|
)
|
|
61
62
|
from .open_doc import DocContent, DocListItem, DocListQuery, DocVo, ExcelContent, ExcelVo
|
|
63
|
+
from .open_forward import (
|
|
64
|
+
ForwardCondition,
|
|
65
|
+
ForwardConditionItem,
|
|
66
|
+
ForwardLogDetail,
|
|
67
|
+
ForwardLogItem,
|
|
68
|
+
ForwardLogListQuery,
|
|
69
|
+
ForwardRuleDetail,
|
|
70
|
+
ForwardRuleItem,
|
|
71
|
+
ForwardRuleSaveRequest,
|
|
72
|
+
ForwardRuleSetting,
|
|
73
|
+
ForwardRuleTestRequest,
|
|
74
|
+
ForwardRuleTestResult,
|
|
75
|
+
ForwardTarget,
|
|
76
|
+
ForwardVariable,
|
|
77
|
+
)
|
|
62
78
|
|
|
63
79
|
__all__ = [
|
|
64
80
|
"ApiResponse",
|
|
@@ -105,6 +121,8 @@ __all__ = [
|
|
|
105
121
|
"ClawBotQrCode",
|
|
106
122
|
"ClawBotInfo",
|
|
107
123
|
"ClawBotMessage",
|
|
124
|
+
"CmccBindRequest",
|
|
125
|
+
"CmccInfo",
|
|
108
126
|
"QqBotBindLink",
|
|
109
127
|
"QqBotInfo",
|
|
110
128
|
"QqBotBindInfo",
|
|
@@ -136,4 +154,17 @@ __all__ = [
|
|
|
136
154
|
"DocContent",
|
|
137
155
|
"ExcelVo",
|
|
138
156
|
"ExcelContent",
|
|
157
|
+
"ForwardConditionItem",
|
|
158
|
+
"ForwardCondition",
|
|
159
|
+
"ForwardVariable",
|
|
160
|
+
"ForwardTarget",
|
|
161
|
+
"ForwardRuleItem",
|
|
162
|
+
"ForwardRuleDetail",
|
|
163
|
+
"ForwardRuleSaveRequest",
|
|
164
|
+
"ForwardRuleTestRequest",
|
|
165
|
+
"ForwardRuleTestResult",
|
|
166
|
+
"ForwardRuleSetting",
|
|
167
|
+
"ForwardLogListQuery",
|
|
168
|
+
"ForwardLogItem",
|
|
169
|
+
"ForwardLogDetail",
|
|
139
170
|
]
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"""开放接口 - 新消息 ClawBot 模型。"""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
from dataclasses import dataclass
|
|
5
|
+
from typing import Optional
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
@dataclass
|
|
9
|
+
class CmccBindRequest:
|
|
10
|
+
"""新消息 ClawBot 绑定请求。"""
|
|
11
|
+
|
|
12
|
+
apiKey: str
|
|
13
|
+
"""中国移动新消息 Channel API Key,必须以 ak_ 或 app_ 开头。"""
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
@dataclass
|
|
17
|
+
class CmccInfo:
|
|
18
|
+
"""新消息 ClawBot 绑定状态。"""
|
|
19
|
+
|
|
20
|
+
bound: Optional[int] = None
|
|
21
|
+
"""是否已绑定;0-未绑定,1-已绑定。"""
|
|
22
|
+
apiKeyMasked: Optional[str] = None
|
|
23
|
+
"""脱敏后的 API Key。"""
|
|
24
|
+
createTime: Optional[str] = None
|
|
25
|
+
"""绑定时间。"""
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
__all__ = ["CmccBindRequest", "CmccInfo"]
|