microsoft_teams_incoming_webhook_ruby 0.1.0 → 1.0.0

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: d0c571083b61043cc97cf99f320f91c54fa2bc23724553d3eb4cc862573fcbd7
4
- data.tar.gz: c54e9204da1e10d72a5ca2c8542d3aa612544af37c2f6c1bc3d3c03f1d7ac7de
3
+ metadata.gz: 39b4271906654ad2de7ff8ec2498b3aff1fd06254d2907cf2c7057ce56953b2c
4
+ data.tar.gz: f0aafd0aa31ef6f89e9d757754006bd02a96eab0771cfe79469df497b8fb4558
5
5
  SHA512:
6
- metadata.gz: 5d837c4e2ecc294a05666d620be29de5df21a96a6ff6ad444e0f6df7ba5619a138f1ed4aec96cdc962cf98d099d82f3d92fa7b5e7bed4befa7c1efb8831af860
7
- data.tar.gz: 5f396da0271d571114229429a8c05f9adeb68b52c9b7238b2e467f2ee9b0880a179b877019397cd67ea94888e717b76c5dc8f89730ea094ee78e6852cfbbd10f
6
+ metadata.gz: 9378f2e20942e2b655e11f3d7f0fb185f20f21086e2ddb4a593824bdd308dbfb4286107965f1b10fc9e6507ab81bfd632be8d9d2a0541e141610f0798b377d6e
7
+ data.tar.gz: 6560b0e12bcd0787255fc63351cecc2e71700caa4d30665426f1b853415c7a05a7736e8b56fb96d47c4667311084c289c596b141c622ce38e7bfeacd87451be4
@@ -1,7 +1,6 @@
1
1
  name: Publish to Rubygems
2
2
 
3
3
  on:
4
- workflow_dispatch:
5
4
  release:
6
5
  types: [created]
7
6
 
data/.gitignore CHANGED
@@ -7,4 +7,6 @@
7
7
  /spec/reports/
8
8
  /tmp/
9
9
  .rspec_status
10
- Gemfile.lock
10
+ /Gemfile.lock
11
+ *.gem
12
+ *.log
data/README.md CHANGED
@@ -41,12 +41,17 @@ The first step before using this gem is to configure the connector inside your T
41
41
 
42
42
  For this purpose, please check the official documentation from Microsoft. It's listed below some useful links:
43
43
 
44
- - https://docs.microsoft.com/en-us/microsoftteams/platform/webhooks-and-connectors/how-to/add-incoming-webhook#create-incoming-webhook-1
44
+ - https://docs.microsoft.com/en-us/microsoftteams/platform/webhooks-and-connectors/how-to/add-incoming-webhook
45
+ - https://techcommunity.microsoft.com/t5/microsoft-365-pnp-blog/how-to-configure-and-use-incoming-webhooks-in-microsoft-teams/ba-p/2051118
45
46
  - https://www.youtube.com/watch?v=amvh4rzTCS0
46
47
 
47
- ### 'Hello World' message sending, for testing
48
+ After the configuration, keep your generated Incoming Webhook URL in a secret and secure way.
48
49
 
49
- Once you have Incoming Webhook configured in Teams channels, you can send a sample `Hello World` message (for testing) with such code like this:
50
+ You will use it (the URL) in next sections of README.
51
+
52
+ ### Hello World message sending
53
+
54
+ Once you have configured Incoming Webhook inside your Teams channels, you can send a very simple `Hello World` message:
50
55
 
51
56
  ```ruby
52
57
  require 'microsoft_teams_incoming_webhook_ruby'
@@ -59,83 +64,324 @@ end
59
64
  message.send
60
65
  ```
61
66
 
62
- Note that there are 2 keys that is the minimum required to define a valid message:
67
+ Note that there are 2 keys that is the minimum required to define a valid message for Teams:
63
68
  - `url`: The URL of Incoming Webhook connector, generated via Microsoft Teams
