Подробное описание создание создание сервера для рассылок 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. Больше ему сообщения отправляться не будут. Задача решена. Приятной работы :)
Комментариев нет:
Отправить комментарий