From bd7aeba484895e35739665b7c191cc93189ca589 Mon Sep 17 00:00:00 2001 From: Sojan Jose Date: Tue, 5 Oct 2021 23:35:06 +0530 Subject: [PATCH] chore: Provider API prototype (#3112) Enabling Support for Whatsapp via 360Dialog as a prototype for the provider APIs. Co-authored-by: Pranav Raj S --- .env.example | 2 +- .../api/v1/accounts/inboxes_controller.rb | 2 + .../webhooks/whatsapp_controller.rb | 6 + .../widgets/conversation/MessagesView.vue | 4 +- .../widgets/conversation/ReplyBox.vue | 8 +- app/javascript/dashboard/helper/inbox.js | 3 + .../dashboard/i18n/locale/en/inboxMgmt.json | 43 ++++-- .../dashboard/settings/inbox/ChannelList.vue | 2 +- .../routes/dashboard/settings/inbox/Index.vue | 3 + .../dashboard/settings/inbox/Settings.vue | 5 +- .../inbox/channels/360DialogWhatsapp.vue | 128 ++++++++++++++++++ .../settings/inbox/channels/Facebook.vue | 3 +- .../settings/inbox/channels/Twilio.vue | 10 +- .../settings/inbox/channels/Whatsapp.vue | 29 +++- .../settings/inbox/facebook/Reauthorize.vue | 3 +- app/javascript/shared/mixins/inboxMixin.js | 7 + app/jobs/send_reply_job.rb | 18 ++- app/jobs/webhooks/whatsapp_events_job.rb | 13 ++ app/models/account.rb | 1 + app/models/channel/whatsapp.rb | 67 +++++++++ .../contacts/contactable_inboxes_service.rb | 25 +++- .../whatsapp/incoming_message_service.rb | 61 +++++++++ .../whatsapp/send_on_whatsapp_service.rb | 11 ++ config/routes.rb | 1 + .../20210916112533_add_whatsapp_channel.rb | 11 ++ db/schema.rb | 24 +--- .../webhooks/whatsapp_controller_spec.rb | 12 ++ spec/factories/channel/channel_whatsapp.rb | 11 ++ spec/jobs/send_reply_job_spec.rb | 9 ++ .../whatsapp/incoming_message_service_spec.rb | 21 +++ .../whatsapp/send_on_whatsapp_service_spec.rb | 23 ++++ 31 files changed, 506 insertions(+), 60 deletions(-) create mode 100644 app/controllers/webhooks/whatsapp_controller.rb create mode 100644 app/javascript/dashboard/routes/dashboard/settings/inbox/channels/360DialogWhatsapp.vue create mode 100644 app/jobs/webhooks/whatsapp_events_job.rb create mode 100644 app/models/channel/whatsapp.rb create mode 100644 app/services/whatsapp/incoming_message_service.rb create mode 100644 app/services/whatsapp/send_on_whatsapp_service.rb create mode 100644 db/migrate/20210916112533_add_whatsapp_channel.rb create mode 100644 spec/controllers/webhooks/whatsapp_controller_spec.rb create mode 100644 spec/factories/channel/channel_whatsapp.rb create mode 100644 spec/services/whatsapp/incoming_message_service_spec.rb create mode 100644 spec/services/whatsapp/send_on_whatsapp_service_spec.rb diff --git a/.env.example b/.env.example index 3a5600495..dd4052f69 100644 --- a/.env.example +++ b/.env.example @@ -101,7 +101,7 @@ FB_APP_SECRET= FB_APP_ID= # https://developers.facebook.com/docs/messenger-platform/instagram/get-started#app-dashboard -IG_VERIFY_TOKEN +IG_VERIFY_TOKEN= # Twitter # documentation: https://www.chatwoot.com/docs/twitter-app-setup diff --git a/app/controllers/api/v1/accounts/inboxes_controller.rb b/app/controllers/api/v1/accounts/inboxes_controller.rb index df055923c..3f8686499 100644 --- a/app/controllers/api/v1/accounts/inboxes_controller.rb +++ b/app/controllers/api/v1/accounts/inboxes_controller.rb @@ -96,6 +96,8 @@ class Api::V1::Accounts::InboxesController < Api::V1::Accounts::BaseController Current.account.line_channels.create!(permitted_params(Channel::Line::EDITABLE_ATTRS)[:channel].except(:type)) when 'telegram' Current.account.telegram_channels.create!(permitted_params(Channel::Telegram::EDITABLE_ATTRS)[:channel].except(:type)) + when 'whatsapp' + Current.account.whatsapp_channels.create!(permitted_params(Channel::Whatsapp::EDITABLE_ATTRS)[:channel].except(:type)) end end diff --git a/app/controllers/webhooks/whatsapp_controller.rb b/app/controllers/webhooks/whatsapp_controller.rb new file mode 100644 index 000000000..7560da1e4 --- /dev/null +++ b/app/controllers/webhooks/whatsapp_controller.rb @@ -0,0 +1,6 @@ +class Webhooks::WhatsappController < ActionController::API + def process_payload + Webhooks::WhatsappEventsJob.perform_later(params.to_unsafe_hash) + head :ok + end +end diff --git a/app/javascript/dashboard/components/widgets/conversation/MessagesView.vue b/app/javascript/dashboard/components/widgets/conversation/MessagesView.vue index c84b14b01..db042b5b7 100644 --- a/app/javascript/dashboard/components/widgets/conversation/MessagesView.vue +++ b/app/javascript/dashboard/components/widgets/conversation/MessagesView.vue @@ -1,7 +1,7 @@