64
69
  - `text`: The text of your message
65
70
 
66
- There are many other possible keys to be sent to Microsoft Incoming Webhook API. But pay attention to always send at least this 2 keys.
71
+ There are many other possible keys to be sent to Microsoft Incoming Webhook API.
72
+ But pay attention to always send **at least** the 2 keys.
73
+
74
+ ### Gem public interface
75
+
76
+ The `MicrosoftTeamsIncomingWebhookRuby::Message` class has 3 main methods:
77
+
78
+ - `new`: Initialization of object. You need to pass a block as parameter, containing the message structure. This structure will be converted automatically to JSON and be sent to Microsoft Incoming Webhook API.
79
+ - `builder`: Message builder object, that allows add/redefine/remove fields arbitrarily.
80
+ - `send`: Invocation of Incoming Webhook API, using HTTPS.
81
+
82
+ ### Message structure
83
+
84
+ The Microsoft Incoming Webhook API allows us to send a variety of fields, that will result in diferents cards displayed in Teams channels.
85
+
86
+ Because of this, the gem will not enforce any schema in message structure. The only required parameters are `url` and `text`. Any other options will be accepted, considering that Microsoft Incoming Webhook API accepts it.
67
87
 
68
88
  ### Configuration of message structure lately of initialization
69
89
 
70
- ### Error handling
90
+ The message structure and its fields can be defined in two moments:
91
+
92
+ - Initialization of `MicrosoftTeamsIncomingWebhookRuby::Message` object
93
+ - After object initialization, but before `send` method call
94
+
95
+ 🚨 You can add/replace/remove any fields arbitrarily, but keeping at least the minimum required fields (`url` and `text`). Otherwise, an error will be generated when invoke `send` method.
96
+
97
+ Below there are some examples of this manipulation:
98
+
99
+ - Initialization of attributes in `MicrosoftTeamsIncomingWebhookRuby::Message` object
71
100
 
