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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fea75dd1ce76f17fb665eb9b75fc4d5086302de0f484dbb5f7b378d7fbd05d7f
4
- data.tar.gz: 4cfcd52a2006ab9bceb2ca5905df48a1b1566ce384d26ee63f810e88a607fdfd
3
+ metadata.gz: 312aa2653634d73327d66899611310da2c5c7a0514f2bc84afaba332fc31046c
4
+ data.tar.gz: fa5a7192eafc0455aafb79cedebe9265dc19d1601a4f4adc826ec70145aec170
5
5
  SHA512:
6
- metadata.gz: 82c1c545c8d2f26fcdf0cc41bde4bf8b83d877451423f83f48330ddbb611b31ed40a7b70aa5c90109fbc5725f3bac86b2a6faa70f7310938a46d00597508b7b0
7
- data.tar.gz: 90155f520bc068e75cc0b40f87bd1b2e02654e0d58db5c8c5ff77876421e7b2ebc52b0c6362052f1740607914005fa43afd96e580e91bd654172b3467651c1ba
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(OpenSSL::Digest.new('sha1'.freeze), Bobot.config.app_secret, content)
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
@@ -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 '/me/messages', body: body, query: {
24
- access_token: query.fetch(:access_token),
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
- return unless event.page.present?
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 unless event.page.present?
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)
@@ -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)
@@ -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
@@ -1,9 +1,6 @@
1
1
  module Bobot
2
2
  module Event
3
3
  class MessageEcho < Message
4
- def access_token
5
- Bobot::Page.find(sender["id"])
6
- end
7
4
  end
8
5
  end
9
6
  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
@@ -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
@@ -1,8 +1,8 @@
1
1
  module Bobot
2
2
  class Version
3
3
  MAJOR = 4
4
- MINOR = 13
5
- PATCH = 1
4
+ MINOR = 14
5
+ PATCH = 0
6
6
  PRE = nil
7
7
 
8
8
  class << self
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.13.1
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-21 00:00:00.000000000 Z
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