feishu-rails 0.1.2 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d6b9dc17b25ed71b79c2e5c2160c3073a60229ec72fcb57886afd78670f40dce
4
- data.tar.gz: 589b5a49e22547cb7a1707af6abdda452c4c37b526f26a3be7929719ed62f0ee
3
+ metadata.gz: 7dc4e1b6b4f87a681cf692808792450bdf9bb47fc81cfcefe34161e481c6f8db
4
+ data.tar.gz: 0e3a7e30aa7c294e1b61d3419e0d04c41c091c8982124bdfbadedc14e5504c08
5
5
  SHA512:
6
- metadata.gz: '068363fc3fc91c331e63d4dc98c455b9c13254b55f1ebb7b6f12f709b738f5b1d25b3bdd72d35a3347b25f61ad229ddfe154f946877a9af727aa63722c2e3829'
7
- data.tar.gz: 1c4707530b6173a37bb5e9fe98d93026c7b9398c46a4db971b1ba1817bfb12ab4236b43ea1a3e20b345dde24ba54f5b31fb58d1facf339ee24cadfb511b6ea6d
6
+ metadata.gz: cc71e1a0b20353a715308e50167f9e3424260ca35904beb9aad2f457ec82e15131b0c762edd3afef96dd44181b93e88e1ed5783e94262ff8ec182608dfd5a41f
7
+ data.tar.gz: 72af82dd959521f7abc12761d5f68383c3da8616bcc7ef480f1ead2f5aa9946943dedbe11e002b52bd320636fc0d096ac8a3c37e1ef7d1acd5dc957d5067fe05
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).
data/Rakefile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "bundler/setup"
2
4
 
3
5
  require "bundler/gem_tasks"
@@ -1,19 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "active_support/concern"
4
+
1
5
  module Feishu
2
- class << self
6
+ extend ActiveSupport::Concern
7
+
8
+ module Connector
3
9
  # 定义常用的 URL
4
- AUTH_URL = "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal/"
5
- USER_INFO = "https://open.feishu.cn/open-apis/contact/v1/user/batch_get"
6
- GROUP_LIST = "https://open.feishu.cn/open-apis/chat/v4/list"
7
- GROUP_INFO = "https://open.feishu.cn/open-apis/chat/v4/info"
8
- SEND_TEXT = "https://open.feishu.cn/open-apis/message/v4/send/"
9
- IMAGE_URL = "https://open.feishu.cn/open-apis/im/v1/images"
10
+ AUTH_URL = "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal"
11
+ USER_ID = "https://open.feishu.cn/open-apis/user/v1/batch_get_id?mobiles="
12
+ CHAT_ID = "https://open.feishu.cn/open-apis/chat/v4/list?page_size=20"
13
+ IMAGE_ID = "https://open.feishu.cn/open-apis/im/v1/images"
10
14
  MESSAGE_URL = "https://open.feishu.cn/open-apis/im/v1/messages"
11
15
 
16
+ GROUP_LIST = "https://open.feishu.cn/open-apis/im/v1/chats"
17
+ GROUP_INFO = "https://open.feishu.cn/open-apis/chat/v4/info"
18
+ SEND_TEXT = "https://open.feishu.cn/open-apis/message/v4/send"
19
+
12
20
  # 获取飞书 TOKEN 并缓存
13
21
  def access_token
14
- Rails.cache.fetch("feishu_token", expires_in: 2.hours) do
15
- res = HTTP.post(AUTH_URL, json: { app_id: Config.app_id, app_secret: Config.app_secret })
16
- # res = HTTP.post(AUTH_URL, json: { app_id: Config.app_id, app_secret: Config.app_secret })
22
+ Rails.cache.fetch("feishu_token", expires_in: 30.minutes) do
23
+ # res = HTTP.post(AUTH_URL, json: { app_id: app_id, app_secret: app_secret })
24
+ res = HTTP.post(AUTH_URL, json: { app_id: Feishu.app_id, app_secret: Feishu.app_secret })
17
25
  JSON.parse(res.body.readpartial)["tenant_access_token"]
18
26
  end
19
27
  end
@@ -23,52 +31,62 @@ module Feishu
23
31
  HTTP.headers(Authorization: "Bearer #{access_token}")
24
32
  end
25
33
 
26
- def batch_user_info(open_ids)
27
- res = request.get(USER_INFO, params: { open_ids: open_ids })
28
- users = JSON.parse(res.body.readpartial)
29
-
30
- users["data"]
31
- end
32
-
33
- # 获取机器人所在的群列表
34
- def group_list(page_size = 200, page = nil)
34
+ # 根据手机号码查询用户的 USER_ID
35
+ def user_id(mobile)
36
+ url = "#{USER_ID}#{mobile}"
35
37
  # 请求后端
36
- res = request.get(GROUP_LIST, params: { page_size: page_size, page_token: page })
38
+ res = request.get(url)
37
39
  # 序列化
38
- group_content = JSON.parse(res.body.readpartial)
40
+ ret = JSON.parse(res.body.readpartial)
39
41
 
40
- group_content["data"]
42
+ # 返回数据
43
+ ret["data"]["mobile_users"].try(:[], mobile).try(:[], 0).try(:[], "user_id")
41
44
  end
42
45
 
43
- # 获取群信息
44
- def group_info(chat_id)
46
+ # 获取群组的 chat_id
47
+ def chat_id(name)
45
48
  # 请求后端
