62 lines
1.8 KiB
Ruby
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
|