messenger-bot-client 1.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.codeclimate.yml +9 -0
- data/.gitignore +6 -0
- data/.rspec +2 -0
- data/Gemfile +4 -0
- data/README.md +593 -0
- data/Rakefile +8 -0
- data/app/controllers/messenger/messenger_controller.rb +89 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/circle.yml +6 -0
- data/config/routes.rb +8 -0
- data/lib/messenger-ruby.rb +57 -0
- data/lib/messenger/client.rb +19 -0
- data/lib/messenger/components/attachment.rb +33 -0
- data/lib/messenger/components/element.rb +13 -0
- data/lib/messenger/components/elements/bubble.rb +23 -0
- data/lib/messenger/components/elements/button.rb +25 -0
- data/lib/messenger/components/elements/image.rb +18 -0
- data/lib/messenger/components/elements/quick_reply.rb +24 -0
- data/lib/messenger/components/elements/receipt/address.rb +20 -0
- data/lib/messenger/components/elements/receipt/adjustment.rb +16 -0
- data/lib/messenger/components/elements/receipt/item.rb +20 -0
- data/lib/messenger/components/elements/receipt/order.rb +19 -0
- data/lib/messenger/components/elements/receipt/summary.rb +18 -0
- data/lib/messenger/components/elements/sender_action.rb +15 -0
- data/lib/messenger/components/elements/text.rb +15 -0
- data/lib/messenger/components/elements/video.rb +18 -0
- data/lib/messenger/components/templates/buttons.rb +20 -0
- data/lib/messenger/components/templates/generic.rb +19 -0
- data/lib/messenger/components/templates/quick_replies.rb +18 -0
- data/lib/messenger/components/templates/receipt.rb +40 -0
- data/lib/messenger/configuration.rb +10 -0
- data/lib/messenger/engine.rb +7 -0
- data/lib/messenger/parameters/account_linking.rb +14 -0
- data/lib/messenger/parameters/attachment.rb +23 -0
- data/lib/messenger/parameters/callback.rb +15 -0
- data/lib/messenger/parameters/delivery.rb +15 -0
- data/lib/messenger/parameters/entry.rb +17 -0
- data/lib/messenger/parameters/message.rb +29 -0
- data/lib/messenger/parameters/messaging.rb +24 -0
- data/lib/messenger/parameters/optin.rb +13 -0
- data/lib/messenger/parameters/postback.rb +13 -0
- data/lib/messenger/parameters/quick_reply.rb +11 -0
- data/lib/messenger/parameters/read.rb +14 -0
- data/lib/messenger/parameters/referral.rb +15 -0
- data/lib/messenger/params.rb +25 -0
- data/lib/messenger/request.rb +35 -0
- data/lib/messenger/version.rb +3 -0
- data/messenger-ruby.gemspec +31 -0
- metadata +219 -0
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'messenger/components/element'
|
2
|
+
|
3
|
+
module Messenger
|
4
|
+
module Elements
|
5
|
+
class Summary
|
6
|
+
include Components::Element
|
7
|
+
|
8
|
+
attr_accessor :subtotal, :shipping_cost, :total_tax, :total_cost
|
9
|
+
|
10
|
+
def initialize(subtotal: nil, shipping_cost: nil, total_tax: nil, total_cost:)
|
11
|
+
@subtotal = subtotal
|
12
|
+
@shipping_cost = shipping_cost
|
13
|
+
@total_tax = total_tax
|
14
|
+
@total_cost = total_cost
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'messenger/components/attachment'
|
2
|
+
|
3
|
+
module Messenger
|
4
|
+
module Elements
|
5
|
+
class Video
|
6
|
+
include Components::Attachment
|
7
|
+
|
8
|
+
attr_accessor :url
|
9
|
+
|
10
|
+
ATTRIBUTES = %w(url).freeze
|
11
|
+
|
12
|
+
def initialize(url:)
|
13
|
+
@url = url
|
14
|
+
@type = 'video'
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'messenger/components/attachment'
|
2
|
+
|
3
|
+
module Messenger
|
4
|
+
module Templates
|
5
|
+
class Buttons
|
6
|
+
include Components::Attachment
|
7
|
+
|
8
|
+
attr_accessor :text, :buttons, :template_type
|
9
|
+
|
10
|
+
ATTRIBUTES = %w(template_type text buttons).freeze
|
11
|
+
|
12
|
+
def initialize(text:, buttons:)
|
13
|
+
@type = 'template'
|
14
|
+
@template_type = 'button'
|
15
|
+
@text = text
|
16
|
+
@buttons = build_elements(buttons)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'messenger/components/attachment'
|
2
|
+
|
3
|
+
module Messenger
|
4
|
+
module Templates
|
5
|
+
class Generic
|
6
|
+
include Components::Attachment
|
7
|
+
|
8
|
+
attr_accessor :template_type, :elements
|
9
|
+
|
10
|
+
ATTRIBUTES = %w(template_type elements).freeze
|
11
|
+
|
12
|
+
def initialize(elements:)
|
13
|
+
@type = 'template'
|
14
|
+
@template_type = 'generic'
|
15
|
+
@elements = build_elements(elements)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'messenger/components/attachment'
|
2
|
+
|
3
|
+
module Messenger
|
4
|
+
module Templates
|
5
|
+
class QuickReplies
|
6
|
+
include Components::Element
|
7
|
+
|
8
|
+
attr_accessor :text, :quick_replies
|
9
|
+
|
10
|
+
ATTRIBUTES = %w(text quick_replies).freeze
|
11
|
+
|
12
|
+
def initialize(text:, quick_replies:)
|
13
|
+
@text = text
|
14
|
+
@quick_replies = build_elements(quick_replies)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'messenger/components/attachment'
|
2
|
+
|
3
|
+
module Messenger
|
4
|
+
module Templates
|
5
|
+
class Receipt
|
6
|
+
include Components::Attachment
|
7
|
+
|
8
|
+
attr_accessor :template_type, :recipient_name, :order, :elements, :address, :summary, :adjustments
|
9
|
+
|
10
|
+
ATTRIBUTES = %w(
|
11
|
+
template_type
|
12
|
+
recipient_name
|
13
|
+
order_number
|
14
|
+
currency
|
15
|
+
payment_method
|
16
|
+
timestamp
|
17
|
+
order_url
|
18
|
+
elements
|
19
|
+
address
|
20
|
+
summary
|
21
|
+
adjustments
|
22
|
+
).freeze
|
23
|
+
|
24
|
+
def initialize(recipient_name:, order:, elements:, address: nil, summary:, adjustments: nil)
|
25
|
+
@type = 'template'
|
26
|
+
@template_type = 'receipt'
|
27
|
+
@recipient_name = recipient_name
|
28
|
+
@order = order
|
29
|
+
@elements = build_elements(elements)
|
30
|
+
@address = address.build if address.present?
|
31
|
+
@summary = summary.build
|
32
|
+
@adjustments = build_elements(adjustments)
|
33
|
+
end
|
34
|
+
|
35
|
+
def flattened_attributes
|
36
|
+
@order.build
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Messenger
|
2
|
+
module Parameters
|
3
|
+
class AccountLinking
|
4
|
+
include Callback
|
5
|
+
|
6
|
+
attr_accessor :status, :authorization_code
|
7
|
+
|
8
|
+
def initialize(status:, authorization_code: nil)
|
9
|
+
@status = status
|
10
|
+
@authorization_code = authorization_code
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Messenger
|
2
|
+
module Parameters
|
3
|
+
class Attachment
|
4
|
+
attr_accessor :type, :url, :long, :lat
|
5
|
+
|
6
|
+
def initialize(type:, payload:)
|
7
|
+
@type = type
|
8
|
+
set_payload_attributes(payload)
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def set_payload_attributes(payload)
|
14
|
+
if @type == 'location'
|
15
|
+
@long = payload['coordinates']['long']
|
16
|
+
@lat = payload['coordinates']['lat']
|
17
|
+
else
|
18
|
+
@url = payload['url']
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Messenger
|
2
|
+
module Parameters
|
3
|
+
module Callback
|
4
|
+
%w(message delivery optin postback read account_linking referral).each do |method|
|
5
|
+
define_method("#{method}?") do
|
6
|
+
type.include?(method)
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def type
|
11
|
+
self.class.to_s.underscore
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Messenger
|
2
|
+
module Parameters
|
3
|
+
class Entry
|
4
|
+
attr_accessor :id, :time, :messagings
|
5
|
+
|
6
|
+
def initialize(id:, time:, messaging: nil)
|
7
|
+
@id = id
|
8
|
+
@time = time
|
9
|
+
@messagings = build_messagings(messaging) if messaging.present?
|
10
|
+
end
|
11
|
+
|
12
|
+
def build_messagings(messagings)
|
13
|
+
messagings.map { |messaging| Messaging.new(messaging.transform_keys(&:to_sym)) }
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Messenger
|
2
|
+
module Parameters
|
3
|
+
class Message
|
4
|
+
include Callback
|
5
|
+
|
6
|
+
attr_accessor :mid, :seq, :sticker_id, :text, :attachments, :quick_reply, :is_echo, :app_id, :metadata
|
7
|
+
|
8
|
+
def initialize(mid:, seq:, sticker_id: nil, text: nil, attachments: nil, quick_reply: nil, is_echo: nil, app_id: nil, metadata: nil)
|
9
|
+
@mid = mid
|
10
|
+
@seq = seq
|
11
|
+
@sticker_id = sticker_id if sticker_id.present?
|
12
|
+
@text = text if text.present?
|
13
|
+
@attachments = build_attachments(attachments) if attachments.present?
|
14
|
+
@quick_reply = build_quick_reply(quick_reply) if quick_reply.present?
|
15
|
+
@is_echo = is_echo
|
16
|
+
@app_id = app_id
|
17
|
+
@metadata = metadata
|
18
|
+
end
|
19
|
+
|
20
|
+
def build_attachments(attachments)
|
21
|
+
attachments.map { |attachment| Attachment.new(attachment.transform_keys(&:to_sym).slice(:type, :payload)) }
|
22
|
+
end
|
23
|
+
|
24
|
+
def build_quick_reply(quick_reply)
|
25
|
+
QuickReply.new(quick_reply.transform_keys(&:to_sym))
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Messenger
|
2
|
+
module Parameters
|
3
|
+
class Messaging
|
4
|
+
attr_accessor :sender_id, :recipient_id, :callback
|
5
|
+
|
6
|
+
def initialize(sender:, recipient:, timestamp: nil, message: nil, delivery: nil, postback: nil, optin: nil, read: nil, account_linking: nil)
|
7
|
+
@sender_id = sender['id']
|
8
|
+
@recipient_id = recipient['id']
|
9
|
+
@callback = set_callback(message: message, delivery: delivery, postback: postback, optin: optin, read: read, account_linking: account_linking)
|
10
|
+
end
|
11
|
+
|
12
|
+
def set_callback(callbacks)
|
13
|
+
type = callbacks.select { |_, v| v.present? }.keys.first
|
14
|
+
@callback = constant(type).new(callbacks[type].transform_keys(&:to_sym))
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def constant(symbol)
|
20
|
+
"Messenger::Parameters::#{symbol.to_s.camelize}".constantize
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Messenger
|
2
|
+
class Params
|
3
|
+
attr_accessor :params
|
4
|
+
|
5
|
+
def initialize(params)
|
6
|
+
@params = params
|
7
|
+
end
|
8
|
+
|
9
|
+
def entries
|
10
|
+
@entries_objects ||= build_entries
|
11
|
+
end
|
12
|
+
|
13
|
+
def first_entry
|
14
|
+
entries[0].messagings[0]
|
15
|
+
end
|
16
|
+
|
17
|
+
alias_method :first_messaging, :first_entry
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def build_entries
|
22
|
+
params['entry'].map { |entry| Parameters::Entry.new(entry.to_h.transform_keys(&:to_sym)) }
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|