feishu-rails 0.1.4 → 0.1.5
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.
- checksums.yaml +4 -4
- data/README.md +34 -7
- data/lib/feishu/connector.rb +43 -85
- data/lib/feishu/version.rb +1 -1
- data/lib/feishu-rails.rb +4 -3
- metadata +2 -3
- data/lib/feishu/config.rb +0 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7dc4e1b6b4f87a681cf692808792450bdf9bb47fc81cfcefe34161e481c6f8db
|
4
|
+
data.tar.gz: 0e3a7e30aa7c294e1b61d3419e0d04c41c091c8982124bdfbadedc14e5504c08
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cc71e1a0b20353a715308e50167f9e3424260ca35904beb9aad2f457ec82e15131b0c762edd3afef96dd44181b93e88e1ed5783e94262ff8ec182608dfd5a41f
|
7
|
+
data.tar.gz: 72af82dd959521f7abc12761d5f68383c3da8616bcc7ef480f1ead2f5aa9946943dedbe11e002b52bd320636fc0d096ac8a3c37e1ef7d1acd5dc957d5067fe05
|
data/README.md
CHANGED
@@ -1,28 +1,55 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# feishu-Rails
|
2
|
+
|
3
|
+
对接飞书机器人,实现告警推送
|
3
4
|
|
4
5
|
## Usage
|
5
|
-
|
6
|
+
|
7
|
+
- include Feishu::Connector 到模块或者类对象;
|
8
|
+
- 主要实现的方法:[:user_id, :send_text, :group_members, :request, :send_alert, :access_token, :chat_id, :upload_image, :send_message, :group_list]
|
9
|
+
- 群内推送 send_alert(chat_id, title, content, image_path)
|
10
|
+
- 上传图片到飞书 upload_image(path) ,建议使用图片绝对路径
|
6
11
|
|
7
12
|
## Installation
|
13
|
+
|
8
14
|
Add this line to your application's Gemfile:
|
9
15
|
|
10
16
|
```ruby
|
11
|
-
gem "feishu"
|
17
|
+
gem "feishu-rails"
|
12
18
|
```
|
13
19
|
|
14
20
|
And then execute:
|
21
|
+
|
15
22
|
```bash
|
16
23
|
$ bundle
|
17
24
|
```
|
18
25
|
|
19
26
|
Or install it yourself as:
|
27
|
+
|
20
28
|
```bash
|
21
|
-
$ gem install feishu
|
29
|
+
$ gem install feishu-rails
|
30
|
+
```
|
31
|
+
|
32
|
+
add feishu_rails.rb in config/initializers
|
33
|
+
|
34
|
+
```ruby
|
35
|
+
Feishu.config do |f|
|
36
|
+
f.app_id = "xxx"
|
37
|
+
f.app_secret = "yyy"
|
38
|
+
f.encrypt_key = "zzz"
|
39
|
+
end
|
40
|
+
```
|
41
|
+
|
42
|
+
推送群组告警消息:
|
43
|
+
|
44
|
+
```ruby
|
45
|
+
include Feishu::Connector
|
46
|
+
|
47
|
+
Feishu::Connector.send_alert("oc_xxx", "title", "content", "/home/xxx/Codes/xxx.png")
|
48
|
+
|
22
49
|
```
|
23
50
|
|
24
51
|
## Contributing
|
25
|
-
Contribution directions go here.
|
26
52
|
|
27
53
|
## License
|
28
|
-
|
54
|
+
|
55
|
+
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
data/lib/feishu/connector.rb
CHANGED
@@ -4,6 +4,7 @@ require "active_support/concern"
|
|
4
4
|
|
5
5
|
module Feishu
|
6
6
|
extend ActiveSupport::Concern
|
7
|
+
|
7
8
|
module Connector
|
8
9
|
# 定义常用的 URL
|
9
10
|
AUTH_URL = "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal"
|
@@ -18,9 +19,9 @@ module Feishu
|
|
18
19
|
|
19
20
|
# 获取飞书 TOKEN 并缓存
|
20
21
|
def access_token
|
21
|
-
Rails.cache.fetch("feishu_token", expires_in:
|
22
|
+
Rails.cache.fetch("feishu_token", expires_in: 30.minutes) do
|
22
23
|
# res = HTTP.post(AUTH_URL, json: { app_id: app_id, app_secret: app_secret })
|
23
|
-
res = HTTP.post(AUTH_URL, json: { app_id:
|
24
|
+
res = HTTP.post(AUTH_URL, json: { app_id: Feishu.app_id, app_secret: Feishu.app_secret })
|
24
25
|
JSON.parse(res.body.readpartial)["tenant_access_token"]
|
25
26
|
end
|
26
27
|
end
|
@@ -37,18 +38,20 @@ module Feishu
|
|
37
38
|
res = request.get(url)
|
38
39
|
# 序列化
|
39
40
|
ret = JSON.parse(res.body.readpartial)
|
41
|
+
|
40
42
|
# 返回数据
|
41
43
|
ret["data"]["mobile_users"].try(:[], mobile).try(:[], 0).try(:[], "user_id")
|
42
44
|
end
|
43
45
|
|
44
|
-
#
|
45
|
-
def chat_id
|
46
|
+
# 获取群组的 chat_id
|
47
|
+
def chat_id(name)
|
46
48
|
# 请求后端
|
47
49
|
res = request.get(CHAT_ID)
|
48
50
|
# 序列化
|
49
51
|
ret = JSON.parse(res.body.readpartial)
|
52
|
+
|
50
53
|
# 返回数据
|
51
|
-
ret["data"]["groups"].try(:[], 0).try(:[], "chat_id")
|
54
|
+
ret["data"]["groups"].select { |i| i["name"] == name }.try(:[], 0).try(:[], "chat_id")
|
52
55
|
end
|
53
56
|
|
54
57
|
# 上传图片到飞书后台
|
@@ -59,6 +62,7 @@ module Feishu
|
|
59
62
|
# 请求后端
|
60
63
|
res = request.post(IMAGE_ID, form: { image_type: "message", image: data })
|
61
64
|
ret = JSON.parse res.body.readpartial
|
65
|
+
|
62
66
|
# 返回上传后的序列号
|
63
67
|
ret["data"]["image_key"]
|
64
68
|
end
|
@@ -74,7 +78,7 @@ module Feishu
|
|
74
78
|
end
|
75
79
|
|
76
80
|
# 获取群信息
|
77
|
-
def
|
81
|
+
def group_members(chat_id)
|
78
82
|
# 请求后端
|
79
83
|
res = request.get(GROUP_INFO, params: { chat_id: chat_id })
|
80
84
|
# 序列化
|
@@ -83,14 +87,6 @@ module Feishu
|
|
83
87
|
ret["data"]["members"]
|
84
88
|
end
|
85
89
|
|
86
|
-
# 获取群成员信息
|
87
|
-
# def member_list(chat_id)
|
88
|
-
# res = request.get("https://open.feishu.cn/open-apis/chat/v4/members", :params => {:chat_id=> chat_id})
|
89
|
-
# group_users_content = JSON.parse(res.body.readpartial)
|
90
|
-
|
91
|
-
# member_ids = group_users_content["data"]
|
92
|
-
# end
|
93
|
-
|
94
90
|
# 发送文本消息
|
95
91
|
def send_text(open_id, text)
|
96
92
|
# 请求后端
|
@@ -100,93 +96,55 @@ module Feishu
|
|
100
96
|
end
|
101
97
|
|
102
98
|
# 使用推荐的消息接口
|
103
|
-
def send_message(receive_type, receive_id, msg_type, content)
|
99
|
+
def send_message(receive_type = "chat_id", receive_id, msg_type, content)
|
104
100
|
# 请求后端
|
105
101
|
res = request.post(MESSAGE_URL, params: { receive_id_type: receive_type }, json: { receive_id: receive_id, msg_type: msg_type, content: content })
|
106
102
|
# 序列化
|
107
103
|
JSON.parse(res.body.readpartial)
|
108
104
|
end
|
109
105
|
|
110
|
-
#
|
111
|
-
def send_alert(chat_id)
|
106
|
+
# 向特定群组发生消息
|
107
|
+
def send_alert(chat_id, title, content, image_path)
|
112
108
|
data = {
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
]
|
109
|
+
chat_id: chat_id,
|
110
|
+
msg_type: "post",
|
111
|
+
content: {
|
112
|
+
post: {
|
113
|
+
zh_cn: {
|
114
|
+
title: title,
|
115
|
+
content: [
|
116
|
+
[
|
117
|
+
{
|
118
|
+
tag: "text",
|
119
|
+
un_escape: true,
|
120
|
+
text: content
|
121
|
+
},
|
122
|
+
{
|
123
|
+
tag: "at",
|
124
|
+
user_id: user_id("15673443571")
|
125
|
+
|
126
|
+
},
|
127
|
+
],
|
128
|
+
[
|
129
|
+
{
|
130
|
+
tag: "img",
|
131
|
+
image_key: upload_image(image_path),
|
132
|
+
width: 1000,
|
133
|
+
height: 600
|
134
|
+
}
|
140
135
|
]
|
136
|
+
]
|
141
137
|
}
|
142
138
|
}
|
143
139
|
}
|
144
140
|
}
|
145
141
|
# 请求后端
|
146
142
|
res = request.post(SEND_TEXT, json: data)
|
147
|
-
# 序列化
|
148
|
-
JSON.parse(res.body.readpartial)
|
149
|
-
end
|
150
143
|
|
151
|
-
# 告警恢复提醒
|
152
|
-
def send_recovery_message(title, content)
|
153
|
-
data = {
|
154
|
-
"chat_id": self.chat_id,
|
155
|
-
"msg_type": "post",
|
156
|
-
"content": {
|
157
|
-
"post": {
|
158
|
-
"zh_cn": {
|
159
|
-
"title": title,
|
160
|
-
"content": [
|
161
|
-
[
|
162
|
-
{
|
163
|
-
"tag": "text",
|
164
|
-
"un_escape": true,
|
165
|
-
"text": content
|
166
|
-
},
|
167
|
-
{
|
168
|
-
"tag": "at",
|
169
|
-
"user_id": user_id("15673443571")
|
170
|
-
|
171
|
-
},
|
172
|
-
],
|
173
|
-
[
|
174
|
-
{
|
175
|
-
"tag": "img",
|
176
|
-
"image_key": upload_image("/home/careline/Codes/mojo.png"),
|
177
|
-
"width": 1000,
|
178
|
-
"height": 600
|
179
|
-
}
|
180
|
-
]
|
181
|
-
]
|
182
|
-
}
|
183
|
-
}
|
184
|
-
}
|
185
|
-
}
|
186
|
-
# 请求后端
|
187
|
-
res = request.post(SEND_TEXT, json: data)
|
188
144
|
# 序列化
|
189
|
-
JSON.parse(res.body.readpartial)
|
145
|
+
JSON.parse(res.body.readpartial).to_query
|
146
|
+
|
147
|
+
alias_method :feishu_alert, :send_alert
|
190
148
|
end
|
191
149
|
end
|
192
150
|
end
|
data/lib/feishu/version.rb
CHANGED
data/lib/feishu-rails.rb
CHANGED
@@ -1,13 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "feishu/version"
|
4
|
-
require "feishu/config"
|
5
4
|
require "feishu/connector"
|
6
5
|
|
7
6
|
module Feishu
|
8
7
|
class << self
|
9
|
-
|
10
|
-
|
8
|
+
attr_accessor :app_id, :app_secret, :encrypt_key
|
9
|
+
|
10
|
+
def config
|
11
|
+
yield self
|
11
12
|
end
|
12
13
|
end
|
13
14
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: feishu-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- WENWU.YAN
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-03
|
11
|
+
date: 2022-04-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -34,7 +34,6 @@ files:
|
|
34
34
|
- README.md
|
35
35
|
- Rakefile
|
36
36
|
- lib/feishu-rails.rb
|
37
|
-
- lib/feishu/config.rb
|
38
37
|
- lib/feishu/connector.rb
|
39
38
|
- lib/feishu/version.rb
|
40
39
|
- lib/tasks/feishu_tasks.rake
|