stealth-facebook 0.9.2 → 0.10.0

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
- SHA1:
3
- metadata.gz: 623bfb431fd35b3322b7e80a5320ca5a09765a00
4
- data.tar.gz: 7c4baa89550a9122952aaa5809c2d7e97d9ec6b7
2
+ SHA256:
3
+ metadata.gz: 4afb61139e924f882b91bab086c46185a1271263a98b6a80e926f70e42ae6fa9
4
+ data.tar.gz: 0d7620024cbca82662fa974b8084099addd45cf98e1d6b5e16bad03d32ad36cb
5
5
  SHA512:
6
- metadata.gz: b7042402fa0c4c9ecb3b50e3038f63fba4fb0d60b1eaf8c0ab3444d227900eea056c457165248708f34a90f6b2de0e30617afc9e8e518b6f468bd6c8c46fd143
7
- data.tar.gz: d26b7a101e41547024a12c536126885411374e8dda85884c2226fe57e053a6a3f5a184ecdda4e00ba763018e9f76835f8b0cc5ca4298da625fe9cda030bf7b36
6
+ metadata.gz: 94b17189ecda693601b2cd242d795fcdfe7e3e3fd5084f7e62182328453cfadf9b9e4d7e35d096d0cb49b250714a3a33efd200a6de410cb1d6136e9de24a8a5d
7
+ data.tar.gz: 92c32d8c406546acb10199a0a77debaaf8085c6e2714156b0ee5e27d9f04a27812cd1eaab056c48eb2c4b00ea71dc96bd1af891fe8886363eb7fa2c76042a6f2
data/README.md CHANGED
@@ -1 +1,368 @@
1
1
  # Stealth Facebook
