feishu-rails 0.1.4 → 0.1.7

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 257e57680f67a6b05f24836a5f765fac25c6d6effaa4ae7e88843bc2df4e861c
4
- data.tar.gz: 0f81c2bdd6e4a3cf560fa530b78366e11d2df0f36208f159afc4736724fb3975
3
+ metadata.gz: 6804988e9d3dcce71102da60cdf71cac5e9b1e1627835f022c082e9e0585310f
4
+ data.tar.gz: 9dfe63a9194bcb9c6f8bfd4f75bc5bd76d4112748c9fe792d0e7f5e9a4f4e610
5
5
  SHA512:
6
- metadata.gz: d4aedc5c5524d3552cb99789a27513e7693eda443aa10f2ac7f19b6118024891b80019aa37a6eaa461750ca20bbea93cb331a561be8914f88f0794e0e45d102a
7
- data.tar.gz: 152aec5445a385cc3f5fc543616c14fac8b459da4085fb6f6f001711da0d2055fc82766f561488f4dd7e31f1c771ffd483e48094357899377d6343816cba61b8
6
+ metadata.gz: b633d47d579b2a9f9fb3539880976fc4084bbeb6c8141f852bfd99c6886823d4b1ca851fb17bcb263d3d3d47b8dd4d96e9821edcb4287016955ab53d8ae3f303
7
+ data.tar.gz: 9f1819889b23fec6163fef128db9cf30640eeac0decc881f036cf9f3e44872e8193b56e9470f0cbbe0ebf36917d317d14cc19f584ede94d297bbcb8a85b6858f
data/README.md CHANGED
@@ -1,28 +1,55 @@
1
- # Feishu
2
- Short description and motivation.
1
+ # feishu-Rails
2
+
3
+ 对接飞书机器人,实现告警推送
3
4
 
4
5
  ## Usage
5
- How to use my plugin.
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
- The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
54
+
55
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
@@ -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"
@@ -16,18 +17,9 @@ module Feishu
16
17
  GROUP_INFO = "https://open.feishu.cn/open-apis/chat/v4/info"
17
18
  SEND_TEXT = "https://open.feishu.cn/open-apis/message/v4/send"
18
19
 
19
- # 获取飞书 TOKEN 并缓存
20
- def access_token
21
- Rails.cache.fetch("feishu_token", expires_in: 2.hours) do
22
- # res = HTTP.post(AUTH_URL, json: { app_id: app_id, app_secret: app_secret })
23
- res = HTTP.post(AUTH_URL, json: { app_id: Config.app_id, app_secret: Config.app_secret })
24
- JSON.parse(res.body.readpartial)["tenant_access_token"]
25
- end
26
- end
27
-
28
20
  # 认证成功后,后续请求都携带 TOKEN
29
21
  def request
30
- HTTP.headers(Authorization: "Bearer #{access_token}")
22
+ HTTP.headers(Authorization: "Bearer #{feishu_token}")
31
23
  end
32
24
 
33
25
  # 根据手机号码查询用户的 USER_ID
@@ -37,18 +29,20 @@ module Feishu
37
29
  res = request.get(url)
38
30
  # 序列化
39
31
  ret = JSON.parse(res.body.readpartial)
32
+
40
33
  # 返回数据
41
34
  ret["data"]["mobile_users"].try(:[], mobile).try(:[], 0).try(:[], "user_id")
42
35
  end
43
36
 
44
- # 获取用户 CHAT_ID
45
- def chat_id
37
+ # 获取群组的 chat_id
38
+ def chat_id(name)
46
39
  # 请求后端
47
40
  res = request.get(CHAT_ID)
48
41
  # 序列化
49
42
  ret = JSON.parse(res.body.readpartial)
43
+
50
44
  # 返回数据
51
- ret["data"]["groups"].try(:[], 0).try(:[], "chat_id")
45
+ ret["data"]["groups"].select { |i| i["name"] == name }.try(:[], 0).try(:[], "chat_id")
52
46
  end
53
47
 
54
48
  # 上传图片到飞书后台
@@ -59,8 +53,11 @@ module Feishu
59
53
  # 请求后端
60
54
  res = request.post(IMAGE_ID, form: { image_type: "message", image: data })
61
55
  ret = JSON.parse res.body.readpartial
56
+
62
57
  # 返回上传后的序列号
63
58
  ret["data"]["image_key"]
59
+ rescue => e
60
+ Rails.logger("上传图片期间捕捉到异常:#{e}")
64
61
  end
65
62
 
66
63
  # 获取机器人所在的群列表
@@ -74,7 +71,7 @@ module Feishu
74
71
  end
75
72
 
76
73
  # 获取群信息