72
- You can build the message with any supported [card fields](https://docs.microsoft.com/en-us/outlook/actionable-messages/message-card-reference#card-fields).
73
- This example is taken directly from [Microsoft Docs](https://docs.microsoft.com/en-us/outlook/actionable-messages/send-via-connectors)
74
101
  ```ruby
75
- require "ms_teams"
102
+ require 'microsoft_teams_incoming_webhook_ruby'
76
103
 
77
- message = MsTeams::Message.new do |m|
78
- m.url = "https://outlook.office.com/...."
79
- m.themeColor = "0072C6"
80
- m.title = "Visit the Outlook Dev Portal"
81
- m.text = "Click **Learn More** to learn more about Actionable Messages!"
82
- m.potentialAction = [
83
- {
84
- "@type": "ActionCard",
85
- "name": "Send Feedback",
86
- "inputs": [{
87
- "@type": "TextInput",
88
- "id": "feedback",
89
- "isMultiline": true,
90
- "title": "Let us know what you think about Actionable Messages"
91
- }],
92
- "actions": [{
93
- "@type": "HttpPOST",
94
- "name": "Send Feedback",
95
- "isPrimary": true,
96
- "target": "http://..."
97
- }]
98
- },
99
- {
100
- "@type": "OpenUri",
101
- "name": "Learn More",
102
- "targets": [
103
- { "os": "default", "uri": "https://docs.microsoft.com/outlook/actionable-messages" }
104
- ]
105
- }
106
- ]
104
+ message = MicrosoftTeamsIncomingWebhookRuby::Message.new do |m|
105
+ m.url = 'YOUR INCOMING WEBHOOK URL HERE'
106
+ m.text = 'Hello World!'
107
+
108
+ m.my_arbitrary_field = 'My value'
109
+ m.my_another_arbitrary_field = { my: 'value' }
107
110
  end
108
111
 
109
- # You can edit any field after the message has been built by modifying the `builder` object
110
- message.builder.text = "Something new"
112
+ message.send
113
+ ```
114
+
115
+ - Adding of attribute after object initialization, but before `send` method call
116
+
117
+ ```ruby
118
+ require 'microsoft_teams_incoming_webhook_ruby'
119
+
120
+ message = MicrosoftTeamsIncomingWebhookRuby::Message.new do |m|
121
+ m.url = 'YOUR INCOMING WEBHOOK URL HERE'
122
+ m.text = 'Hello World!'
123
+ end
124
+
125
+ message.builder.my_arbitrary_field = 'My value'
126
+ message.builder.my_another_arbitrary_field = { my: 'value' }
111
127
 
112
128
  message.send
113
129
  ```
114
130
 
115
- Error Handling:
131
+ - Removing of attributes after object initialization, but before `send` method call
116
132
 
117
- A non-2xx response code will raise a `MsTeams::Message::FailedRequest` error
133
+ ```ruby
134
+ require 'microsoft_teams_incoming_webhook_ruby'
135
+
136
+ message = MicrosoftTeamsIncomingWebhookRuby::Message.new do |m|
137
+ m.url = 'YOUR INCOMING WEBHOOK URL HERE'
138
+ m.text = 'Hello World!'
139
+
140
+ m.my_custom_field = 'My custom value'
141
+ end
142
+
143
+ message.builder.delete_field :my_custom_field
144
+
145
+ message.send
146
+ ```
147
+
148
+ - Redefing of attributes after object initialization, but before `send` method call
149
+
150
+ ```ruby
151
+ require 'microsoft_teams_incoming_webhook_ruby'
152
+
153
+ message = MicrosoftTeamsIncomingWebhookRuby::Message.new do |m|
154
+ m.url = 'YOUR INCOMING WEBHOOK URL HERE'
155
+ m.text = 'Hello World!'
156
+
157
+ m.my_custom_field = 'My custom value'
158
+ end
159
+
160
+ message.builder.my_custom_field = 'Updated value'
161
+
162
+ message.send
163
+ ```
164
+
165
+ In case of keys that starts with **@**, is necessary to use brackets notation:
166
+
167
+ ```ruby
168
+ require 'microsoft_teams_incoming_webhook_ruby'
169
+
170
+ message = MicrosoftTeamsIncomingWebhookRuby::Message.new do |m|
171
+ m.url = 'YOUR INCOMING WEBHOOK URL HERE'
172
+ m.text = 'Hello World!'
173
+ m['@my_field'] = 'Lorem ipsum'
174
+ end
175
+
176
+ message.builder['@my_another_new_field'] = 'Ipsum valorium'
177
+
178
+ message.send
179
+ ```
180
+
181
+ ### Error handling
182
+
183
+ If the builder object turn itself invalid before invocation of `send` method, the gem will raise a `MicrosoftTeamsIncomingWebhookRuby::Message::Error::InvalidMessage` exception:
118
184
 
119
185
  ```ruby
120
- # ...
186
+ require 'microsoft_teams_incoming_webhook_ruby'
187
+
188
+ message = MicrosoftTeamsIncomingWebhookRuby::Message.new do |m|
189
+ m.url = 'YOUR INCOMING WEBHOOK URL HERE'
190
+ m.text = 'Hello World!'
191
+ end
192
+
193
+ message.delete_field :url
194
+
121
195
  begin
122
- message.send
123
- rescue MsTeams::Message::FailedRequest => e
124
- # Do stuff
196
+ message.send
197
+ rescue MicrosoftTeamsIncomingWebhookRuby::Message::Error::InvalidMessage
198
+ puts 'Your message structure is invalid!'
125
199
  end
126
200
  ```
127
201
 
202
+ ```ruby
203
+ require 'microsoft_teams_incoming_webhook_ruby'
204
+
205
+ begin
206
+ message = MicrosoftTeamsIncomingWebhookRuby::Message.new do |m|
207
+ m.my_only_one_field = 'Lorem ipsum'
208
+ end
209
+ rescue MicrosoftTeamsIncomingWebhookRuby::Message::Error::InvalidMessage
210
+ puts 'Your message structure is invalid'
211
+ end
212
+ ```
128
213
 
129
- Building an invalid message object will immediately raise an error
214
+ If a non-successful response code be returned by API (1xx, 4xx or 5xx), the gem will raise a `MicrosoftTeamsIncomingWebhookRuby::Message::Error::FailedRequest` exception:
130
215
 
131
216
  ```ruby
132
- message = MsTeams::Message.new do |m|
133
- # no url set
134
- m.text = "Hello World"
217
+ require 'microsoft_teams_incoming_webhook_ruby'
218
+
219
+ message = MicrosoftTeamsIncomingWebhookRuby::Message.new do |m|
220
+ m.url = 'YOUR INCOMING WEBHOOK URL HERE'
221
+ m.text = 'My message'
222
+ end
223
+
224
+ begin
225
+ message.send
226
+ rescue MicrosoftTeamsIncomingWebhookRuby::Message::Error::FailedRequest
227
+ puts 'Microsoft API is down, broken, or your network failed!'
228
+ end
229
+ ```
230
+
231
+ ## Examples
232
+
233
+ You can build and send messages with any supported card fields provided by Microsoft:
234
+
235
+ - https://docs.microsoft.com/en-us/microsoftteams/platform/webhooks-and-connectors/how-to/connectors-using
236
+ - https://adaptivecards.io/samples
237
+ - https://docs.microsoft.com/en-us/outlook/actionable-messages/message-card-reference
238
+ - https://amdesigner.azurewebsites.net
239
+ - https://messagecardplayground.azurewebsites.net
240
+ - https://docs.microsoft.com/en-us/outlook/actionable-messages/adaptive-card
241
+ - https://docs.microsoft.com/en-us/microsoftteams/platform/webhooks-and-connectors/what-are-webhooks-and-connectors
242
+
243
+ We will provide below some ready-to-go examples to be used, based on API described in links above.
244
+
245
+ ### Minimal
246
+
247
+ ```ruby
248
+ require 'microsoft_teams_incoming_webhook_ruby'
249
+
250
+ webhook_url = 'YOUR INCOMING WEBHOOK URL HERE'
251
+
252
+ message = MicrosoftTeamsIncomingWebhookRuby::Message.new do |m|
253
+ m.url = webhook_url
254
+ m.text = 'Minimal message!'
255
+ end
256
+
257
+ message.send
258
+ ```
259
+
260
+ ### Theme color
261
+
262
+ ```ruby
263
+ require 'microsoft_teams_incoming_webhook_ruby'
264
+
265
+ webhook_url = 'YOUR INCOMING WEBHOOK URL HERE'
266
+
267
+ message = MicrosoftTeamsIncomingWebhookRuby::Message.new do |m|
268
+ m.url = webhook_url
269
+ m.text = 'Message with theme color!'
270
+ m.themeColor = 'FF0000'
271
+ end
272
+
273
+ message.send
274
+ ```
275
+
276
+ ### Title
277
+
278
+ ```ruby
279
+ require 'microsoft_teams_incoming_webhook_ruby'
280
+
281
+ webhook_url = 'YOUR INCOMING WEBHOOK URL HERE'
282
+
283
+ message = MicrosoftTeamsIncomingWebhookRuby::Message.new do |m|
284
+ m.url = webhook_url
285
+ m.text = 'Message with title!'
286
+ m.title = 'FF0000'
287
+ end
288
+
289
+ message.send
290
+ ```
291
+
292
+ ### Summary
293
+
294
+ ```ruby
295
+ require 'microsoft_teams_incoming_webhook_ruby'
296
+
297
+ webhook_url = 'YOUR INCOMING WEBHOOK URL HERE'
298
+
299
+ message = MicrosoftTeamsIncomingWebhookRuby::Message.new do |m|
300
+ m.url = webhook_url
301
+ m.text = 'Message with summary!'
302
+ m.summary = 'My summary'
303
+ end
304
+
305
+ message.send
306
+ ```
307
+
308
+ ### Potential action
309
+
310
+ ```ruby
311
+ require 'microsoft_teams_incoming_webhook_ruby'
312
+
313
+ webhook_url = 'YOUR INCOMING WEBHOOK URL HERE'
314
+
315
+ message = MicrosoftTeamsIncomingWebhookRuby::Message.new do |m|
316
+ m.url = webhook_url
317
+ m.text = 'Message with potential action!'
318
+ m.potentialAction = [
319
+ {
320
+ '@type': 'ActionCard',
321
+ 'name': 'Answer',
322
+ 'inputs': [
323
+ {
324
+ '@type': 'TextInput',
325
+ 'id': 'title',
326
+ 'isMultiline': true,
327
+ 'title': 'Your text here'
328
+ }
329
+ ],
330
+ 'actions': [
331
+ {
332
+ '@type': 'HttpPOST',
333
+ 'name': 'Send my answer',
334
+ 'isPrimary': true,
335
+ 'target': 'https://example.com/example'
336
+ }
337
+ ]
338
+ },
339
+ {
340
+ '@type': 'HttpPOST',
341
+ 'name': 'Make another action',
342
+ 'target': 'https://example.com/example2'
343
+ },
344
+ {
345
+ '@type': 'OpenUri',
346
+ 'name': 'Open a URL',
347
+ 'targets': [
348
+ {
349
+ 'os': 'default',
350
+ 'uri': 'https://github.com/pedrofurtado/microsoft_teams_incoming_webhook_ruby'
351
+ }
352
+ ]
353
+ }
354
+ ]
135
355
  end
136
356
 
137
- > ArgumentError (`url` cannot be nil. Must be set during initialization)
357
+ message.send
358
+ ```
359
+
360
+ ### Sections
138
361
 
362
+ ```ruby
363
+ require 'microsoft_teams_incoming_webhook_ruby'
364
+
365
+ webhook_url = 'YOUR INCOMING WEBHOOK URL HERE'
366
+
367
+ message = MicrosoftTeamsIncomingWebhookRuby::Message.new do |m|
368
+ m.url = webhook_url
369
+ m.text = 'Message with sections!'
370
+ m.sections = [
371
+ {
372
+ 'text': 'Lorem ipsum vastium',
373
+ 'activityTitle': 'John Smith',
374
+ 'activitySubtitle': '01/01/1990, 11:45AM',
375
+ 'activityImage': 'https://connectorsdemo.azurewebsites.net/images/MSC12_Oscar_002.jpg',
376
+ 'facts': [
377
+ { 'name': 'Repository:', 'value': 'my-repo' },
378
+ { 'name': 'Issue #:', 'value': '123456789' }
379
+ ]
380
+ }
381
+ ]
382
+ end
383
+
384
+ message.send
139
385
  ```
140
386
 
141
387
  ## Execute tests/specs
@@ -153,13 +399,9 @@ docker build -t microsoft_teams_incoming_webhook_ruby_specs .
153
399
  docker run -v $(pwd):/app/ -it microsoft_teams_incoming_webhook_ruby_specs
154
400
  ```
155
401
 
156
- ## Demo
157
-
158
- ...
159
-
160
- ## Another similar gems for reference
402
+ ## Similar gems for reference
161
403
 
162
- There are similar open source libraries that shares the same purpose of this gem, such as:
404
+ There are similar and great open source libraries that shares the same purpose of this gem, such as:
163
405
 
164
406
  - https://github.com/toririn/teams_incoming_clients
165
407
  - https://github.com/shirts/microsoft-teams-ruby
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MicrosoftTeamsIncomingWebhookRuby
4
- VERSION = '0.1.0'
4
+ VERSION = '1.0.0'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: microsoft_teams_incoming_webhook_ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pedro Furtado