module Bobot::Buttons
Constants
- REGEX_PHONE_NUMBER
Public Class Methods
call(title:, payload:)
click to toggle source
# File lib/bobot/buttons.rb, line 142 def self.call(title:, payload:) raise Bobot::FieldFormat.new('title is required') unless title.present? raise Bobot::FieldFormat.new('title size is limited to 20', "#{title} (#{title.size} chars)") if title.size > 20 raise Bobot::FieldFormat.new('payload is required') unless payload.present? raise Bobot::FieldFormat.new('payload has to be only a string', payload.class.to_s) unless payload.is_a?(String) raise Bobot::FieldFormat.new('payload has to start with a "+" and be a valid phone number', payload) unless REGEX_PHONE_NUMBER =~ payload { type: 'phone_number', title: title, payload: payload, } end
carousel_element(title:, subtitle: nil, image_url: nil, default_action: nil, buttons: nil)
Alias for: generic_element
default_action(url:, options: {})
click to toggle source
# File lib/bobot/buttons.rb, line 100 def self.default_action(url:, options: {}) raise Bobot::FieldFormat.new('url is required') unless url.present? if options.key?(:messenger_extensions) && options[:messenger_extensions] && !url.include?('https') raise Bobot::FieldFormat.new('must use url HTTPS protocol if messenger_extensions is true.', url) end if options.key?(:webview_height_ratio) && !%w[compact tall full].include?(options[:webview_height_ratio]) raise Bobot::FieldFormat.new('invalid webview_height_ratio, only "compact, tall, full" are permitted.', options[:webview_height_ratio]) end { type: 'web_url', url: url, }.tap do |properties| properties[:webview_height_ratio] = options[:webview_height_ratio] if options.key?(:webview_height_ratio) properties[:messenger_extensions] = options[:messenger_extensions] if options.key?(:messenger_extensions) properties[:fallback_url] = options[:fallback_url] if options.key?(:fallback_url) properties[:webview_share_button] = options[:webview_share_button] if options.key?(:webview_share_button) end end
encode_payload(payload:)
click to toggle source
# File lib/bobot/buttons.rb, line 3 def self.encode_payload(payload:) unless payload.is_a?(String) begin payload = ActiveSupport::JSON.encode(payload) rescue ::ActiveSupport::JSON.parse_error raise Bobot::FieldFormat.new('payload is not string and not a valid to be JSONified.') end end payload end
generic_element(title:, subtitle: nil, image_url: nil, default_action: nil, buttons: nil)
click to toggle source
# File lib/bobot/buttons.rb, line 27 def self.generic_element(title:, subtitle: nil, image_url: nil, default_action: nil, buttons: nil) raise Bobot::FieldFormat.new('title is required') unless title.present? raise Bobot::FieldFormat.new('title size is limited to 80', "#{title} (#{title.size} chars)") if title.size > 80 raise Bobot::FieldFormat.new('subtitle size is limited to 80', "#{subtitle} (#{subtitle.size} chars)") if subtitle.present? && subtitle.size > 80 raise Bobot::FieldFormat.new('buttons are limited to 3', buttons.size) if buttons.present? && buttons.size > 3 { title: title, }.tap do |properties| properties[:image_url] = image_url if image_url.present? properties[:subtitle] = subtitle if subtitle.present? properties[:default_action] = default_action if default_action.present? properties[:buttons] = buttons if buttons.present? end end
Also aliased as: carousel_element
postback(title:, payload:)
click to toggle source
# File lib/bobot/buttons.rb, line 14 def self.postback(title:, payload:) raise Bobot::FieldFormat.new('title is required') unless title.present? raise Bobot::FieldFormat.new('title size is limited to 20', "#{title} (#{title.size} chars)") if title.size > 20 raise Bobot::FieldFormat.new('payload is required') unless payload.present? payload = Bobot::Buttons.encode_payload(payload: payload) raise Bobot::FieldFormat.new('payload size is limited to 1000', "#{payload.size} chars") if payload.size > 1000 { type: 'postback', title: title, payload: payload, } end
quick_reply_location(image_url: nil)
click to toggle source
# File lib/bobot/buttons.rb, line 45 def self.quick_reply_location(image_url: nil) { content_type: 'location', }.tap do |properties| properties[:image_url] = image_url if image_url.present? end end
quick_reply_text(title:, payload:, image_url: nil)
click to toggle source
# File lib/bobot/buttons.rb, line 53 def self.quick_reply_text(title:, payload:, image_url: nil) raise Bobot::FieldFormat.new('title is required') unless title.present? raise Bobot::FieldFormat.new('title size is limited to 20', "#{title} (#{title.size} chars)") if title.size > 20 raise Bobot::FieldFormat.new('payload is required') unless payload.present? payload = Bobot::Buttons.encode_payload(payload: payload) raise Bobot::FieldFormat.new('payload size is limited to 1000', "#{payload.size} chars") if payload.size > 1000 { content_type: 'text', title: title, payload: payload, }.tap do |properties| properties[:image_url] = image_url if image_url.present? end end
url(title:, url:, options: {})
click to toggle source
# File lib/bobot/buttons.rb, line 119 def self.url(title:, url:, options: {}) raise Bobot::FieldFormat.new('title is required') unless title.present? raise Bobot::FieldFormat.new('title size is limited to 20', "#{title} (#{title.size} chars)") if title.size > 20 raise Bobot::FieldFormat.new('url is required') unless url.present? if options.key?(:messenger_extensions) && options[:messenger_extensions] && !url.include?('https') raise Bobot::FieldFormat.new('must use url HTTPS protocol if messenger_extensions is true.', url) end if options.key?(:webview_height_ratio) && !%w[compact tall full].include?(options[:webview_height_ratio]) raise Bobot::FieldFormat.new('invalid webview_height_ratio, only "compact, tall, full" are permitted.', options[:webview_height_ratio]) end { type: 'web_url', url: url, title: title, }.tap do |properties| properties[:webview_height_ratio] = options[:webview_height_ratio] if options.key?(:webview_height_ratio) properties[:messenger_extensions] = options[:messenger_extensions] if options.key?(:messenger_extensions) properties[:fallback_url] = options[:fallback_url] if options.key?(:fallback_url) properties[:webview_share_button] = options[:webview_share_button] if options.key?(:webview_share_button) end end