From 7e5ec7925c35188d0c67cb9ce06afd213aeb5023 Mon Sep 17 00:00:00 2001 From: Muhsin Keloth Date: Fri, 8 Apr 2022 14:53:37 +0530 Subject: [PATCH] feat: Add `phone_number` & `custom_attributes` in create conversation end point (#4421) --- .../api/v1/widget/base_controller.rb | 26 ++++++++++++++++--- .../api/v1/widget/conversations_controller.rb | 11 ++++++-- app/javascript/widget/api/endPoints.js | 2 ++ 3 files changed, 33 insertions(+), 6 deletions(-) diff --git a/app/controllers/api/v1/widget/base_controller.rb b/app/controllers/api/v1/widget/base_controller.rb index 8df4737db..67132869d 100644 --- a/app/controllers/api/v1/widget/base_controller.rb +++ b/app/controllers/api/v1/widget/base_controller.rb @@ -39,7 +39,8 @@ class Api::V1::Widget::BaseController < ApplicationController browser: browser_params, referer: permitted_params[:message][:referer_url], initiated_at: timestamp_params - } + }, + custom_attributes: permitted_params[:custom_attributes].presence || {} } end @@ -52,16 +53,33 @@ class Api::V1::Widget::BaseController < ApplicationController mergee_contact: @contact ).perform else - @contact.update!(email: email, name: contact_name) + @contact.update!(email: email) + end + end + + def update_contact_phone_number(phone_number) + contact_with_phone_number = @current_account.contacts.find_by(phone_number: phone_number) + if contact_with_phone_number + @contact = ::ContactMergeAction.new( + account: @current_account, + base_contact: contact_with_phone_number, + mergee_contact: @contact + ).perform + else + @contact.update!(phone_number: phone_number) end end def contact_email - permitted_params[:contact][:email].downcase + permitted_params[:contact][:email].downcase if permitted_params[:contact].present? end def contact_name - params[:contact][:name] || contact_email.split('@')[0] + params[:contact][:name] || contact_email.split('@')[0] if contact_email.present? + end + + def contact_phone_number + params[:contact][:phone_number] end def browser_params diff --git a/app/controllers/api/v1/widget/conversations_controller.rb b/app/controllers/api/v1/widget/conversations_controller.rb index 3b0a460e4..ef2422bef 100644 --- a/app/controllers/api/v1/widget/conversations_controller.rb +++ b/app/controllers/api/v1/widget/conversations_controller.rb @@ -7,12 +7,18 @@ class Api::V1::Widget::ConversationsController < Api::V1::Widget::BaseController def create ActiveRecord::Base.transaction do - update_contact(contact_email) if @contact.email.blank? && contact_email.present? + process_update_contact @conversation = create_conversation conversation.messages.create(message_params) end end + def process_update_contact + update_contact(contact_email) if @contact.email.blank? && contact_email.present? + update_contact_phone_number(contact_phone_number) if @contact.phone_number.blank? && contact_phone_number.present? + @contact.update!(name: contact_name) if contact_name.present? + end + def update_last_seen head :ok && return if conversation.nil? @@ -63,6 +69,7 @@ class Api::V1::Widget::ConversationsController < Api::V1::Widget::BaseController end def permitted_params - params.permit(:id, :typing_status, :website_token, :email, contact: [:name, :email], message: [:content, :referer_url, :timestamp, :echo_id]) + params.permit(:id, :typing_status, :website_token, :email, contact: [:name, :email], message: [:content, :referer_url, :timestamp, :echo_id], + custom_attributes: {}) end end diff --git a/app/javascript/widget/api/endPoints.js b/app/javascript/widget/api/endPoints.js index df37f2363..870275382 100755 --- a/app/javascript/widget/api/endPoints.js +++ b/app/javascript/widget/api/endPoints.js @@ -10,12 +10,14 @@ const createConversation = params => { contact: { name: params.fullName, email: params.emailAddress, + phone_number: params.phoneNumber, }, message: { content: params.message, timestamp: new Date().toString(), referer_url: referrerURL, }, + custom_attributes: params.customAttributes, }, }; };