feishu-rails 0.1.2 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
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