Используя утилиту SMSTOOLS3 (развернутую по этой статье) для отправки/приема SMS сообщений, я столкнулся со сложностью отправки SMS сообщений с разных подключенных GSM модемов.
По-умолчанию в SMSTOOLS3, имеется скрипт отправки SMS сообщений (/usr/local/bin/sendsms), который отправляет SMS сообщения с первого устройства указанного в файле конфигурации.
Ниже рассмотрим как исправить изъян скрипта в отсутствие выбора GSM модема для отправки SMS сообщения, путем доработки его.
Рассмотрим как настроить два GSM модема (прим. GSM1, GSM2), для возможности отправки с обоих SMS сообщений. В конфигурационном файле (/etc/smsd.conf), указываем используемые GSM модемы через запятую (devices = GSM1, GSM2), добавляем секцию описания очередей ([queues]) для каждого GSM модема и в каждую секцию описания GSM модема указываем какая очередь используется для того или иного GSM модема.
Пример файла конфигурации:
devices = GSM1, GSM2 outgoing = /var/spool/sms/outgoing checked = /var/spool/sms/checked incoming = /var/spool/sms/incoming failed = /var/spool/sms/failed sent = /var/spool/sms/sent logfile = /var/log/smsd.log loglevel = 5 [queues] GSM1 = /var/spool/sms/GSM1 GSM2 = /var/spool/sms/GSM2 [GSM1] device = /dev/ttyUSB2 incoming = high queues = GSM1 detect_unexpected_input = no check_memory_method = 31 ussd_convert = 1 [GSM2] device = /dev/ttyUSB5 incoming = high queues = GSM2 detect_unexpected_input = no check_memory_method = 31 ussd_convert = 1
Создадим каталоги для очередей (GSM1, GSM2) указанные в файле конфигурации (/etc/smsd.conf):
mkdir -p /var/spool/sms/{GSM1,GSM2}
Я модернизировал поставляемый по-умолчанию скрипт для отправки SMS сообщений. Заменяем содержимое в исходном скрипте (/usr/local/bin/sendsms), на представленное содержимое ниже:
#!/bin/bash # This script send a text sms at the command line by creating # a sms file in the outgoing queue. # $1 is the destination phone number. # $2 is the message text. # If you leave $2 or both empty, the script will ask you. # If you give more than 2 arguments, last is taken as a text and # all other are taken as destination numbers. # If a destination is asked, you can type multiple numbers # delimited with spaces. # Keys for example: "password" and "keke": # KEYS="5f4dcc3b5aa765d61d8327deb882cf99 4a5ea11b030ec1cfbc8b9947fdf2c872 " KEYS="" # When creating keys, remember to use -n for echo: # echo -n "key" | md5sum smsd_group="smsd" # Will need echo which accepts -n argument: ECHO=echo case `uname` in SunOS) ECHO=/usr/ucb/echo ;; esac if ! [ -z "$KEYS" ]; then printf "Key: " read KEY if [ -z "$KEY" ]; then echo "Key required, stopping." exit 1 fi KEY=`$ECHO -n "$KEY" | md5sum | awk '{print $1;}'` if ! echo "$KEYS" | grep "$KEY" >/dev/null; then echo "Incorrect key, stopping." exit 1 fi fi DEST=$1 TEXT=$2 MODEM=$3 if [ -z "$DEST" ]; then printf "Destination(s): " read DEST if [ -z "$DEST" ]; then echo "No destination, stopping." exit 1 fi fi if [ -z "$TEXT" ]; then printf "Text: " read TEXT if [ -z "$TEXT" ]; then echo "No text, stopping." exit 1 fi fi if [ $# -gt 3 ]; then n=$# while [ $n -gt 1 ]; do destinations="$destinations $1" shift n=`expr $n - 1` done TEXT=$1 else destinations=$DEST fi if [ -z $3 ]; then MODEM="outgoing" fi echo "-- " echo "Text: $TEXT" ALPHABET="" if which iconv > /dev/null 2>&1; then if ! $ECHO -n "$TEXT" | iconv -t ISO-8859-15 >/dev/null 2>&1; then ALPHABET="Alphabet: UCS" fi fi group="" if [ -f /etc/group ]; then if grep $smsd_group: /etc/group >/dev/null; then group=$smsd_group fi fi for destination in $destinations do echo "To: $destination" echo "Modem: $MODEM" TMPFILE=`mktemp /tmp/smsd_XXXXXX` $ECHO "To: $destination" >> $TMPFILE $ECHO "Modem: $MODEM" >> $TMPFILE [ -n "$ALPHABET" ] && $ECHO "$ALPHABET" >> $TMPFILE $ECHO "" >> $TMPFILE if [ -z "$ALPHABET" ]; then $ECHO -n "$TEXT" >> $TMPFILE else $ECHO -n "$TEXT" | iconv -t UNICODEBIG >> $TMPFILE fi if [ "x$group" != x ]; then chgrp $group $TMPFILE fi chmod 0660 $TMPFILE FILE=`mktemp /var/spool/sms/$MODEM/send_XXXXXX` mv $TMPFILE $FILE done
Синтаксис использования остался прежним, за исключением того что после текста сообщения, можно указать с какого GSM модема отправить его.
sendsms 79888888888 'С первого телефона' GSM1 sendsms 79888888888 'Со второго телефона' GSM2
Понравилась или оказалась полезной статья, поблагодари автора
ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОБЛАГОДАРИ АВТОРА
Оставить ответ