From 0cb733397766cf3c5ae095f45f7af52a9b016576 Mon Sep 17 00:00:00 2001 From: Pranav Raj S Date: Thu, 30 Apr 2020 01:41:13 +0530 Subject: [PATCH] Feature: Twilio Whatsapp Integration (#779) Twilio Whatsapp Integration Co-authored-by: Sojan --- Gemfile | 1 + Gemfile.lock | 2 + app/builders/contact_builder.rb | 3 +- .../messages/outgoing/normal_builder.rb | 3 +- .../channels/twilio_channels_controller.rb | 49 ++++++++++------- app/controllers/twilio/callback_controller.rb | 4 +- .../assets/images/channels/whatsapp.png | Bin 0 -> 46629 bytes .../components/widgets/Thumbnail.vue | 8 +++ .../widgets/conversation/ReplyBox.vue | 9 ++- .../dashboard/i18n/locale/de/inboxMgmt.json | 33 ++++++++--- .../dashboard/i18n/locale/en/inboxMgmt.json | 36 +++++++++--- .../dashboard/conversation/ContactPanel.vue | 9 ++- .../settings/inbox/channels/Twilio.vue | 40 ++++++++++---- app/models/channel/twilio_sms.rb | 3 + app/models/message.rb | 5 +- .../twilio/incoming_message_service.rb | 52 +++++++++++++++--- .../twilio/outgoing_message_service.rb | 21 +++++-- ...20200429082655_add_medium_to_twilio_sms.rb | 5 ++ db/schema.rb | 5 +- lib/local_resource.rb | 12 ++-- .../twilio_channels_controller_spec.rb | 3 +- spec/factories/channel/twilio_sms.rb | 1 + .../twilio/outgoing_message_service_spec.rb | 15 +++++ 23 files changed, 238 insertions(+), 81 deletions(-) create mode 100644 app/javascript/dashboard/assets/images/channels/whatsapp.png create mode 100644 db/migrate/20200429082655_add_medium_to_twilio_sms.rb diff --git a/Gemfile b/Gemfile index 957784f55..9f4d3cf40 100644 --- a/Gemfile +++ b/Gemfile @@ -17,6 +17,7 @@ gem 'jbuilder' gem 'kaminari' gem 'responders' gem 'rest-client' +gem 'telephone_number' gem 'time_diff' gem 'tzinfo-data' gem 'valid_email2' diff --git a/Gemfile.lock b/Gemfile.lock index bf9a33cfc..577676cf5 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -448,6 +448,7 @@ GEM faraday inflecto virtus + telephone_number (1.4.6) thor (0.20.3) thread_safe (0.3.6) time_diff (0.3.0) @@ -560,6 +561,7 @@ DEPENDENCIES spring spring-watcher-listen telegram-bot-ruby + telephone_number time_diff twilio-ruby (~> 5.32.0) twitty! diff --git a/app/builders/contact_builder.rb b/app/builders/contact_builder.rb index 70b994ac2..9bb3ef3ac 100644 --- a/app/builders/contact_builder.rb +++ b/app/builders/contact_builder.rb @@ -21,13 +21,14 @@ class ContactBuilder phone_number: contact_attributes[:phone_number], email: contact_attributes[:email], identifier: contact_attributes[:identifier], - additional_attributes: contact_attributes[:identifier] + additional_attributes: contact_attributes[:additional_attributes] ) contact_inbox = ::ContactInbox.create!( contact_id: contact.id, inbox_id: inbox.id, source_id: source_id ) + ::ContactAvatarJob.perform_later(contact, contact_attributes[:avatar_url]) if contact_attributes[:avatar_url] contact_inbox rescue StandardError => e diff --git a/app/builders/messages/outgoing/normal_builder.rb b/app/builders/messages/outgoing/normal_builder.rb index 3b44fcd0e..1b15f24c0 100644 --- a/app/builders/messages/outgoing/normal_builder.rb +++ b/app/builders/messages/outgoing/normal_builder.rb @@ -15,7 +15,6 @@ class Messages::Outgoing::NormalBuilder def perform @message = @conversation.messages.build(message_params) - @message.save if @attachments.present? @attachments.each do |uploaded_attachment| attachment = @message.attachments.new( @@ -24,8 +23,8 @@ class Messages::Outgoing::NormalBuilder ) attachment.file.attach(uploaded_attachment) end - @message.save end + @message.save @message end diff --git a/app/controllers/api/v1/accounts/channels/twilio_channels_controller.rb b/app/controllers/api/v1/accounts/channels/twilio_channels_controller.rb index c3d6554fd..c0c121900 100644 --- a/app/controllers/api/v1/accounts/channels/twilio_channels_controller.rb +++ b/app/controllers/api/v1/accounts/channels/twilio_channels_controller.rb @@ -2,13 +2,15 @@ class Api::V1::Accounts::Channels::TwilioChannelsController < Api::BaseControlle before_action :authorize_request def create - authenticate_twilio - build_inbox - setup_webhooks - rescue Twilio::REST::TwilioError => e - render_could_not_create_error(e.message) - rescue StandardError => e - render_could_not_create_error(e.message) + ActiveRecord::Base.transaction do + authenticate_twilio + build_inbox + setup_webhooks if @twilio_channel.sms? + rescue Twilio::REST::TwilioError => e + render_could_not_create_error(e.message) + rescue StandardError => e + render_could_not_create_error(e.message) + end end private @@ -26,25 +28,30 @@ class Api::V1::Accounts::Channels::TwilioChannelsController < Api::BaseControlle ::Twilio::WebhookSetupService.new(inbox: @inbox).perform end + def phone_number + medium == 'sms' ? permitted_params[:phone_number] : "whatsapp:#{permitted_params[:phone_number]}" + end + + def medium + permitted_params[:medium] + end + def build_inbox - ActiveRecord::Base.transaction do - twilio_sms = current_account.twilio_sms.create( - account_sid: permitted_params[:account_sid], - auth_token: permitted_params[:auth_token], - phone_number: permitted_params[:phone_number] - ) - @inbox = current_account.inboxes.create( - name: permitted_params[:name], - channel: twilio_sms - ) - rescue StandardError => e - render_could_not_create_error(e.message) - end + @twilio_channel = current_account.twilio_sms.create!( + account_sid: permitted_params[:account_sid], + auth_token: permitted_params[:auth_token], + phone_number: phone_number, + medium: medium + ) + @inbox = current_account.inboxes.create( + name: permitted_params[:name], + channel: @twilio_channel + ) end def permitted_params params.require(:twilio_channel).permit( - :account_id, :phone_number, :account_sid, :auth_token, :name + :account_id, :phone_number, :account_sid, :auth_token, :name, :medium ) end end diff --git a/app/controllers/twilio/callback_controller.rb b/app/controllers/twilio/callback_controller.rb index f6cb5356c..44dcc9b6f 100644 --- a/app/controllers/twilio/callback_controller.rb +++ b/app/controllers/twilio/callback_controller.rb @@ -23,7 +23,9 @@ class Twilio::CallbackController < ApplicationController :FromZip, :Body, :ToCountry, - :FromState + :FromState, + :MediaUrl0, + :MediaContentType0 ) end end diff --git a/app/javascript/dashboard/assets/images/channels/whatsapp.png b/app/javascript/dashboard/assets/images/channels/whatsapp.png new file mode 100644 index 0000000000000000000000000000000000000000..547ff675ef6c0763ddf5c9bd5f58ceaff8e6d649 GIT binary patch literal 46629 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 FV1lhl5k3F_ literal 0 HcmV?d00001 diff --git a/app/javascript/dashboard/components/widgets/Thumbnail.vue b/app/javascript/dashboard/components/widgets/Thumbnail.vue index 01cd7f76b..9110939ea 100644 --- a/app/javascript/dashboard/components/widgets/Thumbnail.vue +++ b/app/javascript/dashboard/components/widgets/Thumbnail.vue @@ -33,6 +33,14 @@ :style="badgeStyle" src="~dashboard/assets/images/twitter-badge.png" /> + +