mirror of
https://github.com/lingble/chatwoot.git
synced 2025-11-03 12:37:56 +00:00
- The name is not updated when the email is updated via the email collect message. This PR fixes that.
72 lines
2.0 KiB
Ruby
72 lines
2.0 KiB
Ruby
class Api::V1::Widget::MessagesController < Api::V1::Widget::BaseController
|
|
before_action :set_conversation, only: [:create]
|
|
before_action :set_message, only: [:update]
|
|
|
|
def index
|
|
@messages = conversation.nil? ? [] : message_finder.perform
|
|
end
|
|
|
|
def create
|
|
@message = conversation.messages.new(message_params)
|
|
build_attachment
|
|
@message.save!
|
|
end
|
|
|
|
def update
|
|
if @message.content_type == 'input_email'
|
|
@message.update!(submitted_email: contact_email)
|
|
ContactIdentifyAction.new(
|
|
contact: @contact,
|
|
params: { email: contact_email, name: contact_name }
|
|
).perform
|
|
else
|
|
@message.update!(message_update_params[:message])
|
|
end
|
|
rescue StandardError => e
|
|
render json: { error: @contact.errors, message: e.message }.to_json, status: :internal_server_error
|
|
end
|
|
|
|
private
|
|
|
|
def build_attachment
|
|
return if params[:message][:attachments].blank?
|
|
|
|
params[:message][:attachments].each do |uploaded_attachment|
|
|
attachment = @message.attachments.new(
|
|
account_id: @message.account_id,
|
|
file: uploaded_attachment
|
|
)
|
|
|
|
attachment.file_type = helpers.file_type(uploaded_attachment&.content_type) if uploaded_attachment.is_a?(ActionDispatch::Http::UploadedFile)
|
|
end
|
|
end
|
|
|
|
def set_conversation
|
|
@conversation = create_conversation if conversation.nil?
|
|
end
|
|
|
|
def message_finder_params
|
|
{
|
|
filter_internal_messages: true,
|
|
before: permitted_params[:before]
|
|
}
|
|
end
|
|
|
|
def message_finder
|
|
@message_finder ||= MessageFinder.new(conversation, message_finder_params)
|
|
end
|
|
|
|
def message_update_params
|
|
params.permit(message: [{ submitted_values: [:name, :title, :value, { csat_survey_response: [:feedback_message, :rating] }] }])
|
|
end
|
|
|
|
def permitted_params
|
|
# timestamp parameter is used in create conversation method
|
|
params.permit(:id, :before, :website_token, contact: [:name, :email], message: [:content, :referer_url, :timestamp, :echo_id])
|
|
end
|
|
|
|
def set_message
|
|
@message = @web_widget.inbox.messages.find(permitted_params[:id])
|
|
end
|
|
end
|