class YunPianSMS::Sender

Constants

MAX_RECIPIENT_NUMBER

云片网群发 api 最多支持同时发 1000 个号码, 超过 1000 个需要分批发

Public Class Methods

template_batch_send(template_id, mobile_nos, params) click to toggle source
# File lib/yunpian_sms/sender.rb, line 16
def self.template_batch_send template_id, mobile_nos, params
  successful_count = 0
  successful_people = []
  failed_people = []
  total_fee = 0.0
  uri = URI("#{YunPianSMS.server}/v2/sms/tpl_batch_send.json")

  details = mobile_nos.each_slice(MAX_RECIPIENT_NUMBER).map do |sliced_mobile_nos|
    mobile = sliced_mobile_nos.join(',')
    result = send_internal(uri, template_id, mobile, params)
    successful_count += result.body['total_count']
    total_fee += result.body['total_fee'].to_f
    result.body['data'].each do |data|
      mobile = data['mobile']
      if data['code'] == 0
        successful_people << mobile
      else
        failed_people << mobile
      end
    end
    result
  end

  YunPianSMS::BatchResult.new(successful_count, successful_people, failed_people, total_fee, details)
end
template_single_send(template_id, mobile, params) click to toggle source
# File lib/yunpian_sms/sender.rb, line 11
def self.template_single_send template_id, mobile, params
  uri = URI("#{YunPianSMS.server}/v2/sms/tpl_single_send.json")
  send_internal uri, template_id, mobile, params
end

Private Class Methods

encode(params) click to toggle source
# File lib/yunpian_sms/sender.rb, line 60
def self.encode params
  encoded = params.map {|k, v| "##{URI::encode(k.to_s)}#=#{URI::encode(v)}"}.join('&')
  if YunPianSMS.debug_mode && YunPianSMS.logger
    YunPianSMS.logger.debug "Encoded tpl value #{encoded}"
  end
  encoded
end
send_internal(uri, template_id, mobile, params) click to toggle source
# File lib/yunpian_sms/sender.rb, line 44
def self.send_internal uri, template_id, mobile, params
  res = Net::HTTP.post_form(
      uri,
      apikey: YunPianSMS.api_key,
      tpl_id: template_id,
      mobile: mobile,
      tpl_value: encode(params)
  )
  if YunPianSMS.debug_mode && YunPianSMS.logger
    YunPianSMS.logger.debug "Sms sending response code #{res.code} body #{res.body}"
  end
  json = JSON.parse(res.body)
  successful = res.kind_of?(Net::HTTPSuccess)
  YunPianSMS::Result.new(successful, json.to_hash)
end