From 6953524b4082a144cdadd238ece0fd28f9cf0b53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C3=ADas=20Garc=C3=ADa=20Isa=C3=ADa?= Date: Fri, 6 Mar 2026 05:07:58 -0300 Subject: [PATCH 1/4] Add channel relative ID for iTexmo ATs Support confirmed via email that they send this `reference_id` - though we don't know for sure if it's an identifier or not. --- app/controllers/itexmo_controller.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/controllers/itexmo_controller.rb b/app/controllers/itexmo_controller.rb index a2959a46..c9e92aa1 100644 --- a/app/controllers/itexmo_controller.rb +++ b/app/controllers/itexmo_controller.rb @@ -30,7 +30,7 @@ def incoming to = params["gateway"] unknown_params = params.except( - 'originator', 'gateway', 'message', 'timestamp', # iTexmo API specification + 'originator', 'gateway', 'message', 'timestamp', 'reference_id', # iTexmo API specification 'account_name', 'channel_name', 'incoming_password', 'controller', 'action' # Rails-generated parameters ) @@ -38,6 +38,7 @@ def incoming msg.from = "sms://#{from}" msg.to = "sms://#{to}" msg.body = params["message"] + msg.channel_relative_id = params["reference_id"] account.route_at msg, channel From b6a7885dabcb5c1e0b6c24b2717e84139b9d1b98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C3=ADas=20Garc=C3=ADa=20Isa=C3=ADa?= Date: Wed, 22 Apr 2026 20:41:12 -0300 Subject: [PATCH 2/4] Updated iTexmo send message base URL They shared a new version of the API docs with us, and this seems to be the only difference. --- app/models/itexmo/itexmo.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/itexmo/itexmo.rb b/app/models/itexmo/itexmo.rb index dc8f5bc7..9a5ebee3 100644 --- a/app/models/itexmo/itexmo.rb +++ b/app/models/itexmo/itexmo.rb @@ -17,7 +17,7 @@ class Itexmo # endpoint shared internally by iTexmo - SMS_SEND_URL = 'https://api.itexmo.com/api/broadcast/access-code' + SMS_SEND_URL = 'https://api.itexmo.com/api/broadcast' def self.send_message_parameters(params) { From 6f9dd5f053e77b40b007710ea33468e477b92bee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C3=ADas=20Garc=C3=ADa=20Isa=C3=ADa?= Date: Wed, 22 Apr 2026 21:17:29 -0300 Subject: [PATCH 3/4] iTexmo: support 'sent' status in delivery reports --- app/controllers/itexmo_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/itexmo_controller.rb b/app/controllers/itexmo_controller.rb index c9e92aa1..1a58da24 100644 --- a/app/controllers/itexmo_controller.rb +++ b/app/controllers/itexmo_controller.rb @@ -57,7 +57,7 @@ def delivery ao_message = channel.ao_messages.find_by_id(params[:ao_message_id]) case params['Status'].try :downcase - when 'accepted' + when 'accepted', 'sent' ao_message.state = 'delivered' if ['queued', 'pending'].include?(ao_message.state) when 'delivered' ao_message.state = 'confirmed' From 584566ec93e32ed60437772d04b6ff2bbc1c4d31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C3=ADas=20Garc=C3=ADa=20Isa=C3=ADa?= Date: Wed, 22 Apr 2026 21:21:57 -0300 Subject: [PATCH 4/4] iTexmo: support rejected sends & recipient network From real-world tests. --- app/controllers/itexmo_controller.rb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/controllers/itexmo_controller.rb b/app/controllers/itexmo_controller.rb index 1a58da24..9ff244e0 100644 --- a/app/controllers/itexmo_controller.rb +++ b/app/controllers/itexmo_controller.rb @@ -61,6 +61,8 @@ def delivery ao_message.state = 'delivered' if ['queued', 'pending'].include?(ao_message.state) when 'delivered' ao_message.state = 'confirmed' + when 'rejected' + ao_message.state = 'failed' else channel.logger.warning :channel_id => channel.id, :ao_message_id => ao_message.id, :message => "Received unknown-status delivery notification for AO #{ao_message.id}: #{params.to_json}" end @@ -68,6 +70,7 @@ def delivery ao_message.custom_attributes["itexmo_network_submit_time"] = params['NetworkSubmitTime'] if params['NetworkSubmitTime'] ao_message.custom_attributes["itexmo_client_submit_time"] = params['ClientSubmitTime'] if params['ClientSubmitTime'] ao_message.custom_attributes["itexmo_done_time"] = params['DoneTime'] if params['DoneTime'] + ao_message.custom_attributes["itexmo_recipient_network"] = params['RecipientNetwork'] if params['RecipientNetwork'] ao_message.channel_relative_id ||= params['LongID'] ao_message.save!