Отправляем SMS из Erlang/Elixir. Короткая инструкция / Хабр

sms planirovshhik Новости

Импульсное SMS

Pulse SMS — одно из немногих приложений для обмена сообщениями, которое действительно меняет способ использования обычных сообщений. Приложение предлагает множество интересных и уникальных функций, которые могут улучшить ваш опыт обмена сообщениями.

Одна из этих функций — возможность планировать текстовые сообщения. Чтобы запланировать сообщение, во время разговора коснитесь меню из трех точек в правом верхнем углу приложения. В раскрывающемся меню нажмите на опцию «Запланировать сообщение», а затем введите дату, время и содержание сообщения. Когда вы закончите, нажмите «Отправить».

Однако в этом приложении мне не нравится то, как оно хранит запланированные сообщения. Запланированные SMS-сообщения не хранятся в исходном разговоре, а хранятся в собственной папке.

Хотя мне не нравится этот подход, многим он может понравиться, так как он также дает вам возможность видеть все запланированные сообщения в одном месте.

Чтобы найти все запланированные сообщения, откройте гамбургер-меню и нажмите «Запланированные сообщения». Здесь вы можете просмотреть все запланированные сообщения.

Установить: (Бесплатно, Покупки в приложении)

Сделай это позже

Как и следует из названия, это приложение помогает вам делать вещи с задержкой автоматически. Сделайте это позже Это одно из лучших приложений, которое поможет вам планировать текстовые сообщения, твиты, электронные письма и даже звонки на время, которое вас устраивает.

Сделай это позже

Плюсы:

Минусы:

Отправить позже

С этой планировщик текста, вы можете запланировать отправку SMS в любое время в будущем, как вам нравится.

Отправить позже

Плюсы:

  • • Это бесплатно.
  • • Доступно 7 различных языков: вьетнамский, английский, французский, польский, русский, словенский, сербский.
  • • Вы можете отправлять сообщения в нескольких частях. Это необходимо, если вы отправляете тексты длиной более 160 символов, в то время как другие приложения отправляют только первый сегмент сообщения, а не все.

SMS Organizer

SMS Organizer от Microsoft, пожалуй, лучшее приложение для SMS, которое вы можете использовать на своем телефоне Android. Он содержит мощные функции управления SMS, которые помогут вам эффективно отслеживать важные сообщения, не перегружая себя спамом.

Одна удобная функция SMS Organizer — возможность планировать сообщения. Чтобы запланировать сообщения в SMS Organizer, введите сообщение и нажмите значок календаря в нижнем левом углу. Затем вы можете выбрать дату и время.

После того, как вы установите дату и время, нажмите кнопку «Отправить», чтобы запланировать отправку сообщения. Приложение теперь автоматически отправит сообщение в это заранее определенное время.

Вы можете нажать на метку времени, чтобы изменить дату / время или содержание сообщения. Нажмите кнопку «Расписание», чтобы перенести сообщение. Если вы хотите удалить сообщение, вы можете нажать и удерживать сообщение и нажать значок «Удалить».

Установить: Бесплатно

Текст позже

Text Later – простое решение для отправки SMS позже для пользователей Android. Он отправляет стандартные SMS-сообщения, поэтому ваш оператор будет взимать плату за отправку SMS-сообщений. Поэтому, пожалуйста, убедитесь, что у вас есть тарифный план через вашего оператора.

Текст позже

Плюсы:

SKEDit

SKEDit – это также бесплатное и простое в использовании приложение для планирования, которое позволяет планировать текстовые сообщения, сообщения WhatsApp, отправлять электронные письма позже, устанавливать напоминания о вызовах и многое другое.

Skedit

Плюсы:

Минусы:

Авто текст

AutoText – это мощный планировщик SMS для iPhone, который может отправлять расписание и отправлять текстовые сообщения автоматически без дополнительных напоминаний или уведомлений.

Авто Текст

Плюсы:

Таймер текста

Таймер текста – это более простой планировщик SMS, поскольку он поддерживает планирование только текстовых сообщений, а не электронных писем или публикаций для платформ социальных сетей. Таким образом, им легко пользоваться, вам просто нужно нажать кнопку «Написать», чтобы выбрать дату и время, когда вы хотите запланировать отправку SMS, выбрать получателей из контактов и ввести текст.

Плюсы:

Otp-тренды

В 2020 году на тренды развития OTP и BEAM всё большее влияние оказывает сообщество Elixir. Чаще и чаще хорошие инструменты и полезные библиотеки можно найти на Elixir, а не на Erlang. Это не повод для тревоги за Erlang, просто Elixir смог заинтересовать и привлечь больше людей в своё сообщество, и это прекрасно.

