Files
MySMSAPio/app/controllers/api/v1/gateway/sms_controller.rb
2025-10-22 17:22:17 +08:00

62 lines
1.8 KiB
Ruby

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