Class: DialogLkEsms::Client
- Inherits:
-
Object
- Object
- DialogLkEsms::Client
- 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
-
#check_balance ⇒ Object
Mirrors PHP checkBalance Returns Result::Success(BalanceResult) with payload: { balance: BigDecimal } or Failure(BalanceResult).
-
#initialize(api_key:, base_url: "https://e-sms.dialog.lk/api/v1") ⇒ Client
constructor
A new instance of Client.
- #send_message(number_list:, message:, source_address:, push_notification_url: nil) ⇒ Object
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_balance ⇒ Object
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., 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 (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: .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 |