Smpp в экосистеме otp

Недавно у хорошего друга возник вопрос по работе с SMPP в Erlang. Собственно, благодаря этому и родился этот текст.

Казалось бы, никаких проблем. Проверенный временем телеком-протокол с давно известными проблемами с одной стороны и телеком-язык с другой. Все должно быть просто и весело, как в песенке PPAP.

Но есть нюанс… Найти адекватную реализацию оказалось непросто.

Наверняка все, кто пытался серьёзно работать с Erlang, знают про его недостаток, связанный с ограниченным выбором библиотек. С SMPP такая же история — в OTP нет штатной поддержки этого протокола, а на первой странице выдачи Гугла творится что-то странное:

Лично я бы загрустил от такого разнообразия существующих решений. Особенно, когда хочется асинхронного режима, адекватной поддержки SMPP 3.4 и возможности написать как клиент, так и сервер. Но на помощь приходит Elixir и библиотека SMPPEX.

Smppex

Про сам проект скажу только то, что он активный и готов для продакшен-применения. Это стабильная, всесторонняя библиотека для SMPP с продуманным API, хорошей поддержкой разработчиков и отсутствием проблем с лицензией.

Безопасность

При выполнении команды привязки мы должны передать параметры безопасности для идентификации нашего ESME: system_id, system_type и password.

Где можно применять это решение?

Самое простое и очевидное применение – отправка уведомлений. Мы отслеживаем доступность различных сервисов и хотим знать о любых сбоях. Применение в системе умного дома позволит нам быть в курсе всех произошедших событиях. Да, многие IoT устройства умного дома оборудованы разъемом под сим-карту и могут сами отправлять SMS, но в этом случае на каждое устройство нужна отдельная сим-карта.

Инициализация подключения

Перед началом обмена мы должны указать, в каком направлении будет работать наше подключение. За это отвечают соответствующие команды:

Настройка gammu

Итак мы определились с портами и теперь нужно настроить Gammu. Есть утилита конфигурации gammu-config, но мы не будем ее использовать, а запишем сразу данные в конфигурационный файл.

nano ~/.gammurcдописываем в нижней части файла данные конфигураций. Каждый блок [gammu] – это канал модема. [gammu] – это канал по умолчанию, [gammu1] – первый канал и т.д. Далее мы еще коснемся этого, когда будем отправлять сообщение. Итого я добавляю 3 доступных канала от двух своих модемов:

[gammu]

port = /dev/ttyUSB0
model = at
connection = at
synchronizetime = yes
logfile =
logformat = nothing
use_locking = yes
gammuloc =

[gammu1]

port = /dev/ttyUSB4
model = at
connection = at
synchronizetime = yes
logfile =
logformat = nothing
use_locking = yes
gammuloc =

[gammu2]

port = /dev/ttyUSB5
model = at
connection = at
synchronizetime = yes
logfile =
logformat = nothing
use_locking = yes
gammuloc =Краткое описание настроек:

Отправляем SMS из Erlang/Elixir. Короткая инструкция / ХабрВид настроек в терминале

Обработка отчетов о доставке и mo sm

Mobile originated (MO SM) — сообщения от абонента.

После отправки сообщения в линк SMSC ответит нам submit_sm_resp, в котором указан уникальный ID нашего сообщения:

MsgId = 'Elixir.SMPPEX.Pdu':mandatory_field(Pdu, message_id)

Теперь нам необходимо дождаться deliver_sm с этим message_id.

Чтобы отличить отчёты о доставке от MO SM, проанализируем esm_class:

EsmClass = 'Elixir.SMPPEX.Pdu':mandatory_field(Pdu, esm_class),
case <<EsmClass>> of
  <<_Head : 2, 0 : 1, 0 : 1, 0 : 1, 1 : 1, _Tail : 2>> -> handle_delivery_receipt(Pdu);
  <<_Head : 2, 0 : 1, 0 : 1, 0 : 1, 0 : 1, _Tail : 2>> -> handle_standart_message(Pdu);
  Some -> ?LOG_ERROR("unknown deliver_sm: ~p", [Some])
end

При этом для обработки отчётов о доставке нам достаточно узнать ID доставленного сообщения:

SmsId = 'Elixir.SMPPEX.Pdu':field(Pdu, receipted_message_id)

А для входящих сообщений узнать номер отправителя:

