- Added input_select message type support for Whatsapp Cloud API and Whatsapp 360dialog. Co-authored-by: Sojan Jose <sojan@pepalo.com>
80 lines
2.1 KiB
Ruby
80 lines
2.1 KiB
Ruby
#######################################
|
|
# To create a whatsapp provider
|
|
# - Inherit this as the base class.
|
|
# - Implement `send_message` method in your child class.
|
|
# - Implement `send_template_message` method in your child class.
|
|
# - Implement `sync_templates` method in your child class.
|
|
# - Implement `validate_provider_config` method in your child class.
|
|
# - Use Childclass.new(whatsapp_channel: channel).perform.
|
|
######################################
|
|
|
|
class Whatsapp::Providers::BaseService
|
|
pattr_initialize [:whatsapp_channel!]
|
|
|
|
def send_message(_phone_number, _message)
|
|
raise 'Overwrite this method in child class'
|
|
end
|
|
|
|
def send_template(_phone_number, _template_info)
|
|
raise 'Overwrite this method in child class'
|
|
end
|
|
|
|
def sync_template
|
|
raise 'Overwrite this method in child class'
|
|
end
|
|
|
|
def validate_provider_config
|
|
raise 'Overwrite this method in child class'
|
|
end
|
|
|
|
def create_buttons(items)
|
|
buttons = []
|
|
items.each do |item|
|
|
button = { :type => 'reply', 'reply' => { 'id' => item['value'], 'title' => item['title'] } }
|
|
buttons << button
|
|
end
|
|
buttons
|
|
end
|
|
|
|
def create_rows(items)
|
|
rows = []
|
|
items.each do |item|
|
|
row = { 'id' => item['value'], 'title' => item['title'] }
|
|
rows << row
|
|
end
|
|
rows
|
|
end
|
|
|
|
def create_payload(type, message_content, action)
|
|
{
|
|
'type': type,
|
|
'body': {
|
|
'text': message_content
|
|
},
|
|
'action': action
|
|
}
|
|
end
|
|
|
|
def create_payload_based_on_items(message)
|
|
if message.content_attributes['items'].length <= 3
|
|
create_button_payload(message)
|
|
else
|
|
create_list_payload(message)
|
|
end
|
|
end
|
|
|
|
def create_button_payload(message)
|
|
buttons = create_buttons(message.content_attributes['items'])
|
|
json_hash = { 'buttons' => buttons }
|
|
create_payload('button', message.content, JSON.generate(json_hash))
|
|
end
|
|
|
|
def create_list_payload(message)
|
|
rows = create_rows(message.content_attributes['items'])
|
|
section1 = { 'rows' => rows }
|
|
sections = [section1]
|
|
json_hash = { :button => 'Choose an item', 'sections' => sections }
|
|
create_payload('list', message.content, JSON.generate(json_hash))
|
|
end
|
|
end
|