2
+
3
+ This integration adds support for Facebook bots within Stealth.
4
+
5
+ ## Configure Your Facebook Page
6
+
7
+ Add instructions
8
+
9
+ ## Configure The Integration
10
+
11
+ ```yaml
12
+ default: &default
13
+ facebook:
14
+ verify_token: <%= ENV['FACEBOOK_VERIFY_TOKEN'] %>
15
+ page_access_token: <%= ENV['FACEBOOK_ACCESS_TOKEN'] %>
16
+ setup:
17
+ greeting: # Greetings are broken up by locale
18
+ - locale: default
19
+ text: "Welcome to my Facebook Bot."
20
+ get_started:
21
+ payload: new_user
22
+ persistent_menu:
23
+ - locale: default
24
+ composer_input_disabled: false
25
+ call_to_actions:
26
+ - type: payload
27
+ text: Some Button
28
+ payload: some_button
29
+
30
+ production:
31
+ <<: *default
32
+
33
+ development:
34
+ facebook:
35
+ verify_token: <%= ENV['FACEBOOK_VERIFY_TOKEN'] %>
36
+ page_access_token: <%= ENV['FACEBOOK_ACCESS_TOKEN'] %>
37
+ setup:
38
+ greeting: # Greetings are broken up by locale
39
+ - locale: default
40
+ text: "Welcome to my Facebook Bot."
41
+ get_started:
42
+ payload: new_user
43
+ persistent_menu:
44
+ - locale: default
45
+ composer_input_disabled: false
46
+ call_to_actions:
47
+ - type: payload
48
+ text: Some Button
49
+ payload: some_button
50
+ - type: nested
51
+ text: Developer
52
+ buttons:
53
+ - type: payload
54
+ text: Restart
55
+ payload: developer_restart
56
+
57
+ test:
58
+ <<: *default
59
+ ```
60
+
61
+ As with all Stealth integrations, integrations can be specified by environment. You'll want to replace `FACEBOOK_VERIFY_TOKEN` and `FACEBOOK_ACCESS_TOKEN` with your respective keys from your Facebook page.
62
+
63
+ These are the supported setup options:
64
+
65
+ ### greeting
66
+ This is the message a user will see via Messenger before they have ever sent your bot a message.
67
+
68
+ ### get_started
69
+ When the user presses the `Get Started` button in Messenger, the `payload` specified here is the payload that will be sent to your bot.
70
+
71
+ ### persistent_menu
72
+ These are the items that appear in the Facebook Messenger drawer. You can specify menu items for each locale individually or use `default` to make the menu apply to all locales.
73
+
74
+ The `composer_input_disabled` disables the keyboard input. This is helpful if you anticipate all user replies will come from suggested replies. It defaults to `false` which means the keyboard input is enabled.
75
+
76
+ The `call_to_actions` list defines the buttons. In the above example, the production environment has a single button defined with the label `Some Button`. It's type is set to `payload`. The `payload` value specifies the payload that will be sent to the bot when the button is pressed.
77
+
78
+ In the `development` environment, there is a `Developer` sub-menu that contains a single button labeled `Restart`. This just showcases the ability to have sub-menus within the drawer. It's a common practice to introduce a `developer_restart` payload button in development so you can easily restart the bot.
79
+
80
+ In addition to the `payload` type, the persistent menu supports `url` and `call` type buttons.
81
+
82
+ ### Uploading the Persistent Menu
83
+
84
+ Each time you make a change to the persistent menu, you will have to upload the change to Facebook. This integration provides a command line task to automate this:
85
+
86
+ ```
87
+ stealth setup facebook
88
+ ```
89
+
90
+ ## Replies
91
+
92
+ Here are the supported replies for the Facebook integration:
93
+
94
+ ### text
95
+
96
+ These are standard text replies. It can sent like:
97
+
98
+ ```yaml
99
+ - reply_type: text
100
+ text: Hello World!
101
+ ```
102
+
103
+ Text replies can also include suggestions, which will be rendered as quick replies:
104
+
105
+ ```yaml
106
+ - reply_type: text
107
+ text: What is your favorite color?
108
+ suggestions:
109
+ - text: Blue
110
+ - text: Red
111
+ ```
112
+
113
+ Although not as common, text replies can also include buttons:
114
+
115
+ ```yaml
116
+ - reply_type: text
117
+ text: Would you like to give us a call?
118
+ buttons:
119
+ - type: call
120
+ phone_number: "+15552991212"
121
+ text: 'Yes'
122
+ - type: payload
123
+ text: 'No'
124
+ payload: 'No'
125
+ ```
126
+
127
+ ### suggestions
128
+
129
+ Though suggestions are not a reply type on their own, they are frequently used to optimize the accuracy and speed of your bot. In the `text` reply type above, we used simple labels for our suggestions. Facebook supports a few special types of quick replies, however.
130
+
131
+ #### Location
132
+
133
+ You can ask a user for their location:
134
+
135
+ ```yaml
136
+ - reply_type: text
137
+ text: "Where are you located?"
138
+ suggestions:
139
+ - type: location
140
+ ```
141
+
142
+ If the user chooses to share their location, the `lat` and `lng` will be available via `current_message.location`:
143
+
144
+ ```ruby
145
+ current_message.location[:lat]
146
+ current_message.location[:lng]
147
+ ```
148
+
149
+ #### Email
150
+
151
+ As of Facebook Messenger Platform 2.3, Facebook now supports a standard way to ask for a user's email:
152
+
153
+ ```yaml
154
+ - reply_type: text
155
+ text: "What is your email address?"
156
+ suggestions:
157
+ - type: email
158
+ ```
159
+
160
+ The email address the user sends back will be available as the string in `current_message.payload`
161
+
162
+ #### Phone
163
+
164
+ As of Facebook Messenger Platform 2.3, Facebook now supports a standard way to ask for a user's phone number:
165
+
166
+ ```yaml
167
+ - reply_type: text
168
+ text: "What is your phone number?"
169
+ suggestions:
170
+ - type: phone
171
+ ```
172
+
173
+ The phone number the user sends back will be available as the string in `current_message.payload`
174
+
175
+ #### Images
176
+
177
+ While images are not a special quick reply type, you can include and `image_url` for a quick reply as way of adding an icon to a quick reply button:
178
+
179
+ ```yaml
180
+ - reply_type: text
181
+ text: "What is your favorite color?"
182
+ suggestions:
183
+ - text: Red
184
+ image_url: "http://example.com/img/red.png"
185
+ - text: Blue
186
+ image_url: "http://example.com/img/blue.png"
187
+ ```
188
+
189
+ More info [here](https://developers.facebook.com/docs/messenger-platform/send-messages/quick-replies).
190
+
191
+ ### buttons
192
+
193
+ As with `suggestions`, `buttons` are not a reply type of their own but are used to make your bot more efficient. Facebook supports a few button types and these are the ones currently supported by this integration:
194
+
195
+ #### payload
196
+
197
+ This is the most common button type. When a user presses a button that is `payload` type, that payload string will be sent to your bot. For example:
198
+
199
+ ```yaml
200
+ - reply_type: text
201
+ text: Please press the button below
202
+ buttons:
203
+ - type: payload
204
+ text: 'Press me!'
205
+ payload: 'button pressed'
206
+
207
+ ```
208
+
209
+ When a user presses the button labeled "Press me!", the payload `button pressed` will be accessible in bot via `current_message.payload`.
210
+
211
+ #### url
212
+
213
+ The `url` button is useful when sharing a link to a website. By default, it will open up within Facebook Messenger.
214
+
215
+ ```yaml
216
+ - reply_type: text
217
+ text: Find out more via our website
218
+ buttons:
219
+ - type: url
220
+ text: 'Visit website'
221
+ url: 'https://example.org'
222
+
223
+ ```
224
+
225
+ You can also specify the height of the webview window that opens up in Messenger via: `webview_height`. You can choose between `compact`, `tall`, and `full`.
226
+
227
+ More info [here](https://developers.facebook.com/docs/messenger-platform/webview).
228
+
229
+ #### call
230
+
231
+ The `call` button type will prompt the user to dial the specified number. The number will be pre-filled in, but the user will still have to confirm by confirming via the modal that is shown. To create a `call` button:
232
+
233
+ ```yaml
234
+ - reply_type: text
235
+ text: Give us a ring!
236
+ buttons:
237
+ - type: call
238
+ text: 'Call'
239
+ phone_number: "+15552991212"
240
+
241
+ ```
242
+
243
+ ### Delay
244
+
245
+ Delays are a very important part of bot design. They introduce a pause between text replies to give the user a chance to read each reply. With this integration, in addition to introducing a delay, we will also send a typing indicator to the user to indicate another reply is forthcoming. To insert a delay in your bot:
246
+
247
+ ```yaml
248
+ - reply_type: delay
249
+ duration: 2
250
+ ```
251
+
252
+ This will add a `2` second delay (with typing indicator). The `duration` can be specified as any floating point value, in seconds.
253
+
254
+ ### Cards
255
+
256
+ Facebook distinguishes between a single card and a carousel of cards. This integration does not, however. You can send a single card the same way you would send 10 cards (the current maximum).
257
+
258
+ ```yaml
259
+ - reply_type: cards
260
+ sharable: true
261
+ aspect_ratio: horizontal
262
+ elements:
263
+ - title: My App
264
+ subtitle: Download our app below or visit our website for more info.
265
+ image_url: "https://my-app.com/app-image.png"
266
+ buttons:
267
+ - type: url
268
+ url: "https://my-app.com"
269
+ text: 'View'
270
+ webview_height: 'tall'
271
+ - type: url
272
+ url: "https://itunes.apple.com/us/app/my-app"
273
+ text: 'Download iOS App'
274
+ ```
275
+
276
+ The above is a single card with two buttons. If you want to include more cards, though, you would just need to specify another listing under the `elements` heading.
277
+
278
+ The `sharable` and `aspect_ratio` attributes are optional. When `sharable` is set to `true`, a native share button is shown in Messenger for the message. The `aspect_ratio` attribute specifies the aspect ratio of the main card image (specified by `image_url`). It can be set to `horizontal` or `square` with the default being `horizontal`.
279
+
280
+ More info about Facebook cards [here](https://developers.facebook.com/docs/messenger-platform/send-messages/template/generic).
281
+
282
+ ### List
283
+
284
+ A Facebook list is useful for displaying things like a news feed. You can find more info about Facebook lists [here](https://developers.facebook.com/docs/messenger-platform/send-messages/template/list).
285
+
286
+ To generate a list via Stealth Facebook:
287
+
288
+ ```yaml
289
+ - reply_type: list
290
+ top_element_style: large
291
+ buttons:
292
+ - type: payload
293
+ title: View More
294
+ payload: view_more
295
+ elements:
296
+ - title: Your Daily News Update
297
+ subtitle: The following stories have been curated just for you.
298
+ image_url: "https://news-articles.com/logo.png"
299
+ buttons:
300
+ - type: url
301
+ url: "https://news-articles.com/199"
302
+ text: 'View'
303
+ webview_height: 'tall'
304
+ - title: Breakthrough in AI
305
+ subtitle: Major breakthrough in the AI space.
306
+ image_url: "https://news-articles.com/ai.png"
307
+ default_action:
308
+ - url: "https://news-articles.com/232"
309
+ webview_height: 'tall'
310
+ ```
311
+
312
+ The list itself supports having a single button that will be rendered on the bottom of the list. Each individual list item supports having one button as well. List items should have between 2-4 elements.
313
+
314
+ In addition to the button, a list item can specify a default action. The default action is what will fired when a user taps the list item. A default action can be specified by setting the `default_action` attribute. The `default_action` should be configured as you would a `url` type button.
315
+
316
+ The image of the first item in the list is displayed as a cover photo by default. To disable the cover image, set `top_element_style` to `compact`.
317
+
318
+ ### Images
319
+
320
+ To send an image:
321
+
322
+ ```yaml
323
+ - reply_type: image
324
+ image_url: 'https://example.org/image.png'
325
+ ```
326
+
327
+ The `image_url` should be set to URL where the image has been uploaded.
328
+
329
+ Image replies support buttons and suggestions like text replies.
330
+
331
+ ### Files
332
+
333
+ To send a file:
334
+
335
+ ```yaml
336
+ - reply_type: file
337
+ file_url: 'https://example.org/some.pdf'
338
+ ```
339
+
340
+ The `file_url` should be set to URL where the file has been uploaded.
341
+
342
+ File replies support buttons and suggestions like text replies.
343
+
344
+ ### Video
345
+
346
+ To send a video:
347
+
348
+ ```yaml
349
+ - reply_type: video
350
+ video_url: 'https://example.org/cool_video.mp4'
351
+ ```
352
+
353
+ The `video_url` should be set to URL where the video has been uploaded.
354
+
355
+ Video replies support buttons and suggestions like text replies.
356
+
357
+ ### Audio
358
+
359
+ To send an audio clip:
360
+
361
+ ```yaml
362
+ - reply_type: audio
363
+ audio_url: 'https://example.org/podcast.mp3'
364
+ ```
365
+
366
+ The `audio_url` should be set to URL where the video has been uploaded.
367
+
368
+ Audio replies support buttons and suggestions like text replies.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.9.2
1
+ 0.10.0
@@ -40,7 +40,7 @@ module Stealth
40
40
 
41
41
  uri = URI::HTTPS.build(
42
42
  host: "graph.facebook.com",
43
- path: "/v2.10/#{recipient_id}",
43
+ path: "/v2.12/#{recipient_id}",
44
44
  query: query_hash.to_query
45
45
  )
46
46
 
@@ -356,11 +356,13 @@ module Stealth
356
356
 
357
357
  def generate_suggestions(suggestions:)
358
358
  quick_replies = suggestions.collect do |suggestion|
359
- # If the user selected a location-type button, no other info needed
360
- if suggestion["type"] == 'location'
359
+ case suggestion["type"]
360
+ when 'location'
361
361
  quick_reply = { "content_type" => "location" }
362
-
363
- # Facebook only supports these two types for now
362
+ when 'phone'
363
+ quick_reply = { "content_type" => "user_phone_number" }
364
+ when 'email'
365
+ quick_reply = { "content_type" => "user_email" }
364
366
  else
365
367
  quick_reply = {
366
368
  "content_type" => "text",
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stealth-facebook
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.2
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mauricio Gomes
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-12-04 00:00:00.000000000 Z
11
+ date: 2018-03-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: stealth
@@ -125,7 +125,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
125
125
  version: '0'
126
126
  requirements: []
127
127
  rubyforge_project:
128
- rubygems_version: 2.6.11
128
+ rubygems_version: 2.7.3
129
129
  signing_key:
130
130
  specification_version: 4
131
131
  summary: Stealth Facebook Messenger driver