/SMSC

SMSC wrapper (smsc.ru, smsc.kz)

Primary LanguageRubyMIT LicenseMIT

SMSC

Maintainability

Обертка над сервисом smsc.kz.

  • Проверка баланса
  • Отправка SMS-сообщений
  • Отправка flash SMS-сообщений (всплывающих на экране)
  • Транслит/Оригинальный текст
  • Трансформация ссылкок в сообщении в короткие
  • [-] Отправка отложенных SMS-сообщений (с указанием времени)
  • [-] Отправка MMS
  • [-] Отправка EMAIL
  • [-] Звонок
  • Получение статуса сообщений
  • Пинг (отправка пустого сообщения, которое не видит пользователь, для проверки доступности)
  • [-] Интеграция с i18n
  • [-] Коллбэки (on_send, after_send)

Установка

gem 'smsc'

Как пользоваться?

TODO: Генератор для Rails

Результатом любого запроса является монада Success или Failure. Получить значение можно вызвав value! на результат. Проверить, является ли запрос успешным можно методом success?. В Failure будет передан ключ ошибки (см. Ошибки).

Конфигурация

Для Rails

Просто создайте файл smsc.rb в config/initializers. Если файл не создать, то необходимо указывать логин и пароль при каждом запросе.

# config/initializers/smsc.rb

SMSC.configure do |config|
  config.login = "your_login"
  config.password = "your_passsword"
end

Для Rails хэйтеров

Вы и сами знаете, что делать ;)

Проверка баланса

Проверка баланса на аккаунте. Возвращаеся сумма и валюта в формате ISO4217.

request = SMSC::Balance.new
result = request.call
if result.success?
  puts result.value! #=> { balance: 1000.0, cur: "KZT" }
else
  # choose how to handle error, for example just puts it!
  puts result.failure
end

Отправка СМС

Отправка СМС на указанный номер с указанным сообщением. Можно передавать телефоны в любом формате, гем попытается привести их к необходимому значению. По умолчанию СМС отправляется в транслите. Аргумент translit: false в call сделает отправку в оригинале (UTF-8). В случае успеха будет возвращено id сообщения. Его можно использовать в дальнейшем для проверки статуса.

request = SMSC::Send.new
result = request.call(phone: '+7 (777) 777-77-77', message: "Следуй за белым кроликом...")
if result.success?
  puts result.value! #=> { id: 1, cnt: 1 }
else
  puts result.failure
end

Отправка Flash-SMS

Такое сообщение будет выведено сразу на экран мобильного телефона (в виде попапа). Обычно используется только в экстренных случаях (службы спасения и т.д.)

request = SMSC::Send.new
result = request.call(phone: '+7 (777) 777-77-77', flash: true, message: "Внимание!")
if result.success?
  puts result.value! #=> { id: 1, cnt: 1 }
else
  puts result.failure
end

Пинг-сообщение

Отправка пустого сообщения (адресат его не видит), для проверки доступности. ВНИМАНИЕ! Взымается плата стоимостью в 1 СМС. По указанным сообщениям можно также проверить статус.

request = SMSC::Ping.new
result = request.call(phone: '+7 (777) 777-77-77')
if result.success?
  puts result.value! #=> { id: 1, cnt: 1 }
else
  puts result.failure
end

Статус сообщения

Получение информации о сообщении по номеру адресата и id сообщения.

request = SMSC::Status.new
result = request.call(phone: '+7 (777) 777-77-77', id: 1)
if result.success?
  result.value!
  # {
  #   cost: 6.4,
  #   country: "Казахстан",
  #   message: "Test",
  #   operator: "K'cell",
  #   phone: "77777777777",
  #   region: "",
  #   send_timestamp: 2018-02-12 18:34:17 +0600,
  #   sender_id: "SMSC.KZ",
  #   status: :delivered,
  #   type: :sms
  # }
else
  puts result.failure
end

Возможные статусы

В настоящий момент возвращаются коды статусов, без переводов. Перевод нужно сделать самостоятельно или дождаться интеграции с i18n. Contributors are welcome!

Код статуса Описание Расшифровка
:not_found Сообщение не найдено Возникает, если для указанного номера телефона и ID сообщение не найдено.
:in_provider_queue Ожидает отправки Если при отправке сообщения было задано время получения абонентом, то до этого времени сообщение будет находиться в данном статусе, в других случаях сообщение в этом статусе находится непродолжительное время перед отправкой на SMS-центр.
:in_operator_queue Передано оператору Сообщение было передано на SMS-центр оператора для доставки.
:delivered Доставлено Сообщение было успешно доставлено абоненту.
:opened Прочитано Сообщение было прочитано (открыто) абонентом. Данный статус возможен для e-mail-сообщений, имеющих формат html-документа. (TODO)
:expired Просрочено Возникает, если время "жизни" сообщения истекло, а оно так и не было доставлено получателю, например, если абонент не был доступен в течение определенного времени или в его телефоне был переполнен буфер сообщений.
:unable_to_deliver Невозможно доставить Попытка доставить сообщение закончилась неудачно, это может быть вызвано разными причинами, например, абонент заблокирован, не существует, находится в роуминге без поддержки обмена SMS, или на его телефоне не поддерживается прием SMS-сообщений.
:wrong_number Неверный номер Неправильный формат номера телефона.
:prohibited Запрещено Возникает при срабатывании ограничений на отправку дублей, на частые сообщения на один номер (флуд), на номера из черного списка, на запрещенные спам фильтром тексты или имена отправителей (Sender ID).
:insufficient_funds Недостаточно средств На счете Клиента недостаточная сумма для отправки сообщения.
:unreachable_number Недоступный номер Телефонный номер не принимает SMS-сообщения, или на этого оператора нет рабочего маршрута.

