fix(slack): Show correct sender name and avatar for Slack replies (#13624)
This commit is contained in:
@@ -27,6 +27,10 @@ module Integrations::Slack::SlackMessageHelper
|
||||
end
|
||||
|
||||
def create_message
|
||||
resolved_sender, sender_name, sender_avatar_url = resolve_slack_sender
|
||||
slack_sender_attrs = {}
|
||||
slack_sender_attrs[:sender_name] = sender_name if sender_name
|
||||
slack_sender_attrs[:sender_avatar_url] = sender_avatar_url if sender_avatar_url
|
||||
@message = conversation.messages.build(
|
||||
message_type: :outgoing,
|
||||
account_id: conversation.account_id,
|
||||
@@ -34,7 +38,8 @@ module Integrations::Slack::SlackMessageHelper
|
||||
content: Slack::Messages::Formatting.unescape(params[:event][:text] || ''),
|
||||
external_source_id_slack: params[:event][:ts],
|
||||
private: private_note?,
|
||||
sender: sender
|
||||
sender: resolved_sender,
|
||||
additional_attributes: slack_sender_attrs
|
||||
)
|
||||
process_attachments(params[:event][:files]) if attachments_present?
|
||||
@message.save!
|
||||
@@ -81,9 +86,22 @@ module Integrations::Slack::SlackMessageHelper
|
||||
@conversation ||= Conversation.where(identifier: params[:event][:thread_ts]).first
|
||||
end
|
||||
|
||||
def sender
|
||||
user_email = slack_client.users_info(user: params[:event][:user])[:user][:profile][:email]
|
||||
conversation.account.users.from_email(user_email)
|
||||
def resolve_slack_sender
|
||||
return [nil, nil, nil] unless params[:event][:user]
|
||||
|
||||
slack_user = slack_client.users_info(user: params[:event][:user])[:user]
|
||||
chatwoot_user = conversation.account.users.from_email(slack_user[:profile][:email])
|
||||
return [chatwoot_user, nil, nil] if chatwoot_user
|
||||
|
||||
sender_name = slack_user.dig(:profile, :display_name).presence ||
|
||||
slack_user[:real_name].presence ||
|
||||
slack_user[:name]
|
||||
sender_avatar_url = slack_user.dig(:profile, :image_192).presence
|
||||
[nil, sender_name, sender_avatar_url]
|
||||
rescue Slack::Web::Api::Errors::MissingScope
|
||||
raise
|
||||
rescue StandardError
|
||||
[nil, nil, nil]
|
||||
end
|
||||
|
||||
def private_note?
|
||||
|
||||
Reference in New Issue
Block a user