46
- res = request.get(GROUP_INFO, params: { chat_id: chat_id })
49
+ res = request.get(CHAT_ID)
47
50
  # 序列化
48
- group_users_content = JSON.parse(res.body.readpartial)
51
+ ret = JSON.parse(res.body.readpartial)
49
52
 
50
- group_users_content["data"]["members"]
53
+ # 返回数据
54
+ ret["data"]["groups"].select { |i| i["name"] == name }.try(:[], 0).try(:[], "chat_id")
51
55
  end
52
56
 
53
- # 获取群成员信息
54
- # def member_list(chat_id)
55
- # res = request.get("https://open.feishu.cn/open-apis/chat/v4/members", :params => {:chat_id=> chat_id})
56
- # group_users_content = JSON.parse(res.body.readpartial)
57
-
58
- # member_ids = group_users_content["data"]
59
- # end
60
-
57
+ # 上传图片到飞书后台
61
58
  def upload_image(image_path)
62
59
  # 读取图片
63
60
  data = HTTP::FormData::File.new image_path
64
61
 
65
62
  # 请求后端
66
- res = request.post(IMAGE_URL, form: { image_type: "message", image: data })
63
+ res = request.post(IMAGE_ID, form: { image_type: "message", image: data })
67
64
  ret = JSON.parse res.body.readpartial
65
+
68
66
  # 返回上传后的序列号
69
67
  ret["data"]["image_key"]
70
68
  end
71
69
 
70
+ # 获取机器人所在的群列表
71
+ def group_list(page_size = 20, page = nil)
72
+ # 请求后端
73
+ res = request.get(GROUP_LIST, params: { page_size: page_size, page_token: page })
74
+ # 序列化
75
+ ret = JSON.parse(res.body.readpartial)
76
+ # 返回数据
77
+ ret["data"]
78
+ end
79
+
80
+ # 获取群信息
81
+ def group_members(chat_id)
82
+ # 请求后端
83
+ res = request.get(GROUP_INFO, params: { chat_id: chat_id })
84
+ # 序列化
85
+ ret = JSON.parse(res.body.readpartial)
86
+ # 返回数据
87
+ ret["data"]["members"]
88
+ end
89
+
72
90
  # 发送文本消息
73
91
  def send_text(open_id, text)
74
92
  # 请求后端
@@ -78,47 +96,55 @@ module Feishu
78
96
  end
79
97
 
80
98
  # 使用推荐的消息接口
81
- def send_message(receive_type, receive_id, msg_type, content)
99
+ def send_message(receive_type = "chat_id", receive_id, msg_type, content)
82
100
  # 请求后端
83
101
  res = request.post(MESSAGE_URL, params: { receive_id_type: receive_type }, json: { receive_id: receive_id, msg_type: msg_type, content: content })
84
102
  # 序列化
85
103
  JSON.parse(res.body.readpartial)
86
104
  end
87
105
 
88
- # def send_alert(chat_id)
89
- # data = {
90
- # "chat_id": chat_id,
91
- # "msg_type": "post",
92
- # "content": {
93
- # "post": {
94
- # "zh_cn": {
95
- # "title": title,
96
- # "content": [
97
- # [
98
- # {
99
- # "tag": "text",
100
- # "un_escape": True,
101
- # "text": content
102
- # },
103
- # {
104
- # "tag": "at",
105
- # "user_id": self.user_id
106
- #
107
- # },
108
- # ],
109
- # [
110
- # {
111
- # "tag": "img",
112
- # "image_key": self.image_key,
113
- # "width": 1000,
114
- # "height": 600
115
- # }
116
- # ]
117
- # ]
118
- # }
119
- # }
120
- # }
121
- # }
122
- # end
106
+ # 向特定群组发生消息
107
+ def send_alert(chat_id, title, content, image_path)
108
+ data = {
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
+ }
135
+ ]
136
+ ]
137
+ }
138
+ }
139
+ }
140
+ }
141
+ # 请求后端
142
+ res = request.post(SEND_TEXT, json: data)
143
+
144
+ # 序列化
145
+ JSON.parse(res.body.readpartial).to_query
146
+
147
+ alias_method :feishu_alert, :send_alert
148
+ end
123
149
  end
124
150
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Feishu
2
- VERSION = "0.1.2"
4
+ VERSION = "0.1.5"
3
5
  end
data/lib/feishu-rails.rb CHANGED
@@ -1,11 +1,14 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "feishu/version"
2
- require "feishu/config"
3
4
  require "feishu/connector"
4
5
 
5
6
  module Feishu
6
7
  class << self
7
- def configure(&block)
8
- Config.configure(&block)
8
+ attr_accessor :app_id, :app_secret, :encrypt_key
9
+
10
+ def config
11
+ yield self
9
12
  end
10
13
  end
11
14
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  # desc "Explaining what the task does"
2
3
  # task :feishu do
3
4
  # # Task goes here
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.2
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-26 00:00:00.000000000 Z
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
data/lib/feishu/config.rb DELETED
@@ -1,11 +0,0 @@
1
- module Feishu
2
- class Config
3
- class << self
4
- attr_accessor :app_id, :app_secret, :encrypt_key
5
-
6
- def configure
7
- yield self
8
- end
9
- end
10
- end
11
- end