Появилась интересная задача, которая заключается в том что нужно подключить GSM-модем USB HUAWEI E1550 к Asterisk 13 работающий на Debian 8 Jessie. Настроить возможность принимать/отправлять SMS, принимать/звонить с номера находящегося в GSM-модеме.
Рекомендуется чтобы GSM-модем HUAWEI E1550 работал на прошивке версии: 11.608.12.00.143, а так же чтобы работал только в режиме «только модем».
На момент написания статьи используемая версия Asterisk — 13.25.0, который развернут на Debian 8 Jessie (как развернуть Asterisk 13 на Debian 8 Jessie, можно по этой статье)
Настройка системы и GSM-модема
Обновляем систему до актуального состояния:
apt—get update && apt—get upgrade —y |
Устанавливаем необходимые пакеты для работы с USB GSM шлюзом:
apt—get install usb—modeswitch minicom |
usb-modeswitch необходима для автоматического переключения устройства из режима, minicom необходима для подключения к последовательным портам (COM).
Подключаем GSM-модем HUAWEI E1550, проверяем появились ли устройства ttyUSB*:
ls —al /dev | grep ttyUSB crw—rw—— 1 root dialout 188, 0 фев 27 11:34 ttyUSB0 crw—rw—— 1 root dialout 188, 1 фев 27 11:33 ttyUSB1 crw—rw—— 1 root dialout 188, 2 фев 27 12:37 ttyUSB2 |
Теперь необходимо перевести GSM-модем HUAWEI E1550 в режим работы «только модем».
В случае если GSM-модем HUAWEI E1550, уже находится в режиме работы «только модем», то пропускайте данный пункт и переходите к установке модуля chan_dongle.
Запускаем утилиту для подключения к последовательным портам (COM):
Выбираем пункт «Настройка последовательного порта»:
+——————[конфигурация]——————+ | Каталоги и файлы | | Протоколы | | Настройка последовательного порта | | Модем и дозвон | | Экран и клавиатура | | Сохранить настройки как dfl | | Сохранить настройки как... | | Выход | | Выход из Minicom | +——————————————————+ |
Нажимаем «A» для выбора имени устройства COM порта, вводим название устройства «/dev/ttyUSB0»
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
+————————————————————————————————————+ | A — Последовательный порт : /dev/ttyUSB0 | | B — Размещение lock—файла : /var/lock | | C — Программа при выходе : | | D — Программа при запуске : | | E — Скорость/Чётность/Биты : 115200 8N1 | | F — Аппаратное управление потоком : Да | | G — Программное управление потоком : Нет | | | | Какую настройку изменить? | +————————————————————————————————————+ | Экран и клавиатура | | Сохранить настройки как dfl | | Сохранить настройки как... | | Выход | | Выход из Minicom | +——————————————————+ |
Нажимаем 2 раза ENTER и выбираем «Сохранить настройки как…»
+——————[конфигурация]——————+ | Каталоги и файлы | | Протоколы | | Настройка последовательного порта | | Модем и дозвон | | Экран и клавиатура | | Сохранить настройки как dfl | | Сохранить настройки как... | | Выход | | Выход из Minicom | +——————————————————+ |
Вводим название профиля, нажимаем ENTER и выбираем пункт «Выход из Minicom»
Подключаемся к сохраненному профилю (я сохранил профиль как e1550):
В терминале, вводим команду AT, нажимаем ENTER, должен вернутся результат — «ОК«.
Обратите внимание, что символы, которые вводим, могут не отображаться на экране! Однако, после ввода команды и нажатия Enter, GSM-модем должен отобразить результат.
После успешного выполнения команды AT, выполним команду, которая переключит режим работы GSM-модем, в режим работы «только модем»:
Доступные режимы работы GSM-модема HUAWEI E1550:
AT^U2DIAG=0 (режим только модем)
AT^U2DIAG=1 (режим модем + CD-ROM)
AT^U2DIAG=255 (режим модем + CD-ROM + Card Reader)
AT^U2DIAG=256 (режим модем + Card Reader)
Полезные AT-команды:
ATI — Информация о устройстве
AT+CIMI — IMSI модема
AT+CGSN — IMEI модема
Для выхода из программы нажмите Ctrl+A, затем нажмите Q и подтвердите выход нажатием Enter.
Установка модуля chan_dongle
Скачиваем исходник модуля chan_dongle под Asterisk 13 и разархивируем его:
cd /opt wget https://github.com/oleg—krv/asterisk—chan—dongle/archive/asterisk13.zip unzip asterisk13.zip cd asterisk—chan—dongle—asterisk13 |
Выполняем сборку модуля, компиляцию и установку модуля:
aclocal && autoconf && automake —a ./configure make make install |
Не обращаем внимание на строчку «automake: error: no ‘Makefile.am’ found for any configure output» — это не является ошибкой
Копируем конфигурационный файл dongle.conf в каталог asterisk и назначаем ему нужные права:
cp etc/dongle.conf /etc/asterisk/ chown asterisk:asterisk /etc/asterisk/dongle.conf |
Чтобы при подключении GSM-модема, Asterisk имел доступ к нему, необходимо устройству назначать владельца asterisk и группу dialout. Создаем файл (nano /etc/udev/rules.d/92-dongle.rules) со следующим содержимым:
KERNEL==«ttyUSB*», MODE=«0666», OWNER=«asterisk», GROUP=«dialout» |
Перезапустим службу udev и asterisk:
service udev restart service asterisk restart |
Для проверки, переподключим GSM-модем к системе и проверим назначенные права на него:
ls —al /dev | grep ttyUSB crw—rw—rw— 1 asterisk dialout 188, 0 фев 27 11:34 ttyUSB0 crw—rw—rw— 1 asterisk dialout 188, 1 фев 27 11:33 ttyUSB1 crw—rw—rw— 1 asterisk dialout 188, 2 фев 27 13:09 ttyUSB2 |
Настройка обработки SMS, USSD, Входящих/Исходящих вызовов
В файле конфигурации (/etc/asterisk/dongle.conf) опишем параметры подключенного устройства HUAWEI E1550.
Для примера скорректируем имеющуюся секцию [dongle0]:
[dongle0] audio=/dev/ttyUSB1 ; tty порт для audio соединений; data=/dev/ttyUSB2 ; tty порт для AT команд; context=from—dongle ; используемый контекст language=ru ; используемый язык ;imei=123456789012345 ;imsi=123456789012345 |
Параметры imei, imsi должны автоматом подхватится при соединении asterisk c GSM-модемом. Если не этого не произошло, то можно в ручную их указать, в строках imei, imsi.
В консоли asterisk, перечитываем конфигурацию chan_dongle и проверяем состояние устройства. Если все было сделано правильно, то подключение к GSM-модему будет осуществлено и устройство будет отображаться в консоли asterisk:
asterisk —rv dongle reload now dongle show devices ID Group State RSSI Mode Submode Provider Name Model Firmware IMEI IMSI Number dongle0 0 Free 18 5 4 MTS—RUS E1550 11.608.12.00.143 3588*** 2500*** Unknown |
Теперь когда соединение с GSM-модемом установлено, настроим dialplan обработки SMS, USSD, входящих и исходящих вызовов. В файле конфигурации (/etc/asterisk/extensions.conf) добавляем следующее:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
[dongle—incoming—sms] exten => sms,1,Noop(Incoming SMS from ${CALLERID(num)} ${BASE64_DECODE(${SMS_BASE64})}) exten => sms,n,System(echo ‘${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} — ${DONGLENAME} — ${CALLERID(num)}: ${BASE64_DECODE(${SMS_BASE64})}’ >> /var/log/asterisk/sms.txt) exten => sms,n,Hangup() [dongle—incoming—ussd] exten => ussd,1,Noop(Incoming USSD: ${BASE64_DECODE(${USSD_BASE64})}) exten => ussd,n,System(echo ‘${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} — ${DONGLENAME}: ${BASE64_DECODE(${USSD_BASE64})}’ >> /var/log/asterisk/ussd.txt) exten => ussd,n,Hangup() [dongle—incoming—call] exten => +7915*****13,1,Answer() exten => +7915*****13,n,Playback(demo—echotest) exten => +7915*****13,n,Echo exten => +7915*****13,n,Playback(demo—echodone) exten => +7915*****13,n,Hangup() [dongle—outgoing—call] exten = _X.,1,Dial(Dongle/dongle0/${EXTEN},,t) exten = _X.,n,Hangup() [from—dongle] include => dongle—incoming—sms include => dongle—incoming—ussd include => dongle—incoming—call include => dongle—outgoing—call |
При поступлении SMS и USSD запросов, данные их будут сохранятся в тестовые файлы (/var/log/asterisk/sms.txt), (/var/log/asterisk/ussd.txt). При входящем звонке на номер который находится на GSM-модеме, будет запущен «ЭХО тест», при исходящем будет вызван набранный номер.
Для наглядности работы модуля chan_dongle, приведу выводы из консоли asterisk.
Получение SMS:
[dongle0] <strong>Got SMS from +7985*****73: ‘ТЕСТОВОЕ СООБЩЕНИЕ’</strong> — Executing [sms@from—dongle:1] NoOp(«Local/sms@from-dongle-00000002;1», «Incoming SMS from +7985*****73 ТЕСТОВОЕ СООБЩЕНИЕ») in new stack — Executing [sms@from—dongle:2] System(«Local/sms@from-dongle-00000002;1», «echo ‘2019-02-27 11:24:31 — e1550 — +7985*****73: ТЕСТОВОЕ СООБЩЕНИЕ’ >> /var/log/asterisk/sms.txt») in new stack — Executing [sms@from—dongle:3] Hangup(«Local/sms@from-dongle-00000002;1», «») in new stack == Spawn extension (from—dongle, sms, 3) exited non—zero on ‘Local/sms@from-dongle-00000002;1’ |
Пример отправки SMS:
dongle sms dongle0 +7917*****00 HELLO! THIS IS TEST MESSAGE! [dongle0] SMS queued for send with id 0x7fc348000a90 — [dongle0] Successfully sent SMS message 0x7fc348000a90 [Feb 27 11:30:22] NOTICE[852]: at_response.c:257 at_response_ok: [dongle0] Successfully sent SMS message 0x7fc348000a90 |
Пример отправки USSD запроса:
dongle ussd dongle0 *100# [dongle0] USSD queued for send with id 0x2e44cc0 — [dongle0] Successfully sent USSD 0x2e44cc0 [Feb 27 11:37:13] NOTICE[852]: at_response.c:267 at_response_ok: [e1550] Successfully sent USSD 0x2e44cc0 [dongle0] Got USSD type 0 ‘USSD Notify’: ‘Баланс:5676,62р ‘ — Executing [ussd@from—dongle:1] NoOp(«Local/ussd@from-dongle-00000004;1», «Incoming USSD: Баланс:5676,62р «) in new stack — Executing [ussd@from—dongle:2] System(«Local/ussd@from-dongle-00000004;1», «echo ‘2019-02-27 11:37:15 — e1550: Баланс:5676,62р ‘ >> /var/log/asterisk/ussd.txt») in new stack — Executing [ussd@from—dongle:3] Hangup(«Local/ussd@from-dongle-00000004;1», «») in new stack == Spawn extension (from—dongle, ussd, 3) exited non—zero on ‘Local/ussd@from-dongle-00000004;1’ |
Очистка SMS из памяти SIM и GSM-модема
Периодически рекомендуется очищать SMS из память SIM и GSM-модема.
Для очистки памяти SIM в консоли asterisk, вводим команды:
dongle cmd <dongle_name> AT+CPMS=«SM«,«SM«,«SM« dongle cmd <dongle_name> AT+CMGD=1,4 |
Для очистки памяти GSM-модема в консоли asterisk, вводим команды:
dongle cmd <dongle_name> AT+CPMS=«ME«,«ME«,«ME« dongle cmd <dongle_name> AT+CMGD=1,4 |
Понравилась или оказалась полезной статья, поблагодари автора
ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОБЛАГОДАРИ АВТОРА
Загрузка…
-
June 19 2015, 10:09
- IT
- Cancel
В статья будет расмотрен веб интерфейс для массовой рассылки смс с помощью USB GSM модемов прикрученных к asterisk.
Как собрать и настроить USB модема с asteriks уже куча мануалов — ищите без меня
Напоминаю что исходный код переехал теперь на новый адрес https://github.com/bg111/asterisk-chan-dongle
Описание как прикрутить веб интерфейс тут — http://www.pcbackup.it/asterisk-chan_dongle-huawei-graphical-interface-to-sms-massive-sending/
От туда же можете скачать и программу на итальянском языке или на русском — ссылка — https://yadi.sk/d/ukZ3dxzohLdm2
Я только распишу тоже самое по русски.
Для начала предположим что у вас FreePBX или Elastix — и все настройки из apacha и php у вас уже работают
Скачиваете программу и распологаете в каталоге /var/www/html/pcbackup/
Проверяете открывается ли веб интерфейс пройдя по адресу http://адрес_сервера/pcbackup
Если открылось — то всё отлично, приступаем к настройке
Прежде всего надо определиться как мы наименовали модемы в asterisk
asterisk -rx ‘dongle show devices’
dongle show devices
ID Group State RSSI Mode Submode Provider Name Model Firmware IMEI IMSI Number
dongle0 0 Free 22 0 0 MegaFon RUS E173 11.126.16.17.209 861961019532697 250023007904029 Unknown
Видим для примера имя dongle0 через который модем будем отправлять СМС — имя берется и ваших настроек dongle.conf
========================================================================
теперь пробуем отправить тестовую СМС через наш dongle0
asterisk -rx ‘dongle sms dongle0 +79xxxyyyzzz Это тестовая СМС’
Если СМС пришла — всё отлично — двигаемся дальше
если ще модем назывется beeline то отправка выглядит вот так
asterisk -rx ‘dongle sms beeline +79xxxyyyzzz Это тестовая СМС’
========================================================================
Теперь нам надо отредактировать исходники программы чтобы внести названия модемов
и исправить код страны
nano /var/www/html/pcbackup/elabora.php
ищем два места
первый
$output = shell_exec(«$command «dongle sms dongle0 $csv_array[$i] $messaggio » «);
и второй
$output = shell_exec(«$command «dongle sms dongle0 +39$csv_array[$i] $messaggio » «);
========================================================================
У автора задумка следующая — если телефон начинается на + то отправляется через первый вызов
(если номер на + и следующие две цифры в диапозоне от 0 до 9 и последующие 9 цифрт тоже в диапозоне от 0 до 9 тогда …)
вот этот кусок $pattern = «^(+)([0-9]{2})([0-9]{9,})$^»;
если номер на который отправляем без + отправляем через второй вызов
Тут все зависит от ваших запросов — если у вас два модема можете разнести по разным модема — отдавая номер с плюсом или без него
Если же у вас один модем — просто правите эти два места до вида
первый (правите dongle0 — до вашего названия модема (на пример beeline))
$output = shell_exec(«$command «dongle sms beeline $csv_array[$i] $messaggio » «);
и второй ( правите имя модема и меняете код страны ( с +39 до просто + ))
$output = shell_exec(«$command «dongle sms beeline +$csv_array[$i] $messaggio » «);
========================================================================
Следующий этап это выставления правильных прав на каталог загрузки списка телефонов
chmod 777 /var/www/html/pcbackup/upload
Если у вас FreePBX или Elastix там необходимо еще сменить и владельца каталога до asterisk:asterisk
chown -R asterisk:asterisk /var/www/html/pcbackup
========================================================================
Подготавливаем файл для загруки списка телефонов, можете хоть в блокноте хоть в excel (выгрузка в формате csv разделитель запятая)
формат: номера телефонов через запятую
79120000001,79120000002,
Загружаем список через выбор файла в программу вводим текст для отправки и нажимаем отправку
Если всё сделано успешно — начнут приходить СМС
Не используйте кавычьки и пробелы в DongleSendSMS, была аналогичная проблема.
same => n,DongleSendSMS(dongle0,+7921хххх,test01,1440,yes)
Так же в том примере в DongleSendSMS прилетает номер получателя в виде sip:+7921хххх, что нам неподходит.
Вот рабочая конструкция
exten => _+380XXXXXXXXX,1,NoOp(SMS send to dongle)
same => n,NoOp(To ${MESSAGE(to)})
same => n,NoOp(From ${MESSAGE(from)})
same => n,NoOp(Body ${MESSAGE(body)})
same => n,Set(SMSTEMP=${CUT(MESSAGE(to),@,1)})
same => n,Set(SMSTO=${CUT(SMSTEMP,:,2)})
same => n,DongleSendSMS(Vodafone,${SMSTO},${MESSAGE(body)},1440,yes)
;same => n,System(asterisk -rx «dongle sms Vodafone ${SMSTO} ${MESSAGE(body)}») если не работает DongleSendSMS можно отправлять через System
same => n,Hangup()
Asterisk 13.11.2
- Comment
I have successfully set up raspbx and can make and receive calls via
Chan_dongle . I am reciving text and voicmeils to email.
Unfortunately I an away from the modem so I do not know the model number but lsusb reports this modem as
Bus 001 Device 004: ID 12d1:1433 Huawei Technologies Co., Ltd.
I have two problems not related to voice calls
Problem 1 SMS
When I try send an SMS no matter how I format the number I get
[2015-10-26 01:43:24] ERROR[1682]: at_response.c:499 at_response_error:
[dongle0] Error sending SMS message 0xb64014b0
Problem 2 USSD
When I try to send USSD I get
— [dongle0] Successfully sent USSD 0xb64964f8
[2015-10-25 23:14:18] NOTICE[4627]: at_response.c:267 at_response_ok:
[dongle0] Successfully sent USSD 0xb64964f8
[dongle0] Got USSD type 0 ‘USSD Notify’: ‘Aplicacion desconocida’
— Executing [ussd@from-trunk-dongle:1]
Set(«Local/ussd@from-trunk-dongle-00000003;1», «CALLERID(name)=ussd») in
new stack
— Executing [ussd@from-trunk-dongle:2]
Goto(«Local/ussd@from-trunk-dongle-00000003;1», «from-trunk,ussd,1») in new
stack
— Goto (from-trunk,ussd,1)
— Executing [ussd@from-trunk:1]
Set(«Local/ussd@from-trunk-dongle-00000003;1», «FROM_DID=ussd») in new
stack
— Executing [ussd@from-trunk:2]
NoOp(«Local/ussd@from-trunk-dongle-00000003;1», «Received an unknown call
with DID set to ussd») in new stack
— Executing [ussd@from-trunk:3]
Goto(«Local/ussd@from-trunk-dongle-00000003;1», «s,a2») in new stack
— Goto (from-trunk,s,2)
— Executing [s@from-trunk:2]
Answer(«Local/ussd@from-trunk-dongle-00000003;1», «») in new stack
[2015-10-25 23:14:20] WARNING[10670][C-00000014]: chan_sip.c:22131
func_header_read: This function can only be used on SIP channels.
— Executing [s@from-trunk:3]
Log(«Local/ussd@from-trunk-dongle-00000003;1»,
«WARNING,Friendly Scanner from «) in new stack
[2015-10-25 23:14:20] WARNING[10670][C-00000014]: Ext. s:3 @ from-trunk:
Friendly Scanner from
— Executing [s@from-trunk:4]
Wait(«Local/ussd@from-trunk-dongle-00000003;1», «2») in new stack
[2015-10-25 23:14:22] WARNING[10670][C-00000014]: channel.c:1309ast_queue_frame: Exceptionally long voice queue length queuing to
Local/ussd@from-trunk-dongle-00000003;2
— Executing [s@from-trunk:5]
Playback(«Local/ussd@from-trunk-dongle-00000003;1», «ss-noservice») in new
stack
— Local/ussd@from-trunk-dongle-00000003;1 Playing
‘ss-noservice.slin’ (language ‘en’)
[2015-10-25 23:14:24] WARNING[10670][C-00000014]: channel.c:1309
ast_queue_frame: Exceptionally long voice queue length queuing to
Local/ussd@from-trunk-dongle-00000003;2
[2015-10-25 23:14:25] WARNING[10670][C-00000014]: channel.c:1309ast_queue_frame: Exceptionally long voice queue length queuing to
Local/ussd@from-trunk-dongle-00000003;2
[2015-10-25 23:14:26] WARNING[10670][C-00000014]: channel.c:1309
ast_queue_frame: Exceptionally long voice queue length queuing to
Local/ussd@from-trunk-dongle-00000003;2
[2015-10-25 23:14:27] WARNING[10670][C-00000014]: channel.c:1309ast_queue_frame: Exceptionally long voice queue length queuing to
Local/ussd@from-trunk-dongle-00000003;2
— Executing [s@from-trunk:6]
SayAlpha(«Local/ussd@from-trunk-dongle-00000003;1», «ussd») in new stack
— Local/ussd@from-trunk-dongle-00000003;1 Playing ‘letters/u.slin’
(language ‘en’)
— Local/ussd@from-trunk-dongle-00000003;1 Playing ‘letters/s.slin’
(language ‘en’)
[2015-10-25 23:14:29] WARNING[10670][C-00000014]: channel.c:1309
ast_queue_frame: Exceptionally long voice queue length queuing to
Local/ussd@from-trunk-dongle-00000003;2
— Local/ussd@from-trunk-dongle-00000003;1 Playing ‘letters/s.slin’
(language ‘en’)
— Local/ussd@from-trunk-dongle-00000003;1 Playing ‘letters/d.slin’
(language ‘en’)
[2015-10-25 23:14:30] WARNING[10670][C-00000014]: channel.c:1309ast_queue_frame: Exceptionally long voice queue length queuing to
Local/ussd@from-trunk-dongle-00000003;2
— Executing [s@from-trunk:7]
Hangup(«Local/ussd@from-trunk-dongle-00000003;1», «») in new stack
== Spawn extension (from-trunk, s, 7) exited non-zero on
‘Local/ussd@from-trunk-dongle-00000003;1’
— Executing [h@from-trunk:1]
Macro(«Local/ussd@from-trunk-dongle-00000003;1», «hangupcall,») in new stack
— Executing [s@macro-hangupcall:1]
ExecIf(«Local/ussd@from-trunk-dongle-00000003;1»,
«0?Set(CDR(recordingfile)=.)») in new stack
— Executing [s@macro-hangupcall:2]
GotoIf(«Local/ussd@from-trunk-dongle-00000003;1», «1?theend») in new stack
— Goto (macro-hangupcall,s,4)
— Executing [s@macro-hangupcall:4]
Hangup(«Local/ussd@from-trunk-dongle-00000003;1», «») in new stack
== Spawn extension (macro-hangupcall, s, 4) exited non-zero on
‘Local/ussd@from-trunk-dongle-00000003;1’ in macro ‘hangupcall’
== Spawn extension (from-trunk, h, 1) exited non-zero on
‘Local/ussd@from-trunk-dongle-00000003;1’
Last edit: MarkosJal 2015-10-26
Всем привет.
Юзаю стандартный 3g модем Huawei E1550/E1750. Это больше МАНУАЛ, но так же прошу помочь расширить функционал! 2 человека очень обрадовались когда я им скинул рабочий когфиг, решил поделиться миром!
И так, у меня стоит 13 Asterisk, FreePBX 13,Chan_dongle. Встала задача получать и отправлять смс прямо из сипфона.
Получалка и отправлялка смс через Chan_dongle в Sip клиент.
Работает в Zoiper, Microsip, PortGo. Больше не проверял… Когда смс приходит на донгл, ее перекидывает на сип сразу под номером с которого она пришла. Соответственно можно на нее ответить или написать новую.
999 это номер sip который может получать и слать SMS с модема.
dongle0 — имя модема с которого получать и слать смс если модемов много, то получать со всех, а отправлять только с одного (dongle0)
#нет отложенной отправки смс (если сип 999 в сети, смс получит, а если нет — то нет, нооооо в лог пишет при любом раскладе)
если используется FREEPBX — в админке:Settings>>>Asterisk SIP Settings, вкладка Chan SIP settings, внизу есть поля для заполнения (Other SIP Settings). А если чистый астериск, то пихать сюда /etc/asterisk/sip.conf
вот параметры:
accept_outofcall_message=yes
outofcall_message_context=messages
auth_message_requests=no
textsupport=yes
/etc/asterisk/extensions_custom.conf
[from-trunk-dongle]
exten => sms,1,Set(MESSAGE(body)=${BASE64_DECODE(${SMS_BASE64})})
exten => sms,n,System(echo '${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} - ${DONGLENAME} - ${CALLERID(num)}: ${BASE64_DECODE(${SMS_BASE64})})' >> /var/log/asterisk/sms.txt)
exten => sms,n,Set(MESSAGE(from)="${CALLERID(num)}" <${CALLERID(num)}>)
exten => sms,n,Set(CALLERID(name)=${CALLERID(num)})
exten => sms,n,Verbose(1,${MESSAGE(from)})
exten => sms,n,MessageSend(sip:999,${MESSAGE(from)})
exten => sms,n,Hangup()
exten => _.,1,Set(CALLERID(name)=${CALLERID(num)})
exten => _.,n,Goto(from-trunk,${DONGLEIMEI},1)
exten => ussd,1,Verbose(Incoming USSD: ${BASE64_DECODE(${USSD_BASE64})})
exten => ussd,n,System(echo '${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} - ${DONGLENAME}: ${BASE64_DECODE(${USSD_BASE64})}' >> /var/log/asterisk/ussd.txt)
exten => ussd,n,Hangup()
[messages]
include => send-sms
exten => _XXX,1,MessageSend(sip:${EXTEN},"${CALLERID(name)}"${MESSAGE(from)})
[send-sms]
exten => _.,1,NoOp(SMS send to dongle)
same => n,NoOp(To ${MESSAGE(to)})
same => n,NoOp(From ${MESSAGE(from)})
same => n,NoOp(Body ${MESSAGE(body)})
same => n,Set(SMSTO=${EXTEN})
same => n,DongleSendSMS(dongle0,${SMSTO},"${MESSAGE(body)}",1440,yes)
same => n,Hangup()
Вопрос, а что делать если модемов 5, юзеров 15 и только 5 из них должны отправлять смс с конкретного транка, а остальные должны общаться междус обой по [messages]?
Как сделать проверку в стиле:
if extension = 999 and numberTO-not(555,444,6666666,999999,777777,999999,77774,44,44444)goto [send-sms]
А в [send-sms] проверку:
if extension = 999 goto same => n,DongleSendSMS(dongle0,${SMSTO},"${MESSAGE(body)}",1440,yes)
elseif extension = 444 goto same => n,DongleSendSMS(dongle1,${SMSTO},"${MESSAGE(body)}",1440,yes)
итд