completed SMS gateway project
This commit is contained in:
41
app/jobs/send_sms_job.rb
Normal file
41
app/jobs/send_sms_job.rb
Normal file
@@ -0,0 +1,41 @@
|
||||
class SendSmsJob < ApplicationJob
|
||||
queue_as :default
|
||||
retry_on StandardError, wait: :exponentially_longer, attempts: 3
|
||||
|
||||
def perform(sms_message_id)
|
||||
sms = SmsMessage.find(sms_message_id)
|
||||
|
||||
# Skip if already sent or not outbound
|
||||
return unless sms.outbound? && sms.status == "queued"
|
||||
|
||||
# Find available gateway
|
||||
gateway = Gateway.available_for_sending
|
||||
|
||||
unless gateway
|
||||
Rails.logger.warn("No available gateway for message #{sms.message_id}")
|
||||
sms.update!(status: "pending")
|
||||
# Retry later
|
||||
SendSmsJob.set(wait: 1.minute).perform_later(sms_message_id)
|
||||
return
|
||||
end
|
||||
|
||||
# Update message status
|
||||
sms.mark_sent!(gateway)
|
||||
|
||||
# Broadcast message to gateway via WebSocket
|
||||
GatewayChannel.broadcast_to(gateway, {
|
||||
action: "send_sms",
|
||||
message_id: sms.message_id,
|
||||
recipient: sms.phone_number,
|
||||
message: sms.message_body
|
||||
})
|
||||
|
||||
Rails.logger.info("Sent SMS #{sms.message_id} to gateway #{gateway.device_id}")
|
||||
rescue ActiveRecord::RecordNotFound => e
|
||||
Rails.logger.error("SMS message not found: #{e.message}")
|
||||
rescue StandardError => e
|
||||
Rails.logger.error("Failed to send SMS #{sms_message_id}: #{e.message}")
|
||||
sms&.increment_retry!
|
||||
raise
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user