SMS Gateway (Android)

Надёжность

Кратко

Механизмы, которые держат SMS Gateway в работе без присмотра: sticky-уведомление и настройки батареи Android, heartbeat раз в 30 минут, команды через FCM, автозапуск после перезагрузки, повторы при ошибках.

  • Sticky-уведомление включается в настройках приложения и мешает Android выгрузить его; рекомендуется на Xiaomi, Huawei, Samsung.
  • На телефоне: отключить оптимизацию батареи (Настройки → Приложения → tuk-tuk → Батарея → «Не ограничивать»), включить автозапуск, закрепить приложение.
  • Heartbeat: каждые 30 минут по умолчанию, варианты 15/30/60, минимум 15; передаёт батарею, сеть, память, хранилище, часовой пояс, SIM, push-токен.
  • Push (FCM) двух типов: SMS (получатели, текст, SIM-слот) и Heartbeat. Повтор push до 3 раз.
  • После перезагрузки BootCompletedReceiver перезапускает heartbeat, отправляет данные и восстанавливает уведомление.
  • Загрузка входящего SMS на сервер: до 5 попыток с паузами 10, 20, 40, 80, 160 секунд.
На этой странице

Шлюз работает круглосуточно без участия человека: держит связь с сервером, переживает перезагрузку телефона и повторяет неудачные операции. Главная угроза: экономия батареи в Android, которая усыпляет фоновые приложения. Ниже описано, как приложение с ней справляется и что настроить на телефоне.

#Фоновая работа

#Sticky-уведомление

Постоянное уведомление в шторке Android. Оно:

  • не даёт системе выгрузить приложение;
  • показывает, что шлюз работает;
  • включается и выключается в настройках приложения.

#Настройки батареи на телефоне

ДействиеГде
Отключить оптимизацию батареиНастройки → Приложения → tuk-tuk → Батарея → «Не ограничивать»
Включить автозапускНастройки → Приложения → tuk-tuk → Автозапуск
Закрепить приложениеВ списке последних приложений нажать значок замка на tuk-tuk

#Heartbeat

Heartbeat: регулярный сигнал от телефона серверу «я работаю, вот моё состояние». Если сигналы перестали приходить, устройство считается офлайн.

#Как работает

  1. Каждые 30 минут (настраивается, минимум 15) приложение просыпается.
  2. Собирает данные о состоянии телефона.
  3. Отправляет их на сервер.
  4. Сервер обновляет карточку устройства в кабинете.

#Что передаётся

ДанныеПример
Уровень батареи78%
Тип сетиWi-Fi, LTE, 3G
Свободная память2.1 ГБ из 6 ГБ
Свободное хранилище15 ГБ из 64 ГБ
Часовой поясUTC+3
SIM-картыОператор, страна, слот
Push-токенАктуальный токен для FCM

#Интервал

ИнтервалКогда выбирать
15 минутМаксимальный контроль, чуть выше расход батареи
30 минутПо умолчанию
60 минутЭкономия батареи, статус обновляется реже

Сервер может запросить heartbeat вне расписания через push, когда нужно актуальное состояние устройства прямо сейчас.

#Push-уведомления (FCM)

Команды приходят на телефон через Firebase Cloud Messaging.

ТипЧто делает
SMSОтправить SMS: получатели, текст, SIM-слот
HeartbeatОтправить состояние устройства сейчас

Push доставляется сразу, даже когда приложение спит: Android будит его для обработки. Если push не дошёл, сервер повторяет отправку до 3 раз.

#Автозапуск после перезагрузки

После перезагрузки (обновление, разряд, сбой) приложение восстанавливает работу само, открывать его не нужно.

Действие при загрузкеОписание
HeartbeatПерезапускает расписание
Обновление данныхОтправляет актуальное состояние телефона
УведомлениеВосстанавливает sticky-уведомление, если оно было включено

Технически: приложение регистрирует BootCompletedReceiver, Android вызывает его при загрузке, и фоновые задачи запускаются заново.

#Повторы при ошибках

ОперацияПравило
Push с командой на SMSСервер повторяет до 3 раз
Загрузка входящего SMS на серверДо 5 попыток с паузами 10, 20, 40, 80 и 160 секунд, только при наличии интернета
HeartbeatСледующая попытка по расписанию, минимальный интервал 15 минут

Если устройство всё же ушло в офлайн, см. Мониторинг: частые проблемы.