Часто бывает ситуация, когда сраный 3G обрывается. В джаббере пока tcp-сокет не сдохнет, ejabberd думает, что клиент подключен, а всё, что ему передали - дошло. Поэтому иногда сообщения теряются.
Как реализовать скидывания сообщения в оффлайн-сообщения, если оно не дошло (клиент не отчитался о доставке. но, вообще, достаточно того, что после нашего пакета со стороны сервера ничего пришло обратно, а потом сокет был закрыт по таймауту.)