Как продолжать принимать звонки, если софтфон для Android закрыт или работает в фоновом режиме

Статья “Софтфон для Android: будить или не засыпать?” всколыхнула общественность: нам прислали много писем про ситуации, с которыми довелось столкнуться их авторам. Разные софтфоны, разные страны, разные провайдеры. И одна и та же боль: уснул и не проснулся. Как результат — пропущенные звонки, упущенные клиенты, подмоченная репутация.

Особенно бросалось в глаза, что письма сильно отличались в плане терминологии. Казалось бы, в нашей IT-сфере для всего должны быть свои давно устоявшиеся термины... но нет — кто-то писал, что софтфон теряет коннект (losing connection); другие говорили, что софтфон разрегистрируется (getting unregistered), а кто-то и вовсе утверждал, что софтфон не может проснуться (cannot wake up).


Удивительно, но такое же терминологическое разнообразие царит и на форумах: Гугл приводит на Reddit, Quora, Stack Overflow, а также сообщества Asterisk, FreePBX и Microsoft — вот лишь несколько примеров самых частых вопросов, по сути, об одном и том же:
...softphone app cannot wake up (софтфон не может проснуться);
...cannot receive calls (теряет звонки);
...cannot connect to the network (не может подключиться к сети);
...getting unregistered (разрегистрируется);
...loses connection during sleep (теряет коннект, когда спит);
...dropping connection when not in use (дисконнектится, когда не используется);
...logs out (разлогинивается);
...goes offline after a few minutes of inactivity (уходит в офлайн после нескольких минут бездействия);
...won't receive calls after some time (не принимает звонки по прошествии некоторого времени);
...issues waking up (имеет проблемы с пробуждением).

Тема, судя по всему, больная: там и “помогите!”, и “горе”, и “убийство”, и много других эмоциональных слов. Как вам, например, название темы Help with softphone woes android?


Но приз наших симпатий достается этому совершенно прелестному треду. Обсуждение начинается вроде бы невинно:

Every time I background the app, close it or allow my phone to go to sleep, the app unregisters my VoIP account. (Каждый раз, когда я сворачиваю или закрываю приложение, оно разлогинивается из учетки VoIP-телефонии.)


Кто-то комментирует:

That's the nature of the beast. (Такова уж натура этого зверя.)


Вот так. С места в карьер. Дескать — а чего ты хотел? Прямо в духе Hotel California: they stab it with their steely knives, but they just can't kill the beast… Жизнь — боль, всё мрак и тлен.

Другой комментатор пишет:

Apps are not normally allowed to maintain a constant connection in the background because it would... (Обычно приложениям не позволяется поддерживать постоянный коннект в фоновом режим, потому что это...)


и внезапно

...murder battery (убьет батарею).


Восхитительно. Чисто английское убийство. Она написала убийство. Убийство на улице Морг. Автор, пиши ещё, ты классный. Грех не продолжить славные традиции Эдгара По и Агаты Кристи.

Еще один взгляд на ситуацию: it requires (требуется)...

an external server that maintains the actual VoIP connection and then pings the phone through the platform's notification system to tell it to wake up (внешний сервер, который поддерживает VoIP-соединение и пингует телефон, чтобы разбудить его).


Следующий комментарий — про то, что

you need to be connected to a service that supports Apple/Android Push (нужно подключение к сервису, который поддерживает Apple Push или Android Push).


Это именно тот способ, который мы использовали при создании мобильного WhiteLabel-софтфона и который описали в статье “Софтфон для Android: будить или не засыпать?”. Само собой, для разных операционных систем — разные пуши: Apple Push для iOS и Android Push для Android (цезарю цезарево, богу богово).


Дело движется к развязке! Выносится вердикт: хотим мы того или нет, но сейчас уже

impossible to have a standard SIP client that “just works” without external infrastructure (невозможно иметь в телефоне SIP-клиент, который “просто” работает без какой-либо внешней инфраструктуры).


В роли внешней инфраструктуры выступает уже упомянутый Google/Android Push в связке с пуш-сервером и пуш-прокси. Таким образом, вся цепочка выглядит так:

Инфраструктура софтфона Softphone.Pro

Итак, мы миновали гнев, депрессию и прочие стадии горя и подошли к принятию. Надо жить дальше. Может, даже с этим же провайдером:

I’m using voip.ms (у меня VoIP.ms)


А вот это правильно. VOIP.ms — хороший провайдер и наш партнер. Мы давно дружим, вы можете видеть их на нашем сайте, а наш софтфон — в их Wiki.

Кстати, Push-proxy не обязательно должен находиться на стороне провайдера. Инфраструктура мобильного Softphone.Pro включает в себя и Push-proxy, и push-server. Главное, чтобы ваша АТС работала по протоколу SIP.

Таким образом, вся картина выглядит так:

  1. В момент звонка АТС сообщает пуш-прокси: у нас входящий!
  2. Затем пуш-прокси спрашивает софтфон: ты спишь?
  3. Если софтфон бодр и весел, то звонок отправляется сразу на него (тут и сказочке конец). Если заснул, то надо будить — см. дальше:
  4. Подключается пуш-сервер, затем Apple/Google Push — тот самый будильник, который разбудит нашего героя.
  5. Софтфон просыпается, все довольны.


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


Пользуйтесь Softphone.Pro, и всё будет хорошо 💙

ТАКЖЕ ПО ТЕМЕ

Blog Софтфон для Android: будить или не засыпать?

Blog Софтфон для Android: технологии, которые мы используем

Blog Реальный софтфон: что нужно людям


Последние статьи