From 1919ef7e3909b83194e483bfaa24bb2a6d670f07 Mon Sep 17 00:00:00 2001 From: ZaikoXander <80606136+ZaikoXander@users.noreply.github.com> Date: Wed, 11 Oct 2023 16:30:17 -0300 Subject: [PATCH 1/2] feat(SendToBotpress): Improve support to buttons sending - At ValidEvent, allow to catch user response - At SendToBotpress, allow to send user response to botpress --- app/use_cases/chatwoot/send_to_botpress.rb | 16 ++++++++++++---- app/use_cases/chatwoot/valid_event.rb | 9 +++++++-- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/app/use_cases/chatwoot/send_to_botpress.rb b/app/use_cases/chatwoot/send_to_botpress.rb index 5d2859b..448dd91 100644 --- a/app/use_cases/chatwoot/send_to_botpress.rb +++ b/app/use_cases/chatwoot/send_to_botpress.rb @@ -7,11 +7,19 @@ class Chatwoot::SendToBotpress < Micro::Case def call! conversation_id = event['conversation']['id'] - message_content = event['content'] + if ( + event['content_type'] == 'input_select' && + event['content_attributes']['submitted_values'].respond_to?(:first) + ) + message_content = event['content_attributes']['submitted_values'].first['value'] + else + message_content = event['content'] + end + url = "#{botpress_endpoint}/api/v1/bots/#{botpress_bot_id}/converse/#{conversation_id}" body = { - 'text': "#{message_content}", + 'text': message_content, 'type': 'text', 'metadata': { 'event': event @@ -24,9 +32,9 @@ def call! Rails.logger.info("Status code: #{response.status}") Rails.logger.info("Body: #{response.body}") - if (response.status == 200) + if response.status == 200 Success result: JSON.parse(response.body) - elsif (response.status == 404 && response.body.include?('Invalid Bot ID')) + elsif response.status == 404 && response.body.include?('Invalid Bot ID') Failure result: { message: 'Invalid Bot ID' } else Failure result: { message: 'Invalid botpress endpoint' } diff --git a/app/use_cases/chatwoot/valid_event.rb b/app/use_cases/chatwoot/valid_event.rb index aad1ee0..09a03e3 100644 --- a/app/use_cases/chatwoot/valid_event.rb +++ b/app/use_cases/chatwoot/valid_event.rb @@ -4,12 +4,17 @@ class Chatwoot::ValidEvent < Micro::Case attributes :event def call! - if ( + if ( event['event'] == 'message_created' && event['message_type'] == 'incoming' && valid_status?(event['conversation']['status']) + ) || ( + event['event'] == 'message_updated' && + event['message_type'] == 'outgoing' && + event['content_type'] == 'input_select' && + event['content_attributes']['submitted_values'].respond_to?(:first) ) - Success result: {event: event} + Success result: { event: event } else Failure result: { message: 'Invalid event' } end From 5e863f83f6e338e0fa26736d8501b01a88461344 Mon Sep 17 00:00:00 2001 From: ZaikoXander <80606136+ZaikoXander@users.noreply.github.com> Date: Tue, 19 Dec 2023 14:59:52 -0300 Subject: [PATCH 2/2] refactor(ReceiveEvent): Remove unused methods - Remove valid_event? and valid_status? methods because it is implemented in ValidEvent class --- app/use_cases/chatwoot/receive_event.rb | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/app/use_cases/chatwoot/receive_event.rb b/app/use_cases/chatwoot/receive_event.rb index e5e5437..8d42552 100644 --- a/app/use_cases/chatwoot/receive_event.rb +++ b/app/use_cases/chatwoot/receive_event.rb @@ -7,19 +7,6 @@ def call! process_event(event) end - def valid_event?(event) - event['event'] == 'message_created' && event['message_type'] == 'incoming' && valid_status?(event['conversation']['status']) - end - - def valid_status?(status) - if ENV['CHATWOOT_ALLOWED_STATUSES'].present? - allowed_statuses = ENV['CHATWOOT_ALLOWED_STATUSES'].split(',') - else - allowed_statuses = %w[pending] - end - allowed_statuses.include?(status) - end - def process_event(event) if Chatwoot::ValidEvent.call(event: event).success? botpress_endpoint = event['botpress_endpoint'] || ENV['BOTPRESS_ENDPOINT'] @@ -47,4 +34,4 @@ def process_event(event) Failure result: { message: 'Invalid event' } end end -end \ No newline at end of file +end