Msisdn = 'Elixir.SMPPEX.Pdu':field(Pdu, source_addr)

и полезное содержимое сообщения:

Payload = 'Elixir.SMPPEX.Pdu':field(Pdu, short_message)

Как известно, спецификация SMPP требует deliver_sm_resp в ответ на deliver_sm. Поэтому после обработки отчёта о доставке и входящего сообщения мы должны ответить deliver_sm_resp. Создадим PDU для него:

Определимся с терминами и понятиями

Прежде чем погружаться в протоколы и код, предлагаю разобраться в терминологии. Если быть придирчивым к определениям, то отправить SMS невозможно. Вспоминается момент из «Джентльменов удачи»: «Кто ж его отправит — он же сервис!» SMS — акроним от short message service, что на русский переводится как «сервис/служба коротких сообщений». Если возвращаться к шутке, то отправляем мы SM, т. е. короткие сообщения, используя SMS — сервис коротких сообщений.

У каждого оператора мобильной связи есть компонент, отвечающий за работу службы коротких сообщений. Это так называемый SMS-центр, он же SMSC, он же SMS-SC. Его задачами являются хранение, передача, конвертация и доставка SM-сообщений. Наиболее распространенным внешним протоколом взаимодействия с SMSC является SMPP.

Давайте ответим на вопросы в начале статьи. Итак, ваше сообщение по REST API или SMPP попало к поставщику услуг, у которого заключён договор с одним или несколькими операторами связи или другими посредниками. Сервер поставщика подключается к SMSC и отправляет по SMPP ваше SM, затем получает отчёт о доставке или ответное SM.

От слов к делу

Сначала можно ознакомиться с примерами синхронного и асинхронного клиента в документации. Затем можно перейти к более сложным вещам в контексте использования SMPPEX в Erlang-проекте.

Для иллюстрации возможностей библиотеки возьмём простой сценарий:

  1. Поднять линк.
  2. Отправить сообщение.
  3. Дождаться отчёта о доставке либо обработать входящие сообщения.

Придумаем дополнительные требования. Допустим, мы хотим отправлять MT SM, получать отчёты о доставке и MO SM. При этом по каким-то причинам нам нужны кастомные PDU и полный контроль над линком, поэтому за формирование submit_sm PDU и обработку всех входящих PDU мы будем отвечать сами. При этом мы не должны забывать про требование асинхронности.

Отправлять сообщения позже с помощью сторонних приложений

Если вы не можете найти вариант планирования на своем устройстве Android ни одним из этих методов, вы можете выполнить простой поиск в Google, и вы узнаете, поддерживает ли его ваш OEM-производитель.

Если OEM-производитель вашего смартфона не предлагает эту функцию изначально, вам придется использовать стороннее приложение, чтобы использовать эту функцию.

Преимущество использования сторонних клиентов обмена сообщениями заключается в том, что они не только предоставляют возможность отправлять сообщения позже, но также включают массу других функций, которые делают обмен сообщениями увлекательным и простым.

В приложениях также есть возможности создания тем, позволяющие изменять что угодно, от цветовой схемы до шрифтов и размера текста. Единственное, что следует помнить, это то, что мы фокусируемся на планировании сообщений, поэтому другие конкретные наборы функций не будут влиять на рейтинг приложений.

Планирование текстовых сообщений на android с легкостью.

Я не могу сказать вам, сколько раз я использовал эту функцию, чтобы спастись. Человеческий мозг (по крайней мере, мой) имеет тенденцию забывать о вещах, когда наступает подходящий момент. Используйте это приложение, чтобы решить проблему с забывчивостью и запланировать отправку текстовых сообщений на Android вовремя.

Точно так же вы также можете узнать, как запланировать сообщения в WhatsApp. Поделитесь с нами своими историями, когда вы забыли отправить кому-то важное сообщение в нужное время. Также сообщите нам, если вы знаете лучшее приложение, которое делает то же самое, но отсутствует в списке, в разделе комментариев ниже.

Плюсы и минусы собственного шлюза

Как и любое решение, собственный шлюз обладает рядом достоинств и недостатков.

Мы не будем рассматривать плюсы с точки зрения точного сравнения с платными сервисами ввиду разного уровня получаемой услуги. Я приведу наиболее явные и вы сможете решить на сколько каждый пункт критичен именно для вас.

Плюс

Минусы


Итак, мы определили, что нам ожидать от собственного шлюза и мы готовы начать.

Проверка работы

Gammu настроена и теперь мы можем протестировать отправку сообщений.

