class Bobot::Page
Attributes
get_started_payload[RW]
home_url_for_chat_extension[RW]
in_test_for_chat_extension[RW]
language[RW]
page_access_token[RW]
page_id[RW]
size_for_chat_extension[RW]
slug[RW]
Public Class Methods
[](value)
click to toggle source
# File lib/bobot/page.rb, line 31 def self.[](value) find(value) || find_by_slug(value) end
find(page_id)
click to toggle source
FINDERS
# File lib/bobot/page.rb, line 23 def self.find(page_id) Bobot.config.pages.find { |page| page.page_id.to_s == page_id.to_s } end
find_by_slug(slug)
click to toggle source
# File lib/bobot/page.rb, line 27 def self.find_by_slug(slug) Bobot.config.pages.find { |page| page.slug.to_s == slug.to_s } end
new(options = {})
click to toggle source
# File lib/bobot/page.rb, line 5 def initialize(options = {}) self.slug = options[:slug] self.language = options[:language] self.page_id = options[:page_id] self.page_access_token = options[:page_access_token] self.get_started_payload = options[:get_started_payload] self.home_url_for_chat_extension = options[:home_url_for_chat_extension] self.size_for_chat_extension = options[:size_for_chat_extension] self.share_button_for_chat_extension = options[:share_button_for_chat_extension] self.in_test_for_chat_extension = options[:in_test_for_chat_extension] end
Public Instance Methods
deliver(payload_template:, to:)
click to toggle source
# File lib/bobot/page.rb, line 61 def deliver(payload_template:, to:) if payload_template.present? if payload_template.key?(:messaging_options) && !payload_template[:messaging_options].nil? && payload_template[:messaging_options].key?(:messaging_type) if !%w[RESPONSE UPDATE MESSAGE_TAG].include?(payload_template[:messaging_options][:messaging_type]) raise Bobot::FieldFormat.new('payload_template[:messaging_options][:messaging_type] is invalid, only "RESPONSE, UPDATE, MESSAGE_TAG" are permitted.', payload_template[:messaging_options][:messaging_type]) elsif "MESSAGE_TAG" == payload_template[:messaging_options][:messaging_type] && !payload_template[:messaging_options].key?(:tag) raise Bobot::FieldFormat.new('payload_template[:messaging_options][:key] is required when messaging_type is MESSAGE_TAG.', payload_template[:messaging_options][:tag]) end end else raise Bobot::FieldFormat.new('payload_template is required') end body = { recipient: { id: to }, messaging_type: "RESPONSE" }.merge(payload_template).merge(payload_template[:messaging_options] || {}) query = { access_token: page_access_token } Bobot::Commander.deliver( endpoint: '/me/messages', body: body, query: query, ) end
deliver_pass_thread_control(to:, metadata: nil, target_app_id:)
click to toggle source
# File lib/bobot/page.rb, line 51 def deliver_pass_thread_control(to:, metadata: nil, target_app_id:) body = { recipient: { id: to }, target_app_id: target_app_id, metadata: metadata } query = { access_token: page_access_token } Bobot::Commander.deliver( endpoint: '/me/pass_thread_control', body: body, query: query, ) end
deliver_take_thread_control(to:, metadata: nil)
click to toggle source
REQUESTS
# File lib/bobot/page.rb, line 41 def deliver_take_thread_control(to:, metadata: nil) body = { recipient: { id: to }, metadata: metadata } query = { access_token: page_access_token } Bobot::Commander.deliver( endpoint: '/me/take_thread_control', body: body, query: query, ) end
get_facebook_setup()
click to toggle source
# File lib/bobot/page.rb, line 302 def get_facebook_setup begin puts "- get_whitelist_domains [....]" puts get_whitelist_domains.inspect puts "- get_whitelist_domains [DONE]" rescue => e Rails.logger.error(e.message) end begin puts "- get_greeting_text [....]" puts get_greeting_text.inspect puts "- get_greeting_text [DONE]" rescue => e Rails.logger.error(e.message) end begin puts "- get_started_button [....]" puts get_started_button.inspect puts "- get_started_button [DONE]" rescue => e Rails.logger.error(e.message) end begin puts "- get_persistent_menu [....]" puts get_persistent_menu.inspect puts "- get_persistent_menu [DONE]" rescue => e Rails.logger.error(e.message) end begin puts "- get_messenger_extensions_home_url [....]" puts get_messenger_extensions_home_url.inspect puts "- get_messenger_extensions_home_url [DONE]" rescue => e Rails.logger.error(e.message) end end
get_greeting_text()
click to toggle source
# File lib/bobot/page.rb, line 386 def get_greeting_text raise Bobot::FieldFormat.new("access_token is required") unless page_access_token.present? Bobot::Profile.get( query: { access_token: page_access_token, fields: %w[greeting] }, ) end
get_messenger_extensions_home_url()
click to toggle source
# File lib/bobot/page.rb, line 547 def get_messenger_extensions_home_url raise Bobot::FieldFormat.new("access_token is required") unless page_access_token.present? Bobot::Profile.get( query: { access_token: page_access_token, fields: %w[home_url] }, ) end
get_whitelist_domains()
click to toggle source
# File lib/bobot/page.rb, line 413 def get_whitelist_domains raise Bobot::FieldFormat.new("access_token is required") unless page_access_token.present? Bobot::Profile.get( query: { access_token: page_access_token, fields: %w[whitelisted_domains] }, ) end
mark_as_seen(to: nil, messaging_options: nil)
click to toggle source
# File lib/bobot/page.rb, line 90 def mark_as_seen(to: nil, messaging_options: nil) sender_action(sender_action: 'mark_seen', messaging_options: messaging_options, to: to) end
send(payload_message:, to: nil, messaging_options: nil)
click to toggle source
# File lib/bobot/page.rb, line 94 def send(payload_message:, to: nil, messaging_options: nil) deliver(payload_template: { message: payload_message, messaging_options: messaging_options }, to: to) end
send_attachment(url:, type:, to: nil, messaging_options: nil)
click to toggle source
# File lib/bobot/page.rb, line 110 def send_attachment(url:, type:, to: nil, messaging_options: nil) raise Bobot::FieldFormat.new('url is required') unless url.present? raise Bobot::FieldFormat.new('type is required') unless type.present? raise Bobot::FieldFormat.new('type is invalid, only "image, audio, video, file" are permitted.', type) unless %w[image audio video file].include?(type) send( payload_message: { attachment: { type: type, payload: { url: url, }.tap { |properties| properties.merge!(is_reusable: true) if type == 'image' }, }, }, to: to, messaging_options: messaging_options, ) end
send_audio(url:, to: nil, messaging_options: nil)
click to toggle source
# File lib/bobot/page.rb, line 152 def send_audio(url:, to: nil, messaging_options: nil) send_attachment(url: url, type: 'audio', to: to, messaging_options: messaging_options) end
send_carousel(elements:, image_aspect_ratio: 'square', to: nil, messaging_options: nil)
Alias for: send_generic
send_file(url:, to: nil, messaging_options: nil)
click to toggle source
# File lib/bobot/page.rb, line 160 def send_file(url:, to: nil, messaging_options: nil) send_attachment(url: url, type: 'file', to: to, messaging_options: messaging_options) end
send_generic(elements:, image_aspect_ratio: 'square', to: nil, messaging_options: nil)
click to toggle source
# File lib/bobot/page.rb, line 200 def send_generic(elements:, image_aspect_ratio: 'square', to: nil, messaging_options: nil) raise Bobot::FieldFormat.new('elements are required') if elements.nil? raise Bobot::FieldFormat.new('elements are limited to 10.', "#{elements.size} elements") if elements.size > 10 raise Bobot::FieldFormat.new('image_aspect_ratio is required') if image_aspect_ratio.nil? raise Bobot::FieldFormat.new('image_aspect_ratio is invalid, only "square, horizontal" are permitted.', image_aspect_ratio) unless %w[square horizontal].include?(image_aspect_ratio) send( payload_message: { attachment: { type: 'template', payload: { template_type: 'generic', image_aspect_ratio: image_aspect_ratio, elements: elements, }, }, }, to: to, messaging_options: messaging_options, ) end
Also aliased as: send_carousel
send_image(url:, to: nil, messaging_options: nil)
click to toggle source
# File lib/bobot/page.rb, line 148 def send_image(url:, to: nil, messaging_options: nil) send_attachment(url: url, type: 'image', to: to, messaging_options: messaging_options) end
send_quick_replies(text:, quick_replies:, to: nil, messaging_options: nil)
click to toggle source
# File lib/bobot/page.rb, line 164 def send_quick_replies(text:, quick_replies:, to: nil, messaging_options: nil) raise Bobot::FieldFormat.new('text is required') unless text.present? raise Bobot::FieldFormat.new('text size is limited to 640.', "#{text} (#{text.size} chars)") if text.size > 640 raise Bobot::FieldFormat.new('quick_replies are required') unless quick_replies.present? raise Bobot::FieldFormat.new('quick_replies are limited to 11.', "#{quick_replies.size} quick replies") if quick_replies.size > 11 send( payload_message: { text: text, quick_replies: quick_replies, }, to: to, messaging_options: messaging_options, ) end
send_text(text:, to: nil, messaging_options: nil)
click to toggle source
# File lib/bobot/page.rb, line 98 def send_text(text:, to: nil, messaging_options: nil) raise Bobot::FieldFormat.new('text is required') unless text.present? raise Bobot::FieldFormat.new('text size is limited to 640.', "#{text} (#{text.size} chars)") if text.size > 640 send( payload_message: { text: text, }, to: to, messaging_options: messaging_options, ) end
send_video(url:, to: nil, messaging_options: nil)
click to toggle source
# File lib/bobot/page.rb, line 156 def send_video(url:, to: nil, messaging_options: nil) send_attachment(url: url, type: 'video', to: to, messaging_options: messaging_options) end
send_youtube_video(url:, to: nil, messaging_options: nil)
click to toggle source
# File lib/bobot/page.rb, line 128 def send_youtube_video(url:, to: nil, messaging_options: nil) raise Bobot::FieldFormat.new('url is required') unless url.present? raise Bobot::FieldFormat.new('url is not valid', url) unless url =~ %r{^(?:https?:\/\/)?(?:www\.)?youtu(?:\.be|be\.com)\/(?:watch\?v=)?([\w-]{10,})} send( payload_message: { attachment: { type: "template", payload: { template_type: "open_graph", elements: [ { url: url }, ], }, }, }, to: to, messaging_options: messaging_options, ) end
sender_action(sender_action:, to: nil, messaging_options: nil)
click to toggle source
# File lib/bobot/page.rb, line 82 def sender_action(sender_action:, to: nil, messaging_options: nil) deliver(payload_template: { sender_action: sender_action, messaging_options: messaging_options }, to: to) end
set_greeting_text!()
click to toggle source
Set bot description (only displayed on first time). ==¶ ↑
# File lib/bobot/page.rb, line 341 def set_greeting_text! raise Bobot::FieldFormat.new("access_token is required") unless page_access_token.present? greeting_texts = [] if self.language.nil? # Default text short_slug = slug.gsub(/_\w+$/, "") greeting_text = I18n.t("bobot.#{slug}.config.greeting_text", locale: I18n.default_locale, default: nil) greeting_text = I18n.t("bobot.#{short_slug}.config.greeting_text", locale: I18n.default_locale, default: nil) if greeting_text.nil? greeting_texts << { locale: 'default', text: greeting_text } if greeting_text.present? # Each languages I18n.available_locales.each do |locale| greeting_text = I18n.t("bobot.#{slug}.config.greeting_text", locale: locale, default: nil) next unless greeting_text.present? facebook_locales = I18n.t("bobot.#{slug}.config.facebook_locales", locale: locale, default: []) facebook_locales.to_a.each do |locale_long| greeting_texts << { locale: locale_long, text: greeting_text } end end else short_slug = slug.gsub(/_#{language}$/, "") greeting_text = I18n.t("bobot.#{slug}.config.greeting_text", locale: language, default: nil) greeting_text = I18n.t("bobot.#{short_slug}.config.greeting_text", locale: language, default: nil) if greeting_text.nil? greeting_texts << { locale: 'default', text: greeting_text } if greeting_text.present? end if greeting_texts.present? greeting_texts.each do |row| if row[:text].present? && row[:text].size > 160 raise Bobot::FieldFormat.new("greeting text for locale #{row[:locale]} is limited to 160.", "#{row[:text]} (#{row[:text].size} chars)") end end Bobot::Profile.set( body: { greeting: greeting_texts }, query: { access_token: page_access_token }, ) end end
set_messenger_extensions_home_url!()
click to toggle source
Set bot home url ==¶ ↑
Allows your bot to enable a Chat Extension in the composer drawer in Messenger. ==¶ ↑
It controls what is displayed when the Chat Extension is invoked via the composer drawer in Messenger. ==¶ ↑
# File lib/bobot/page.rb, line 523 def set_messenger_extensions_home_url! raise Bobot::FieldFormat.new("access_token is required") unless page_access_token.present? raise Bobot::FieldFormat.new("home_url_for_chat_extension is required") unless home_url_for_chat_extension.present? Bobot::Profile.set( body: { "home_url": { "url": home_url_for_chat_extension, "webview_height_ratio": size_for_chat_extension || "tall", "webview_share_button": share_button_for_chat_extension || "show", "in_test": !in_test_for_chat_extension.nil? ? in_test_for_chat_extension : true, }, }, query: { access_token: page_access_token }, ) end
set_whitelist_domains!()
click to toggle source
Set bot whitelist domains (only displayed on first time) ==¶ ↑
Some features like Messenger Extensions and Checkbox Plugin require ==¶ ↑
a page to specify a domain whitelist. ==¶ ↑
# File lib/bobot/page.rb, line 396 def set_whitelist_domains! raise Bobot::FieldFormat.new("access_token is required") unless page_access_token.present? raise Bobot::FieldFormat.new("Bobot.config.domains is required") unless Bobot.config.domains.present? Bobot::Profile.set( body: { whitelisted_domains: Bobot.config.domains }, query: { access_token: page_access_token }, ) end
show_typing(state:, to: nil, messaging_options: nil)
click to toggle source
# File lib/bobot/page.rb, line 86 def show_typing(state:, to: nil, messaging_options: nil) sender_action(sender_action: (state ? 'typing_on' : 'typing_off'), messaging_options: messaging_options, to: to) end
unset_greeting_text!()
click to toggle source
# File lib/bobot/page.rb, line 378 def unset_greeting_text! raise Bobot::FieldFormat.new("access_token is required") unless page_access_token.present? Bobot::Profile.unset( body: { fields: %w[greeting] }, query: { access_token: page_access_token }, ) end
unset_messenger_extensions_home_url!()
click to toggle source
# File lib/bobot/page.rb, line 539 def unset_messenger_extensions_home_url! raise Bobot::FieldFormat.new("access_token is required") unless page_access_token.present? Bobot::Profile.unset( body: { fields: %w[home_url] }, query: { access_token: page_access_token }, ) end
unset_whitelist_domains!()
click to toggle source
# File lib/bobot/page.rb, line 405 def unset_whitelist_domains! raise Bobot::FieldFormat.new("access_token is required") unless page_access_token.present? Bobot::Profile.unset( body: { fields: %w[whitelisted_domains] }, query: { access_token: page_access_token }, ) end
update_facebook_setup!()
click to toggle source
SETUP
# File lib/bobot/page.rb, line 227 def update_facebook_setup! begin puts "- unset_whitelist_domains! [....]" unset_whitelist_domains! puts "- unset_whitelist_domains! [DONE]" rescue => e Rails.logger.error(e.message) end begin puts "- set_whitelist_domains! [....]" set_whitelist_domains! puts "- set_whitelist_domains! [DONE]" rescue => e Rails.logger.error(e.message) end begin puts "- unset_greeting_text! [....]" unset_greeting_text! puts "- unset_greeting_text! [DONE]" rescue => e Rails.logger.error(e.message) end begin puts "- set_greeting_text! [....]" set_greeting_text! puts "- set_greeting_text! [DONE]" rescue => e Rails.logger.error(e.message) end begin puts "- unset_get_started_button! [....]" unset_get_started_button! puts "- unset_get_started_button! [DONE]" rescue => e Rails.logger.error(e.message) end begin puts "- set_get_started_button! [....]" set_get_started_button! puts "- set_get_started_button! [DONE]" rescue => e Rails.logger.error(e.message) end begin puts "- unset_persistent_menu! [....]" unset_persistent_menu! puts "- unset_persistent_menu! [DONE]" rescue => e Rails.logger.error(e.message) end begin puts "- set_persistent_menu! [....]" set_persistent_menu! puts "- set_persistent_menu! [DONE]" rescue => e Rails.logger.error(e.message) end if home_url_for_chat_extension.present? begin puts "- unset_messenger_extensions_home_url! [....]" unset_messenger_extensions_home_url! puts "- unset_messenger_extensions_home_url! [DONE]" rescue => e Rails.logger.error(e.message) end begin puts "- set_messenger_extensions_home_url! [....]" set_messenger_extensions_home_url! puts "- set_messenger_extensions_home_url! [DONE]" rescue => e Rails.logger.error(e.message) end end end