class Smess::Mblox
Attributes
password[RW]
profile_id[RW]
results[RW]
shortcode[RW]
sid[RW]
sms[R]
username[RW]
Public Class Methods
new(config)
click to toggle source
Calls superclass method
Smess::Output::new
# File lib/smess/outputs/mblox.rb, line 8 def initialize(config) super @results = [] end
Public Instance Methods
deliver()
click to toggle source
# File lib/smess/outputs/mblox.rb, line 13 def deliver xml_params = { subscriber_number: sms.to, message: "" } parts.each_with_index do |part, i| xml_params[:message] = part xml_params[:udh] = concatenation_udh(i+1, parts.length) if parts.length > 1 results << send_one_sms(xml_params) end results.first end
hash_data_for(xml_params)
click to toggle source
# File lib/smess/outputs/mblox.rb, line 38 def hash_data_for(xml_params) rand = (SecureRandom.random_number*100000000).to_i @message_id = rand xml_hash = { notification_request: { notification_header: { partner_name: username, partner_password: password }, notification_list: { notification: { message: xml_params[:message], profile: profile_id, udh: xml_params.fetch(:udh,""), sender_i_d: from, # expire_date: "", # operator: "", # tariff: "", subscriber: { subscriber_number: xml_params[:subscriber_number], session_id: "" }, # tags: '<Tag Name=”Number”>56</Tag><Tag Name=”City”>Paris</Tag>', # service_desc: "", # content_type: "", service_id: sid, attributes!: { sender_i_d: { "Type" => "Shortcode" } } }, attributes!: { notification: { "SequenceNumber" => "1", "MessageType" => "SMS" } } # FlashSMS }, attributes!: { notification_list: { "BatchID" => @message_id } } }, attributes!: { notification_request: { "Version" => "3.5" } } } xml_hash[:notification_request][:notification_list][:notification].delete :udh unless xml_params.key? :udh xml_hash end
validate_config()
click to toggle source
# File lib/smess/outputs/mblox.rb, line 29 def validate_config @username = config.fetch(:username) @password = config.fetch(:password) @shortcode = config.fetch(:shortcode) @profile_id = config.fetch(:profile_id) @sid = config.fetch(:sid) end
Private Instance Methods
concatenation_udh(num, total)
click to toggle source
# File lib/smess/outputs/mblox.rb, line 122 def concatenation_udh(num, total) "050003#{ref_id}#{total.to_s(16).rjust(2,'0')}#{(num).to_s(16).rjust(2,'0')}".scan(/../).join(':').prepend(':') end
from()
click to toggle source
# File lib/smess/outputs/mblox.rb, line 82 def from shortcode end
http_body(xml_params)
click to toggle source
# File lib/smess/outputs/mblox.rb, line 111 def http_body(xml_params) xml = xml_data_for(xml_params) "XMLDATA="+URI::encode( xml.encode("ISO-8859-1") ) end
normal_result(response)
click to toggle source
# File lib/smess/outputs/mblox.rb, line 130 def normal_result(response) response_data = Nori.parse(response.body) response_code = response_code_for response_data # Successful response result = { message_id: @message_id, response_code: response_code, response: response_data, destination_address: sms.to, data: result_data } end
parts()
click to toggle source
# File lib/smess/outputs/mblox.rb, line 86 def parts @parts ||= split_parts end
ref_id()
click to toggle source
# File lib/smess/outputs/mblox.rb, line 126 def ref_id @ref_id ||= Random.new.rand(255).to_s(16).rjust(2,"0") end
request()
click to toggle source
# File lib/smess/outputs/mblox.rb, line 154 def request @request ||= HTTPI::Request.new end
response_code_for(response_data)
click to toggle source
# File lib/smess/outputs/mblox.rb, line 143 def response_code_for(response_data) request_result_code = response_data[:notification_request_result][:notification_result_header][:request_result_code] rescue "-1" return "request:#{request_result_code}" unless request_result_code == "0" notification_result_code = response_data[:notification_request_result][:notification_result_list][:notification_result][:notification_result_code] rescue "-1" return "notification:#{notification_result_code}" unless notification_result_code == "0" subscriber_result_code = response_data[:notification_request_result][:notification_result_list][:notification_result][:subscriber_result][:subscriber_result_code] rescue "-1" (subscriber_result_code == "0") ? subscriber_result_code : "subscriber:#{subscriber_result_code}" end
result_data()
click to toggle source
# File lib/smess/outputs/mblox.rb, line 170 def result_data { to: sms.to, text: sms.message.strip_nongsm_chars, from: from } end
result_for_error(e)
click to toggle source
# File lib/smess/outputs/mblox.rb, line 158 def result_for_error(e) { response_code: '-1', response: { temporaryError: 'true', responseCode: '-1', responseText: e.message }, data: result_data } end
send_one_sms(xml_params)
click to toggle source
# File lib/smess/outputs/mblox.rb, line 94 def send_one_sms(xml_params) request.url = 'https://xml4.us.mblox.com:443/send' request.headers["Content-Type"] = "application/x-www-form-urlencoded" request.body = http_body(xml_params) begin HTTPI.log_level = :debug response = HTTPI.post request result = normal_result(response) rescue => e logger.warn response # connection problem or some error result = result_for_error(e) end result end
split_parts()
click to toggle source
# File lib/smess/outputs/mblox.rb, line 90 def split_parts Smess.split_sms(sms.message.strip_nongsm_chars).reject {|s| s.empty? } end
xml_data_for(xml_params)
click to toggle source
# File lib/smess/outputs/mblox.rb, line 116 def xml_data_for(xml_params) Gyoku.convert_symbols_to :camelcase '<?xml version="1.0"?>'+ Gyoku.xml( hash_data_for(xml_params) ) end