From d8da1f5bf30a6485f644eee3f7ff056717ad23b8 Mon Sep 17 00:00:00 2001 From: Muhsin Keloth Date: Thu, 9 Oct 2025 21:05:53 +0530 Subject: [PATCH] fix: Handle video file types in Slack file shares (#12630) Fixes https://linear.app/chatwoot/issue/CW-5752/fix-nomethoderror-when-processing-video-files-in-slack-integration #### Problem When users shared video files (like MP4) through Slack, the `file_type` method in `SlackMessageHelper` would return `nil` for unsupported file types. This caused a `NoMethodError (undefined method 'to_sym' for nil)` when the attachment was being processed, as the system expected a symbol value for the `file_type` attribute. #### Solution - Added video file type support in the `file_type` method case statement - Added `else` clause to default unknown file types to `:file` instead of returning `nil` - This ensures `file_type` always returns a symbol, preventing the `to_sym` error --- lib/integrations/slack/slack_message_helper.rb | 4 +++- .../slack/incoming_message_builder_spec.rb | 13 +++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/lib/integrations/slack/slack_message_helper.rb b/lib/integrations/slack/slack_message_helper.rb index 52ec4caad..0ee328fb3 100644 --- a/lib/integrations/slack/slack_message_helper.rb +++ b/lib/integrations/slack/slack_message_helper.rb @@ -70,7 +70,9 @@ module Integrations::Slack::SlackMessageHelper case attachment[:filetype] when 'png', 'jpeg', 'gif', 'bmp', 'tiff', 'jpg' :image - when 'pdf' + when 'mp4', 'avi', 'mov', 'wmv', 'flv', 'webm' + :video + else :file end end diff --git a/spec/lib/integrations/slack/incoming_message_builder_spec.rb b/spec/lib/integrations/slack/incoming_message_builder_spec.rb index 608324e8f..2ce206489 100644 --- a/spec/lib/integrations/slack/incoming_message_builder_spec.rb +++ b/spec/lib/integrations/slack/incoming_message_builder_spec.rb @@ -157,6 +157,19 @@ describe Integrations::Slack::IncomingMessageBuilder do expect(conversation.messages.count).to eql(messages_count) end + + it 'handles different file types correctly' do + expect(hook).not_to be_nil + video_attachment_params = message_with_attachments.deep_dup + video_attachment_params[:event][:files][0][:filetype] = 'mp4' + video_attachment_params[:event][:files][0][:mimetype] = 'video/mp4' + + builder = described_class.new(video_attachment_params) + allow(builder).to receive(:sender).and_return(nil) + + expect { builder.perform }.not_to raise_error + expect(conversation.messages.last.attachments).to be_any + end end context 'when link shared' do