Подробное описание создание создание сервера для рассылок SMS перечню адресатов. Эта статья будет интересна IT-администраторам и руководителям, кому интересна идея централизованого оповещения своих работников или клиентов о различных новостях или событиях. Стоит отметить, что используется исключительно открытое програмное обеспечение.
Статья скорее всего будет пополняться и корректироваться по мере непосредственного использования решения. Также я планирую в рамках этой статьи разместить описание интерфейса для формировки очереди сообщений.
Также оговорюсь, что решение протестировано с использованием связи от Мегафон-Северный Кавказ. Допускаю, что другие операторы могут как-то иначе работать с теми же кодировками.
Программа генерирует в определенной директории файлы для отправки. Скрипт генерации очереди перекодирует их в нужную кодировку и отдаёт для отправки демону smsd, который осуществляет рассылку через модем. Если адресат не хочет больше получать рассылку, то он отправляет 0 в ответ. Скрипт sms_event.sh добавляет его номер в файл blacklist. Больше ему сообщения отправляться не будут. Задача решена. Приятной работы :)
Предисловие
Написать статью побудило отсутствие подобного в русскоязычном интернете. По крайней мере поиски не привели к успеху и информацию приходилось собирать по крупицам из различных источников. Многие вещи были получены экспериментально, косвенно или вообще шестое чувство подсказало :)Статья скорее всего будет пополняться и корректироваться по мере непосредственного использования решения. Также я планирую в рамках этой статьи разместить описание интерфейса для формировки очереди сообщений.
Также оговорюсь, что решение протестировано с использованием связи от Мегафон-Северный Кавказ. Допускаю, что другие операторы могут как-то иначе работать с теми же кодировками.
Постановка задачи
- Адресаты могут отказаться отдальнейшей рассылки, отправив определенное слово на номер модема
- Отправка сообщений кириллицей
- Удобный интерфейс пользователя
Реализация
Из апаратной части был использован стандартный GPRS-модем с COM-портом. Для начала устанавливаем app-mobilephone/smstools3 из нашего оверлея. Пакет app-mobilephone/smstools из основного дерева портежей не позволяет обрабатывать длинные составные сообщения в UNICODE. Перед установкой пакет необходимо размаскировать в /etc/portage/package.keywords# emerge app-mobilephone/smstools3Кофигурация /etc/smsd.conf
devices = GSM1 logfile = /var/log/smsd.log loglevel = 5 mypath = /usr/bin/ #Ошибки отправки failed=/var/spool/sms/sent #Отправленые сообщения sent=/var/spool/sms/sent #Файл со списком номеров, кто отказался от рассылки blacklist = /var/spool/sms/blacklist #Скрипт обаботки для входящих сообщений eventhandler = /usr/local/bin/sms_event.sh [GSM1] device = /dev/ttyS0 incoming = yes #pin = 1111Перед запуском демона обязательно создаем файл черного списка
# touch /var/spool/sms/blacklist # chown smsd /var/spool/sms/blacklistи файл лога
# touch /var/log/smsd.log # chown smsd /var/log/smsd.logСкрипт добавления адресатов в черный список(им сообщения отправляться не будут). Для его срабатывания необходимо отправить цифру 0 на номер модема.
#!/bin/bash
BLACK_LST=/var/spool/sms/blacklist
if [ "$1" = "RECEIVED" ] ; then
BODY=$(cat $2 |grep "^0")
if [ $BODY -eq 0 ] ; then
cat $2|grep "^From:"|sed s/"From: "//;$BLACK_LST
fi
fi
Скрипт формиовки сообщений и постановки в очередь отправки. Здесь было уделено внимание формировке тела письма и указаню кодировки в шапке письма. Без явного указания кодировки тело не верно декодируется на телефоне. Для работы необходима утилита iconv. #!/bin/bash
if -f /tmp/smsd.lock ;
then exit 0
else touch /tmp/smsd.lock
fi
PREP_DIR="/root/sms"
OUT_DIR="/var/spool/sms/outgoing"
cd $PREP_DIR
for message in $(ls *) ; do
output=${OUT_DIR}/$(date "+%s")
cat ${message}|grep "^To:">${output}.sms
echo "Alphabet: UCS2">>${output}.sms
echo "UDH: false">>${output}.sms
echo>>${output}.sms
cat ${message}|grep -v "^To:"|iconv -t UCS-2BE -f utf8 >> ${output}.sms
rm -f ${message}
sleep 1
done
rm -f /tmp/smsd.lock
--- Статья не окончена --- Программа генерирует в определенной директории файлы для отправки. Скрипт генерации очереди перекодирует их в нужную кодировку и отдаёт для отправки демону smsd, который осуществляет рассылку через модем. Если адресат не хочет больше получать рассылку, то он отправляет 0 в ответ. Скрипт sms_event.sh добавляет его номер в файл blacklist. Больше ему сообщения отправляться не будут. Задача решена. Приятной работы :)
Комментариев нет:
Отправить комментарий