bobot 4.13.1 → 4.14.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 +4 -4
- data/app/controllers/bobot/webhook_controller.rb +9 -6
- data/lib/bobot/commander.rb +11 -8
- data/lib/bobot/event.rb +2 -0
- data/lib/bobot/events/common.rb +10 -2
- data/lib/bobot/events/message_echo.rb +0 -3
- data/lib/bobot/events/take_thread_control.rb +15 -0
- data/lib/bobot/page.rb +22 -1
- data/lib/bobot/version.rb +2 -2
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 312aa2653634d73327d66899611310da2c5c7a0514f2bc84afaba332fc31046c
|
4
|
+
data.tar.gz: fa5a7192eafc0455aafb79cedebe9265dc19d1601a4f4adc826ec70145aec170
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b99c9349bf4c1109903185ee22ee0f4b4836f08b5f740291c3db9617968b6835bd94370bbec1bfdf5256033676aebc58fd3a01dd4c4ccef41f6cd23697a81c41
|
7
|
+
data.tar.gz: 54f1101c0b51195ec3a5fbeca6ef52b951827807609086c498470039571505bee321b970112790938a21be122230b20d8ed2e7a06b0c319f39237228ab74c32f
|
@@ -8,6 +8,8 @@ module Bobot
|
|
8
8
|
some time, check your app's secret token.
|
9
9
|
HEREDOC
|
10
10
|
|
11
|
+
OPEN_SSL_AUTHENTICATION_CODE = OpenSSL::Digest.new('sha1'.freeze)
|
12
|
+
|
11
13
|
def webhook
|
12
14
|
if request.get?
|
13
15
|
verify
|
@@ -44,7 +46,7 @@ module Bobot
|
|
44
46
|
def parsed_body
|
45
47
|
@parsed_body ||= ActiveSupport::JSON.decode(body)
|
46
48
|
rescue ::ActiveSupport::JSON.parse_error
|
47
|
-
raise BadRequestError.new("Error parsing request body format")
|
49
|
+
raise BadRequestError.new("Error parsing request body format".freeze)
|
48
50
|
end
|
49
51
|
|
50
52
|
def valid_signature?
|
@@ -52,7 +54,7 @@ module Bobot
|
|
52
54
|
end
|
53
55
|
|
54
56
|
def generate_hmac(content)
|
55
|
-
OpenSSL::HMAC.hexdigest(
|
57
|
+
OpenSSL::HMAC.hexdigest(self.class::OPEN_SSL_AUTHENTICATION_CODE, Bobot.config.app_secret, content)
|
56
58
|
end
|
57
59
|
|
58
60
|
def signature_for(string)
|
@@ -71,12 +73,10 @@ module Bobot
|
|
71
73
|
signature =~ /\Asha1=([0-9a-z]{40})\z/
|
72
74
|
hub_signature = Regexp.last_match(1)
|
73
75
|
unless hub_signature
|
74
|
-
Rails.logger.error(X_HUB_SIGNATURE_MISSING_WARNING)
|
76
|
+
Rails.logger.error(self.class::X_HUB_SIGNATURE_MISSING_WARNING)
|
75
77
|
raise BadRequestError.new("Error getting integrity signature".freeze)
|
76
78
|
end
|
77
|
-
unless valid_signature?
|
78
|
-
raise BadRequestError.new("Error checking message integrity".freeze)
|
79
|
-
end
|
79
|
+
raise BadRequestError.new("Error checking message integrity".freeze) unless valid_signature?
|
80
80
|
end
|
81
81
|
|
82
82
|
def trigger(events)
|
@@ -84,6 +84,9 @@ module Bobot
|
|
84
84
|
entry['messaging'.freeze].to_a.each do |messaging|
|
85
85
|
Bobot::Commander.receive(messaging)
|
86
86
|
end
|
87
|
+
entry['standby'.freeze].to_a.each do |standby|
|
88
|
+
Bobot::Commander.receive(standby) if standby["message".freeze]
|
89
|
+
end
|
87
90
|
end
|
88
91
|
end
|
89
92
|
end
|
data/lib/bobot/commander.rb
CHANGED
@@ -14,15 +14,20 @@ module Bobot
|
|
14
14
|
message_request
|
15
15
|
policy-enforcement
|
16
16
|
pass_thread_control
|
17
|
+
take_thread_control
|
17
18
|
].freeze
|
18
19
|
|
19
20
|
include Bobot::GraphFacebook
|
20
21
|
|
21
22
|
class << self
|
22
|
-
def deliver(body:, query:)
|
23
|
-
graph_post
|
24
|
-
|
25
|
-
|
23
|
+
def deliver(endpoint: '/me/messages', body:, query:)
|
24
|
+
graph_post(
|
25
|
+
endpoint,
|
26
|
+
body: body,
|
27
|
+
query: {
|
28
|
+
access_token: query.fetch(:access_token),
|
29
|
+
},
|
30
|
+
)
|
26
31
|
end
|
27
32
|
|
28
33
|
def on(event, &block)
|
@@ -35,10 +40,8 @@ module Bobot
|
|
35
40
|
|
36
41
|
def receive(payload)
|
37
42
|
event = Bobot::Event.parse(payload)
|
38
|
-
|
39
|
-
|
43
|
+
event.mark_as_seen if event.page.present? && [Bobot::Event::MessageEcho, Bobot::Event::PassThreadControl, Bobot::Event::TakeThreadControl].none? { |c| event.is_a?(c) }
|
40
44
|
hooks.fetch(Bobot::Event::EVENTS.invert[event.class].to_sym)
|
41
|
-
event.mark_as_seen
|
42
45
|
Bobot::CommanderJob.send(
|
43
46
|
Bobot.config.async ? :perform_later : :perform_now,
|
44
47
|
{ payload: payload },
|
@@ -49,7 +52,7 @@ module Bobot
|
|
49
52
|
|
50
53
|
def trigger(payload)
|
51
54
|
event = Bobot::Event.parse(payload)
|
52
|
-
return
|
55
|
+
return if !event.page.present?
|
53
56
|
|
54
57
|
hook = hooks.fetch(Bobot::Event::EVENTS.invert[event.class].to_sym)
|
55
58
|
hook.call(event)
|
data/lib/bobot/event.rb
CHANGED
@@ -9,6 +9,7 @@ require 'bobot/events/account_linking'
|
|
9
9
|
require 'bobot/events/referral'
|
10
10
|
require 'bobot/events/policy_enforcement'
|
11
11
|
require 'bobot/events/pass_thread_control'
|
12
|
+
require 'bobot/events/take_thread_control'
|
12
13
|
|
13
14
|
module Bobot
|
14
15
|
module Event
|
@@ -23,6 +24,7 @@ module Bobot
|
|
23
24
|
'message_echo' => MessageEcho,
|
24
25
|
'policy-enforcement' => PolicyEnforcement,
|
25
26
|
'pass_thread_control' => PassThreadControl,
|
27
|
+
'take_thread_control' => TakeThreadControl,
|
26
28
|
}.freeze
|
27
29
|
|
28
30
|
def self.parse(payload)
|
data/lib/bobot/events/common.rb
CHANGED
@@ -9,11 +9,11 @@ module Bobot
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def sender
|
12
|
-
@messaging['sender']
|
12
|
+
@messaging[is_a?(Bobot::Event::MessageEcho) ? 'recipient' : 'sender']
|
13
13
|
end
|
14
14
|
|
15
15
|
def recipient
|
16
|
-
@messaging['recipient']
|
16
|
+
@messaging[is_a?(Bobot::Event::MessageEcho) ? 'sender' : 'recipient']
|
17
17
|
end
|
18
18
|
|
19
19
|
# If the user responds to your message, the appropriate event
|
@@ -29,6 +29,14 @@ module Bobot
|
|
29
29
|
Time.zone.at(@messaging['timestamp'] / 1000)
|
30
30
|
end
|
31
31
|
|
32
|
+
def send_take_thread_control(metadata: nil)
|
33
|
+
page.deliver_take_thread_control(to: sender["id"], metadata: metadata)
|
34
|
+
end
|
35
|
+
|
36
|
+
def send_pass_thread_control(target_app_id:, metadata: nil)
|
37
|
+
page.deliver_pass_thread_control(to: sender["id"], metadata: metadata, target_app_id: target_app_id)
|
38
|
+
end
|
39
|
+
|
32
40
|
def sender_action(sender_action:, messaging_options: nil)
|
33
41
|
page.sender_action(sender_action: sender_action, to: sender["id"], messaging_options: messaging_options)
|
34
42
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Bobot
|
2
|
+
module Event
|
3
|
+
class TakeThreadControl
|
4
|
+
include Bobot::Event::Common
|
5
|
+
|
6
|
+
def previous_owner_app_id
|
7
|
+
@messaging['take_thread_control']['previous_owner_app_id ']
|
8
|
+
end
|
9
|
+
|
10
|
+
def metadata
|
11
|
+
@messaging['take_thread_control']['metadata']
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/lib/bobot/page.rb
CHANGED
@@ -34,6 +34,26 @@ module Bobot
|
|
34
34
|
#
|
35
35
|
#####################################
|
36
36
|
|
37
|
+
def deliver_take_thread_control(to:, metadata: nil)
|
38
|
+
body = { recipient: { id: to }, metadata: metadata }
|
39
|
+
query = { access_token: page_access_token }
|
40
|
+
Bobot::Commander.deliver(
|
41
|
+
endpoint: '/me/take_thread_control',
|
42
|
+
body: body,
|
43
|
+
query: query,
|
44
|
+
)
|
45
|
+
end
|
46
|
+
|
47
|
+
def deliver_pass_thread_control(to:, metadata: nil, target_app_id:)
|
48
|
+
body = { recipient: { id: to }, target_app_id: target_app_id, metadata: metadata }
|
49
|
+
query = { access_token: page_access_token }
|
50
|
+
Bobot::Commander.deliver(
|
51
|
+
endpoint: '/me/pass_thread_control',
|
52
|
+
body: body,
|
53
|
+
query: query,
|
54
|
+
)
|
55
|
+
end
|
56
|
+
|
37
57
|
def deliver(payload_template:, to:)
|
38
58
|
if payload_template.present?
|
39
59
|
if payload_template.key?(:messaging_options) && !payload_template[:messaging_options].nil? && payload_template[:messaging_options].key?(:messaging_type)
|
@@ -49,11 +69,12 @@ module Bobot
|
|
49
69
|
body = { recipient: { id: to }, messaging_type: "RESPONSE" }.merge(payload_template).merge(payload_template[:messaging_options] || {})
|
50
70
|
query = { access_token: page_access_token }
|
51
71
|
Bobot::Commander.deliver(
|
72
|
+
endpoint: '/me/messages',
|
52
73
|
body: body,
|
53
74
|
query: query,
|
54
75
|
)
|
55
76
|
end
|
56
|
-
|
77
|
+
|
57
78
|
def sender_action(sender_action:, to: nil, messaging_options: nil)
|
58
79
|
deliver(payload_template: { sender_action: sender_action, messaging_options: messaging_options }, to: to)
|
59
80
|
end
|
data/lib/bobot/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bobot
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.14.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Navid EMAD
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-02-
|
11
|
+
date: 2019-02-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: i18n
|
@@ -96,6 +96,7 @@ files:
|
|
96
96
|
- lib/bobot/events/postback.rb
|
97
97
|
- lib/bobot/events/read.rb
|
98
98
|
- lib/bobot/events/referral.rb
|
99
|
+
- lib/bobot/events/take_thread_control.rb
|
99
100
|
- lib/bobot/exceptions.rb
|
100
101
|
- lib/bobot/graph_facebook.rb
|
101
102
|
- lib/bobot/page.rb
|