Базовая команда для отправки сообщения на английском и всего с одного модема выглядит следующим образом:

gammu sendsms TEXT  70001234567 -text "Test message"


Отправляем SMS из Erlang/Elixir. Короткая инструкция / Хабр

Теперь рассмотрим варианты поинтереснее с использованием дополнительных аргументов

Если в системе несколько модемов, то добавляем нужный порт аргументом “-s <номер_порта>”. Мы затрагивали этот момент, когда заполняли настройки. Нумерация начинается с 0 и в нашем случае это промежуток 0-2.

gammu -s 1 sendsms TEXT 70001234567 -text “Test message”Отправка сообщений в PDU-формате (кириллица, прочие языки и спецсимволы) – “-unicode”

gammu -s 1 sendsms TEXT 70001234567 -unicode -text “Тестовое сообщение”Отправка сообщений в PDU-формате с автоматической разбивкой на несколько сообщений и последующей склейкой на телефоне – “-autolen 5”.

gammu -s 1 sendsms TEXT 70001234567 -unicode -autolen 5 -text “Тестовое сообщение”Есть очень интересный аргумент, который полезен, если вы отправляете одноразовые коды – “-replacemessages 1”.

Суть его работы заключается в следующем – мы указываем телефону, что при получении сообщения он должен заменить сообщений с ID 1, если оно имеется в полученных на то, что поступило сейчас. Таким образом телефон автоматически затирает все ранее полученные сообщения и в переписке всегда отображается только последнее полученное. Единственное, решить стоит его использовать или нет, желательно в самом начале, чтобы всегда заменять ID 1

gammu -s 1 sendsms TEXT  70001234567 -unicode -autolen 5 -flash -replacemessages 1 -text "Тестовое сообщение"


Отправляем SMS из Erlang/Elixir. Короткая инструкция / Хабр

А теперь, самый интересный, на мой взгляд аргумент – “-flash”.

Сообщение отправленное с этим параметром отображается телефоном сразу во всплывающем окне. Проигнорировать его невозможно, т.к требуется решение абонента о сохранении или отклонении данного сообщения. Но самое главное – абонент не видит номер телефона отправителя в этом окне (помните это был один из минусов собственного шлюза).

Таким образом, если мы используем шлюз для авторизации пользователей и отправки им кодов, то это решение позволяет сразу показать код без захода в программу «Сообщения». По получении звукового сигнала о входящем сообщении человек берет телефон, снимает блокировку и сразу видит его на экране.

gammu -s 1 sendsms TEXT  70001234567 -unicode -autolen 5 -flash -replacemessages 1 -text "Тестовое сообщение"


Отправляем SMS из Erlang/Elixir. Короткая инструкция / Хабр
Всё!

Работа с линком

Надеюсь, что сложностей с установкой зависимости из hex.pm у вас не возникло и мы можем приступить к написанию кода. Как говорилось выше, работать мы будем в асинхронном режиме, поэтому запускаем клиента с помощью модуля SMPPEX.ESME:

'Elixir.SMPPEX.ESME':start_link(SmscHost, SmscPort, {?MODULE, [Opts]})

Для синхронного режима существует SMPPEX.ESME.Sync.

Наш клиент готов, и мы можем сделать привязку к SMSC. Предположим, что SMSC поддерживает SMPPv3.4 и мы можем использовать transceiver режим:

'Elixir.SMPPEX.Pdu.Factory':bind_transceiver(SystemId, Pass)

Если всё прошло хорошо, нам должен прийти PDU с командой bind_transceiver_resp:

bind_transceiver_resp = 'Elixir.SMPPEX.Pdu':command_name(Pdu)

Смс планировщик для андройд

смс планировщикОчень часто получается так, что необходимо отправить смс в определенное время, а память как назло подводит нас в такие моменты. Хочу поделиться своей палочкой выручалочкой, которую установила недавно на телефон. Я нашла программу смс планировщик, для отправки смс сообщения своему мужу. Например, если ему не позвонить в то время, когда он едет с работы, то он обязательно забудет что-нибудь купить. А если отправить смс рано, до его выхода с работы, он про него забудет. Это не потому что у моего мужа плохая память, просто он сильно загружен работой. А с помощью смс планировщика я могу запланировать смс и оно приходит ему в 17:30, он как раз в это время подъезжает к магазину. Кроме того, достаточно удобно, что в течение дня, вы можете менять сам текс сообщения и не надо отправлять несколько сообщений, если вы решили еще что-нибудь купить.

