feat: Add APIs for Dialogflow integration V1 (#2155)

Co-authored-by: Muhsin Keloth <muhsinkeramam@gmail.com>
Co-authored-by: Pranav Raj S <pranav@chatwoot.com>
This commit is contained in:
Sojan Jose
2021-05-05 21:06:11 +05:30
committed by GitHub
parent fd0c26cdae
commit b30ecb27a6
19 changed files with 303 additions and 26 deletions

View File

@@ -1,11 +1,29 @@
class HookJob < ApplicationJob
queue_as :integrations
def perform(hook, message)
return unless hook.slack?
Integrations::Slack::SendOnSlackService.new(message: message, hook: hook).perform
def perform(hook, event_name, event_data = {})
case hook.app_id
when 'slack'
process_slack_integration(hook, event_name, event_data)
when 'dialogflow'
process_dialogflow_integration(hook, event_name, event_data)
end
rescue StandardError => e
Raven.capture_exception(e)
end
private
def process_slack_integration(hook, event_name, event_data)
return unless ['message.created'].include?(event_name)
message = event_data[:message]
Integrations::Slack::SendOnSlackService.new(message: message, hook: hook).perform
end
def process_dialogflow_integration(hook, event_name, event_data)
return unless ['message.created', 'message.updated'].include?(event_name)
Integrations::Dialogflow::ProcessorService.new(event_name: event_name, hook: hook, event_data: event_data).perform
end
end

View File

@@ -4,7 +4,16 @@ class HookListener < BaseListener
return unless message.reportable?
message.account.hooks.each do |hook|
HookJob.perform_later(hook, message)
HookJob.perform_later(hook, event.name, message: message)
end
end
def message_updated(event)
message = extract_message_and_account(event)[0]
return unless message.reportable?
message.account.hooks.each do |hook|
HookJob.perform_later(hook, event.name, message: message)
end
end
end

View File

@@ -142,7 +142,7 @@ class Conversation < ApplicationRecord
end
def set_bot_conversation
self.status = :bot if inbox.agent_bot_inbox&.active?
self.status = :bot if inbox.agent_bot_inbox&.active? || inbox.hooks.pluck(:app_id).include?('dialogflow')
end
def notify_conversation_creation

View File

@@ -38,6 +38,8 @@ class Integrations::App
case params[:id]
when 'slack'
ENV['SLACK_CLIENT_SECRET'].present?
when 'dialogflow'
false
else
true
end

View File

@@ -5,7 +5,7 @@
# id :bigint not null, primary key
# access_token :string
# hook_type :integer default("account")
# settings :text
# settings :jsonb
# status :integer default("disabled")
# created_at :datetime not null
# updated_at :datetime not null