Ошибки в статусах

При запросе статуса сообщения, в параметре err может вернуться код ошибки.

Код статуса Описание Расшифровка
:sub_not_exist Абонент не существует Указанный номер телефона не существует.
:sub_not_available Абонент не в сети Телефон абонента отключен или находится вне зоны действия сети.
:sms_disabled Нет услуги SMS Абонент не может принять SMS-сообщение. Например, услуга не подключена, или абонент находится в роуминге, где не активирован прием сообщений, или у оператора абонента не налажен обмен SMS с текущим роуминговым оператором. Также это может быть городской номер без приема сообщений.
:device_or_sim_error Ошибка в телефоне абонента Не удается доставить сообщение абоненту из-за ошибки в телефонном аппарате или SIM-карте.
:sub_blocked Абонент заблокирован На счету абонента нулевой или отрицательный баланс, и он находится в роуминге, или заблокирован оператором за продолжительную неуплату либо добровольно самим абонентом. Также данная ошибка может возвращаться при повреждении SIM-карты либо неправильном вводе PIN и PUK-кодов SIM-карты.
:sms_not_available Нет поддержки SMS Аппарат абонента не поддерживает прием SMS-сообщений.
:virtual Виртуальная отправка Сообщение отправлено в режиме тестирования (при установленной в настройках галочке "Режим тестирования (виртуальная отправка без оплаты)").
:query_is_full Переполнена очередь у оператора Абонент недоступен для приема SMS, но сообщения продолжают приходить оператору и происходит переполнение внутренней очереди сообщений для данного абонента. В редких случаях возможно появление ошибки в результате сбоя в сети самого оператора или переполнении общей очереди сообщений. Во всех подобных ситуациях система с определенными интервалами несколько раз пытается отправить указанные сообщения повторно.
:sub_is_busy Абонент занят Возникает при передаче голосового сообщения абоненту, если линия занята или абонент отменил вызов.
:voice_conversion_error Ошибка конвертации звука При преобразовании текста или звукового файла в конечный формат для передачи абоненту голосового сообщения произошла ошибка конвертации звука.
:answerphone_detected Зафиксирован автоответчик Во время отправки голосового сообщения на стороне абонента был зафиксирован автоответчик.
:status_not_obtained Статус не получен В течение суток статус доставки не был получен от оператора, в этом случае нельзя точно сказать, было сообщение доставлено или нет.
:timeframe_is_wrong Ограничение по времени В личном кабинете в пункте "Настройки" во вкладке "Лимиты и ограничения" установлено "Время отправки" в которое не попадает указанное сообщение.
:daily_limit_reached Превышен лимит сообщений Превышен общий суточный лимит сообщений, указанный Клиентом в личном кабинете в пункте "Настройки".
:routing_error Нет маршрута На данный номер отправка сообщений недоступна в сервисе smsc. Например, ввели несуществующий мобильный код, либо для указанного номера и текста нет рабочего SMS-шлюза.
:wrong_phone_number Неверный формат номера Возникает, когда мобильный код указанного номера и соответствующая этому коду длина номера неверны.
:phone_is_disabled_in_settings Номер запрещен настройками Номер попал под ограничения, установленные Клиентом для мобильных номеров в личном кабинете в пункте "Настройки".
:one_phone_limit_reached Превышен лимит на один номер Превышен суточный лимит сообщений на один номер. Лимит устанавливается Клиентом в личном кабинете в пункте "Настройки". Также такая ошибка возможна при отправке более 50 сообщений одному абоненту, которые были отправлены с перерывом между сообщениями менее 30 секунд.
:phone_is_prohibited Номер запрещен Попытка указания одного из федеральных номеров в качестве получателя SMS-сообщения.
:filtered_as_spam Запрещено спам-фильтром Текст сообщения содержит нецензурные выражения и оскорбления, призывы отправить sms и некоторые другие запрещенные тексты.
:sender_not_registered Незарегистрированный отправитель Отправка сообщения от незарегистрированного имени отправителя.
:rejected_by_operator Отклонено оператором Оператор отклонил сообщение без указания точного кода ошибки.

Ошибки запросов

При неудачном запросе возвращается результат Failure. При вызове метода success? на него, будет возвращено false. Для получения кода ошибки нужно вызвать метод failure на результат.

Коды ошибок

Код статуса Описание Расшифровка
:network_error Ошибка сети DNS/Сервис не доступен. Или началась глобальная война.
:bad_parameters Неверные параметры Указанные в call параметры не верны.
:wrong_credentials Недостаточно средств На счете Клиента недостаточная сумма для выполнения операции.
:insufficient_funds Ошибка аутентификации Логин или пароль указаны не верно.
:too_many_errors Много ошибок IP-адрес временно заблокирован из-за частых ошибок в запросах.
:message_is_prohibited Сообщение заблокировано Сообщение запрещено (по тексту или по имени отправителя).
:frequent_requests Частые запросы Отправка более одного одинакового запроса на передачу SMS-сообщения либо более пяти одинаковых запросов на получение стоимости сообщения в течение минуты.

Development

After checking out the repo, run bin/setup to install dependencies. Then, run rake spec to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and tags, and push the .gem file to rubygems.org.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/smsc. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the Contributor Covenant code of conduct.

License

The gem is available as open source under the terms of the MIT License.

Code of Conduct

Everyone interacting in the SMSC project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the code of conduct.