class Whatsapp::EmbeddedSignupService def initialize(account:, params:, inbox_id: nil) @account = account @code = params[:code] @business_id = params[:business_id] @waba_id = params[:waba_id] @phone_number_id = params[:phone_number_id] @inbox_id = inbox_id end def perform validate_parameters! # Exchange code for user access token access_token = Whatsapp::TokenExchangeService.new(@code).perform # Fetch phone information phone_info = Whatsapp::PhoneInfoService.new(@waba_id, @phone_number_id, access_token).perform # Validate token has access to the WABA Whatsapp::TokenValidationService.new(access_token, @waba_id).perform # Reauthorization flow if inbox_id is present if @inbox_id.present? Whatsapp::ReauthorizationService.new( account: @account, inbox_id: @inbox_id, phone_number_id: @phone_number_id, business_id: @business_id ).perform(access_token, phone_info) else # Create channel for new authorization waba_info = { waba_id: @waba_id, business_name: phone_info[:business_name] } Whatsapp::ChannelCreationService.new(@account, waba_info, phone_info, access_token).perform end rescue StandardError => e Rails.logger.error("[WHATSAPP] Embedded signup failed: #{e.message}") raise e end private def validate_parameters! missing_params = [] missing_params << 'code' if @code.blank? missing_params << 'business_id' if @business_id.blank? missing_params << 'waba_id' if @waba_id.blank? return if missing_params.empty? raise ArgumentError, "Required parameters are missing: #{missing_params.join(', ')}" end end