fix(slack): Show correct sender name and avatar for Slack replies (#13624)

This commit is contained in:
Muhsin Keloth
2026-02-26 14:45:15 +04:00
committed by GitHub
parent 109b43aadb
commit 6b3f1114fd
4 changed files with 151 additions and 20 deletions

View File

@@ -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?