module Api module V1 module Gateway class SmsController < BaseController # POST /api/v1/gateway/sms/received def received sender = params.require(:sender) message = params.require(:message) timestamp = params[:timestamp] || Time.current # Create inbound SMS message sms = SmsMessage.create!( gateway: current_gateway, direction: "inbound", phone_number: sender, message_body: message, status: "delivered", delivered_at: timestamp ) # Increment received counter current_gateway.increment_received_count! # Process inbound message asynchronously ProcessInboundSmsJob.perform_later(sms.id) render json: { success: true, message_id: sms.message_id } rescue ActionController::ParameterMissing => e render json: { error: e.message }, status: :bad_request end # POST /api/v1/gateway/sms/status def status message_id = params.require(:message_id) status = params.require(:status) error_message = params[:error_message] sms = SmsMessage.find_by!(message_id: message_id) case status when "delivered" sms.mark_delivered! when "failed" sms.mark_failed!(error_message) # Retry if possible RetryFailedSmsJob.perform_later(sms.id) if sms.can_retry? when "sent" sms.update!(status: "sent", sent_at: Time.current) end render json: { success: true } rescue ActionController::ParameterMissing => e render json: { error: e.message }, status: :bad_request end end end end end