СМС планировщик парочка выручалочка при отправки поздравлений. Я постоянно забываю поздравить кого-нибудь с днем рождения или еще с каким-либо праздником. Все потому что, я сейчас постоянно дома с маленьким ребенком, и иногда не то что, какое сегодня число забываю, но и не помню день недели. А вспомнить когда и у кого день рожденье не так-то просто, конечно если это не твои самые близкие люди. А с смс планировщиком эта проблема отпадает — записал поздравление, запланировал на конкретную дату и время и можно забыть об этой проблеме.

СМС планировщик помогает мне и самой, для выполнения каких либо задач. Я, как правило, записываю, что мне нужно купить, сделать и планирую на определенное время отправку смс на свой номер. Иногда смс планировщик меня выручает таким образом. Например, часто в магазине мы забываем купить соль, сахар и т.д., не смотря на то, что ходим по магазину и смотрим на него (может только я такая рассеянная). Можно заранее запланировать смс «купить сахар» на ориентировочное время вашего пребывания в магазине, а смс планировщик вам поможет не забыть приобрести такие мелочи.

СМС планировщик помогает так же следить за собой. Утром запланировала сделать маску для лица вечером, а напомнить поможет смс планировщик. Ну, или например можно напомнить выпить лекарство, сделать какое-либо дело и т.д.
Из всех смс планировщиков я выбрала этот, так как им проще пользоваться. Нет необходимости запоминать номера телефонов, как это сделано в других подобных программах. Очень удобно, что когда ты отправляешь смс, то у тебя программа спрашивает отправить смс сейчас или отложить его. Спасибо автору за программу.

Ссылка для скачивания: смс планировщик

смс планировщиксмс планированиеОтправляем SMS из Erlang/Elixir. Короткая инструкция / Хабрсмс планирование делотправка отложенного смсОтправляем SMS из Erlang/Elixir. Короткая инструкция / Хабрсмс отложить
Использование материалов сайта доступно только с активной ссылкой на сайт: huaweidevices.ru

Устанавливаем gammu, подключаем модемы

В качестве аппаратного ядра системы я буду использовать Orange Pi PC с Armbian просто потому, что он у меня есть и ничем не занят. Свою версию вы можете сделать на основе RPi, компьютера/сервера на Linux и даже виртуальной машины с проброшенными внутрь USB-портами – это не имеет особого значения, главное мы будем использовать Linux.

Для общения с модемами я буду использовать Gammu – очень мощный продукт позволяет общаться не только с классическими модемами, но и использовать телефоны в качестве модемов. Также этот продукт избавит нас от необходимости самим формировать пакеты сообщений, считать их длины, составлять и отправлять АТ-команды и самое главное позволить отправлять сообщения в PDU-формате.

Итак, подключимся к серверу, обновим систему и установим gammu:

ssh root@<IP_вашего_сервера>

apt update
apt upgrade -y

apt install gammu -yТеперь нужно подключить модемы к USB-портам. Я буду использовать два модема, чтобы нагляднее показать чем отличаются настройки. Подключаем и смотрим какие порты они заняли.

Следующей командой мы смотрим, какой модем сколькими портами обладаем. Среди этих портов будет только несколько (или один), через который можно отправлять сообщения. Остальные — это технические и нам не интересны.

На скрине выше видно, что установленный модем usb 5-1, Alcatel, имеет пять каналов. Теперь нам нужно определить какие из них используются для связи. Сделать это не сложно. Пишем в терминале:

screen /dev/ttyUSB1В открывшемся окне вбиваем АТ и если в ответ получили ОК, то запоминаем этот порт – это то, что нужно. Выходим – CTRL A затем DОбратите внимание, что найдя один порт, все равно нужно проверить оставшиеся – ttyUSB2, ttyUSB3, и далее.

Формирование pdu для mt sm

Линк поднят, и мы можем отправить наше сообщение. В терминах SMPP, сообщения адресуемые абоненту называются Mobile Terminated (MT SM). Соберём PDU для него:

. AutoSender

AutoSender является мощным приложением для обмена сообщениями iOS, которое позволяет планировать отложенное текстовое сообщение и автоматически отправлять запланированные сообщения для вас.

AutoSender

Плюсы:

Минусы:

Мы собрали лучшие SMS-планировщики 10 для Android и iOS, и большинство из них бесплатны. Если вы ищете простой текстовый планировщик или приложение для планирования не только текстовых сообщений, вы найдете ответ здесь.

Оцените статью
Huawei Devices
Добавить комментарий