# encoding: iso-8859-15
# Copyright (c) 2021, Altiria TIC SL
# All rights reserved.
# El uso de este código de ejemplo es solamente para mostrar el uso de la pasarela de envío de SMS de Altiria
# Para un uso personalizado del código, es necesario consultar la API de especificaciones técnicas, donde también podrás encontrar
# más ejemplos de programación en otros lenguajes de programación y otros protocolos (http, REST, web services)
# https://www.altiria.com/api-envio-sms/
require 'net/http'
require 'json'
require 'uri'
def altiriaSms(destinations, message, senderId, debug)
if debug
puts "Enter altiriaSms: destinations=#{destinations}, message=#{message}, senderId=#{senderId}"
end
begin
#YY y ZZ se corresponden con los valores de identificación del
#usuario en el sistema.
credentials = {:login => "YY", :passwd => "ZZ"}
destination = destinations.split(",")
messageData = {:msg => message, :senderId => senderId}
#Se construye el mensaje JSON
jsonData = {:credentials => credentials, :destination => destination, :message => messageData}
#Se fija la URL base de los recursos REST
baseUrl = 'http://www.altiria.net/apirest/ws'
uri = URI.parse(baseUrl+"/sendSms")
http = Net::HTTP.new(uri.host, uri.port)
#Se fija el tiempo máximo de espera para conectar con el servidor (5 segundos)
#Se fija el tiempo máximo de espera de la respuesta del servidor (60 segundos)
http.open_timeout = 5
http.read_timeout = 60
#Se inicia el objeto HTTP y se envía la petición
#Se añade el JSON al cuerpo de la petición codificado en UTF-8
request = Net::HTTP::Post.new(uri.request_uri,'Content-Type' => 'application/json;charset=UTF-8')
request.body = jsonData.to_json
#Se consigue la respuesta
response = http.request(request)
if debug
#Error en la respuesta del servidor
unless response.code == "200"
puts("ERROR GENERAL: #{response.code}")
puts("#{response.body}")
else
#Se procesa la respuesta capturada
puts("Código de estado HTTP: #{response.code}")
jsonResponse = JSON.parse(response.body)
puts("Código de estado de Altiria: #{jsonResponse['status']}")
unless jsonResponse['status'].include? "000"
puts("Error de Altiria: #{response.body}")
else
puts("Cuerpo de la respuesta:")
puts("details[0]destination: #{jsonResponse['details'][0]['destination']}")
puts("details[0]status: #{jsonResponse['details'][0]['status']}")
puts("details[1]destination: #{jsonResponse['details'][1]['destination']}")
puts("details[1]status: #{jsonResponse['details'][1]['status']}")
end
end
end
return response
rescue Net::OpenTimeout
puts "Tiempo de conexión agotado"
rescue Net::ReadTimeout
puts "Tiempo de respuesta agotado"
rescue Exception => e
puts "Error interno: #{e}"
end
end
puts "The function altiriaSms returns: #{altiriaSms('346xxxxxxxx,346yyyyyyyy','Mensaje de prueba', '', true).body}"
#No es posible utilizar el remitente en América pero sí en España y Europa
#Utilizar esta llamada solo si se cuenta con un remitente autorizado por Altiria
#puts "The function altiriaSms returns: #{altiriaSms('346xxxxxxxx,346yyyyyyyy','Mensaje de prueba', 'remitente', true).body}"