Как заставить Kannel автоматически очищать DLR с типом = 4

Я надеюсь, что кто-нибудь поможет мне решить мою проблему, связанную с тем, что DLR "промежуточного" типа (т.е. type=4) продолжают стоять в очереди.

Насколько я понимаю, в США DLR, которые являются успешными и окончательными (т.е. ДОСТАВЛЕНЫ (1)), встречаются редко, в то время как промежуточные DLR, такие как «Очередь на SMSC». ACCEPTD, REJECTD встречаются гораздо чаще, поскольку операторы связи принимают сообщения от имени своих клиентов.

SMSC, который мы используем, отправляет обратно исключительно type=2 для недоставленных сообщений и type=4 DLR для сообщений, которые успешно доставлены оператору. Мы используем внутреннее хранилище DLR в Kannel (не используя mysql), и проблема в том, что DLR типа = 4 не считается окончательным и, следовательно, не покидает очередь DLR. Когда мы получаем обратно DLR type=4, в журнале Bearerbox появляются следующие сообщения.

2013-11-05 14:59:06 [15084] [6] DEBUG: DLR[internal]: Looking for DLR smsc=test, ts=4154168431, dst=<censored>, type=4
2013-11-05 14:59:06 [15084] [6] DEBUG: DLR[internal]: created DLR message for URL <http://localhost/dlr.php>
2013-11-05 14:59:06 [15084] [6] DEBUG: DLR[internal]: DLR not destroyed, still waiting for other delivery report

Похоже, что Kannel ожидает прихода DLR типа = 1 или 2, прежде чем он уберет DLR из своей очереди.

Есть ли настройка Kannel, чтобы сделать так, чтобы DLR типа = 4 считался окончательным DLR и, таким образом, очищал DLR от памяти? Я запутался с настройкой dlr-маски в Kannel, но не думаю, что этот атрибут содержит мой ответ.

Заранее спасибо и, пожалуйста, дайте мне знать, если я могу предоставить дополнительную информацию.

TL;DR: Как я могу заставить Kannel считать DLR типа = 4 окончательным DLR.


person David    schedule 05.11.2013    source источник


Ответы (1)


Вы не можете сделать это без изменения исходного кода. Эти значения жестко закодированы в исходном коде Kannel и не могут быть изменены, скажем, значением конфигурации или параметром URL на адрес sendsms.

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

person pilsetnieks    schedule 06.11.2013
comment
Спасибо за ваш ответ. Я боялся, что это так. Посмотрев некоторое время в Интернете, я предположил, что это не простая настройка, но рад, что это подтвердилось. Итак, если бы я переместил свое хранилище DLR в базу данных mysql, вы бы просто порекомендовали, чтобы мой скрипт dlr-url удалял из базы данных ненужные DLR? - person David; 06.11.2013