class SendReplyJob < ApplicationJob queue_as :high def perform(message_id) message = Message.find(message_id) conversation = message.conversation channel_name = conversation.inbox.channel.class.to_s services = { 'Channel::TwitterProfile' => ::Twitter::SendOnTwitterService, 'Channel::TwilioSms' => ::Twilio::SendOnTwilioService, 'Channel::Line' => ::Line::SendOnLineService, 'Channel::Telegram' => ::Telegram::SendOnTelegramService, 'Channel::Whatsapp' => ::Whatsapp::SendOnWhatsappService, 'Channel::Sms' => ::Sms::SendOnSmsService } case channel_name when 'Channel::FacebookPage' send_on_facebook_page(message) else services[channel_name].new(message: message).perform if services[channel_name].present? end end private def send_on_facebook_page(message) if message.conversation.additional_attributes['type'] == 'instagram_direct_message' ::Instagram::SendOnInstagramService.new(message: message).perform else ::Facebook::SendOnFacebookService.new(message: message).perform end end end