Class: DialogLkEsms::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/dialog_lk_esms/client.rb

Defined Under Namespace

Classes: BalanceResult, SendResult

Constant Summary collapse

STATUS_MESSAGES =
{
  "1" => "Success",
  "2001" => "Error occurred during campaign creation",
  "2002" => "Bad request",
  "2003" => "Empty number list",
  "2004" => "Empty message body",
  "2005" => "Invalid number list format",
  "2006" => "Not eligible to send messages via GET requests",
  "2007" => "Invalid key (esmsqk parameter is invalid)",
  "2008" => "Insufficient balance or package quota",
  "2009" => "No valid numbers after mask-block removal",
  "2010" => "Not eligible to consume packaging",
  "2011" => "Transactional error"
}

Instance Method Summary collapse

Constructor Details

#initialize(api_key:, base_url: "https://e-sms.dialog.lk/api/v1") ⇒ Client

Returns a new instance of Client.



34
35
36
37
38
# File 'lib/dialog_lk_esms/client.rb', line 34

def initialize(api_key:, base_url: "https://e-sms.dialog.lk/api/v1")
  @api_key = api_key
  @base_url = base_url.chomp("/")
  raise DialogLkEsms::Errors::ConfigurationError, "api_key is required" if @api_key.nil? || @api_key.empty?
end

Instance Method Details

#check_balanceObject

Mirrors PHP checkBalance Returns Result::Success(BalanceResult) with payload: { balance: BigDecimal } or Failure(BalanceResult)



70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/dialog_lk_esms/client.rb', line 70

def check_balance
  endpoint = "/message-via-url/check/balance"
  query = { esmsqk: @api_key }
  raw = yield http_get(endpoint, query)
  
  
  status, balance_str = raw.to_s.split("|", 2)
  status = status&.strip.to_s
  
  
  if status.empty?
    result = BalanceResult.new(code: "parse_error", ok: false, message: "Unknown response or error", raw: raw)
    return Failure(result)
  end
  
  
  if status == "1"
    bd = coerce_decimal(balance_str)
    payload = { balance: bd }
    result = BalanceResult.new(code: status, ok: true, message: "Success", raw: raw, payload: payload)
    Success(result)
  else
    msg = STATUS_MESSAGES.fetch(status, "Unknown response or error")
    result = BalanceResult.new(code: status, ok: false, message: msg, raw: raw)
    Failure(result)
  end
rescue => e
  Failure(BalanceResult.new(code: "exception", ok: false, message: e.message, raw: nil))
end

#send_message(number_list:, message:, source_address:, push_notification_url: nil) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/dialog_lk_esms/client.rb', line 40

def send_message(number_list:, message:, source_address:, push_notification_url: nil)
  numbers = Array(number_list).map(&:to_s).join(",")
  query = {
    esmsqk: @api_key,
    list: numbers,
    source_address: source_address.to_s,
    message: message.to_s
  }
  # Mirrors PHP sendMessage
  
  query[:push_notification_url] = push_notification_url.to_s if push_notification_url
  
  
  endpoint = "/message-via-url/create/url-campaign"
  raw = yield http_get(endpoint, query)
  
  
  code = raw.to_s.strip
  msg = STATUS_MESSAGES.fetch(code, "Unknown response: #{code}")
  ok = (code == "1")
  
  
  result = SendResult.new(code: code, ok: ok, message: msg, raw: raw)
  ok ? Success(result) : Failure(result)
end