Пример использования ePochta SMS api 3.0 на языке Ruby
Отправка смс
Получения статуса отправленной смс
Получение цены отправки
Получение баланса
Отправка смс:
require 'uri'
require 'net/http'
require 'active_support/all'
require 'digest/md5'
#
# Epochta REST API Ruby class
#
# Documentation
# /api/v3.php
#
class EpochtaApi3
#
# Epochta API constructor
#
# @param [String] username
# @param [String] password
# @raise [Exception]
#
def initialize(public_key, secret_key)
raise 'Empty public_key or secret_key' if public_key.to_s.empty? || secret_key.to_s.empty?
@public_key = public_key
@secret_key = secret_key
@protocol = 'http'
@url = @protocol + "://api.atompark.com/api/sms/3.0/"
end
#
# Form and send request to API service
#
# @param [Hash] data
# @return [Hash]
# @raise [Exception]
#
def send_request(action, data = {})
request_data = {}
uri = URI.parse("#{@url}/#{action}")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true if @protocol == 'http'
request = Net::HTTP::Post.new(uri.request_uri)
request.set_form_data(data)
begin
response = http.request(request)
request_data[:data] = JSON.parse(response.body)
request_data[:http_code] = response.code
rescue Exception => e
puts "Exception \n message: #{e.message} \n backtrace: #{e.backtrace}"
end
handle_result(request_data)
end
private :send_request
#
# Process results
#
# @param [String] custom_message
# @return [Hash]
#
def handle_error (custom_message = nil)
data = { is_error: true }
data[:message] = custom_message unless custom_message.nil?
data
end
private :handle_error
#
# Process errors
#
# @param [Hash] data
# @return [Hash]
#
def handle_result (data)
unless data[:http_code].to_i == 200
data[:is_error] = true
end
data
end
private :handle_result
#
# Calc sum for request
#
# @param [Hash] data
# @param [String] action
# @return [String]
#
def calc_sum(data, action)
raise "Empty data or action" if data.empty? || action.empty?
data["version"]="3.0"
data["action"]=action
sum = ""
sorted_data = data.sort.to_h
sorted_data.each { |key,value| sum += value.to_s }
sum += @secret_key
Digest::MD5.hexdigest(sum)
end
private :calc_sum
#
# Send sms
#
# @param [String] book_name
# @return [Hash]
#
def send_sms(sender, text, number, datetime = "", sms_lifetime = 0)
return handle_error('Empty sender or text or phones') if sender.empty? || text.empty? || number.empty?
action="sendSMS"
data = {
"sender"=> sender,
"text"=> text,
"phone"=> number,
"datetime"=> datetime,
"sms_lifetime"=> sms_lifetime,
"key"=> @public_key
}
data[:sum] = calc_sum(data, action)
send_request(action, data)
end
#
# Add addressbook
#
# @param [String] name
# @param [String] description
# @return [Hash]
#
def add_addressbook(name, description = "")
return handle_error('Empty name') if name.empty?
action="addAddressbook"
data = {
"name"=> name,
"description"=> description,
"key"=> @public_key
}
data[:sum] = calc_sum(data, action)
send_request(action, data)
end
#
# Add phone to addressbook
#
# @param [Fixnum] id_addressbook
# @param [String] phone
# @param [String] variables
# @return [Hash]
#
def add_phone_to_addressbook(id_addressbook, phone, variables = "")
return handle_error('Empty id_addressbook or phone') if id_addressbook.nil? || id_addressbook == 0 || phone.empty?
action="addPhoneToAddressBook"
data = {
"idAddressBook"=> id_addressbook,
"phone"=> phone,
"variables"=> variables,
"key"=> @public_key
}
data[:sum] = calc_sum(data, action)
send_request(action, data)
end
#
# Get user balance
#
# @param [String] currency
# @return [Hash]
#
def get_user_balance(currency = "USD")
action="getUserBalance"
data = {
"currency"=> currency,
"key"=> @public_key
}
puts data
data[:sum] = calc_sum(data, action)
send_request(action, data)
end
#
# Create campaign
#
# @param [String] sender
# @param [String] text
# @param [Fixnum] list_id
# @param [String] datetime
# @param [Fixnum] batch
# @param [Fixnum] batchinterval
# @param [Fixnum] sms_lifetime
# @param [String] control_phone
# @return [Hash]
#
def create_campaign(sender, text, list_id, datetime = "", batch = 0, batchinterval = 0, sms_lifetime = 0, control_phone = "")
return handle_error('Empty sender or text or list_id') if sender.empty? || text.empty? || list_id.to_s.empty?
action="createCampaign"
data = {
"sender"=> sender,
"text"=> text,
"list_id"=> list_id,
"datetime"=> datetime,
"batch" => batch,
"batchinterval" => batchinterval,
"sms_lifetime"=> sms_lifetime,
"control_phone"=> control_phone,
"key"=> @public_key
}
data[:sum] = calc_sum(data, action)
send_request(action, data)
end
end
#usage
public_key = 'your public key'
private_key = 'your private key'
epochta_api3 = EpochtaApi3.new(public_key, private_key)
puts "get_user_balance"
puts epochta_api3.get_user_balance
puts "\n"
#puts "add_addressbook"
#puts epochta_api3.add_addressbook("ruby book 1") # 1481422
#puts "\n"
#puts "add_phone_to_addressbook"
#puts epochta_api3.add_phone_to_addressbook(1481422, "380933630000") # 457106233
#puts "\n"
#puts "create_campaign"
#puts epochta_api3.create_campaign("SmSender", "text", 1481422) # {:data=>{"result"=>{"id"=>118554988, "price"=>0.013300399011970358, "currency"=>"USD"}}, :http_code=>"200"}
#puts "\n"
puts "send_sms"
puts epochta_api3.send_sms("TeSender", "ruby send sms 1", "380933630000") # {:data=>{"result"=>{"id"=>118555219, "price"=>0.013300399011970358, "currency"=>"USD"}}, :http_code=>"200"}
puts "\n"
По запросу предоставляется необходимое количество дополнительных смс для тестирования сервиса массовых смс-уведомлений ePochta SMS.
Есть вопрос?
- 8 (800) 555-09-63
- Бесплатно по России
Новости:
- 2020-11-27
- Внимание! С 1 декабря 2020 года меняется цена на отправку СМС в сети Билайн
- 2020-11-23
- ePochta объявляет старт Черной Пятницы: Спеццена на рассылку в WhatsApp
- 2020-11-18
- С 1 декабря 2020 года оператор МТС повышает стоимость СМС
- 2020-05-04
- Вебинар: СМС маркетинг. Что писать в тексте СМС рассылок?
- 2020-04-28
- Операторы повышают цены СМС рассылки по прямому каналу в РФ


7 (495) 649-62-48
Украинский
Казахский
English
Italiano