77
- def group_info(chat_id)
74
+ def group_members(chat_id)
78
75
  # 请求后端
79
76
  res = request.get(GROUP_INFO, params: { chat_id: chat_id })
80
77
  # 序列化
@@ -83,14 +80,6 @@ module Feishu
83
80
  ret["data"]["members"]
84
81
  end
85
82
 
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
83
  # 发送文本消息
95
84
  def send_text(open_id, text)
96
85
  # 请求后端
@@ -100,93 +89,72 @@ module Feishu
100
89
  end
101
90
 
102
91
  # 使用推荐的消息接口
103
- def send_message(receive_type, receive_id, msg_type, content)
92
+ def send_message(receive_type = "chat_id", receive_id, msg_type, content)
104
93
  # 请求后端
105
94
  res = request.post(MESSAGE_URL, params: { receive_id_type: receive_type }, json: { receive_id: receive_id, msg_type: msg_type, content: content })
106
95
  # 序列化
107
96
  JSON.parse(res.body.readpartial)
108
97
  end
109
98
 
110
- # 发生富文本消息
111
- def send_alert(chat_id)
112
- data = {
113
- "chat_id": chat_id,
114
- "msg_type": "post",
115
- "content": {
116
- "post": {
117
- "zh_cn": {
118
- "title": "title",
119
- "content": [
120
- [
121
- {
122
- "tag": "text",
123
- "un_escape": true,
124
- "text": "content"
125
- },
126
- {
127
- "tag": "at",
128
- "user_id": user_id("15673443571")
129
-
130
- },
131
- ],
132
- [
133
- {
134
- "tag": "img",
135
- "image_key": upload_image("/home/careline/Codes/mojo.png"),
136
- "width": 1000,
137
- "height": 600
138
- }
139
- ]
140
- ]
141
- }
142
- }
143
- }
144
- }
145
- # 请求后端
146
- res = request.post(SEND_TEXT, json: data)
147
- # 序列化
148
- JSON.parse(res.body.readpartial)
149
- end
99
+ # 向特定群组发生消息
100
+ def send_alert(chat_id, title, content, image_path)
101
+ # 获取上传文件路径
102
+ uploaded_image_path = upload_image(image_path)
150
103
 
151
- # 告警恢复提醒
152
- def send_recovery_message(title, content)
104
+ # 初始化数据结构
153
105
  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
- ]
106
+ chat_id: chat_id,
107
+ msg_type: "post",
108
+ content: {
109
+ post: {
110
+ zh_cn: {
111
+ title: title,
112
+ content: [
113
+ [
114
+ {
115
+ tag: "text",
116
+ un_escape: true,
117
+ text: content
118
+ },
119
+ {
120
+ tag: "at",
121
+ user_id: "all"
122
+ },
123
+ ],
124
+ [
125
+ {
126
+ tag: "img",
127
+ image_key: upload_image(image_path),
128
+ width: 1000,
129
+ height: 600
130
+ }
181
131
  ]
132
+ ]
182
133
  }
183
134
  }
184
135
  }
185
136
  }
137
+ # 如果图片不存在则移除相关属性
138
+ data[:content][:post][:zh_cn][:content].pop if uploaded_image_path.blank?
139
+
186
140
  # 请求后端
187
141
  res = request.post(SEND_TEXT, json: data)
142
+
188
143
  # 序列化
189
- JSON.parse(res.body.readpartial)
144
+ JSON.parse(res.body.readpartial).to_query
145
+
146
+ rescue => e
147
+ Rails.logger("群发消息期间捕捉到异常:#{e}")
190
148
  end
191
149
  end
150
+
151
+ private
152
+ def feishu_token
153
+ # 获取飞书 TOKEN 并缓存
154
+ Rails.cache.fetch("feishu_token", expires_in: 30.minutes) do
155
+ # res = HTTP.post(AUTH_URL, json: { app_id: app_id, app_secret: app_secret })
156
+ res = HTTP.post(AUTH_URL, json: { app_id: Feishu.app_id, app_secret: Feishu.app_secret })
157
+ JSON.parse(res.body.readpartial)["tenant_access_token"]
158
+ end
159
+ end
192
160
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Feishu
4
- VERSION = "0.1.4"
4
+ VERSION = "0.1.7"
5
5
  end
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
- def configure(&block)
10
- Config.configure(&block)
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
4
+ version: 0.1.7
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-28 00:00:00.000000000 Z
11
+ date: 2022-05-24 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
data/lib/feishu/config.rb DELETED
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Feishu
4
- class Config
5
- class << self
6
- attr_accessor :app_id, :app_secret, :encrypt_key
7
-
8
- def configure
9
- yield self
10
- end
11
- end
12
- end
13
- end