После успешного подключения модем появится в /dev.
# ls -la | grep cua crw-rw---- 1 uucp dialer 0x80 Feb 16 21:49 cuaU0.0 crw-rw---- 1 uucp dialer 0x81 Feb 16 21:49 cuaU0.0.init crw-rw---- 1 uucp dialer 0x82 Feb 16 21:49 cuaU0.0.lock crw-rw---- 1 uucp dialer 0x87 Feb 16 21:49 cuaU0.1 crw-rw---- 1 uucp dialer 0x88 Feb 16 21:49 cuaU0.1.init crw-rw---- 1 uucp dialer 0x89 Feb 16 21:49 cuaU0.1.lock crw-rw---- 1 uucp dialer 0x90 Feb 16 21:49 cuaU0.2 crw-rw---- 1 uucp dialer 0xac Feb 16 21:49 cuaU0.2.init crw-rw---- 1 uucp dialer 0xad Feb 16 21:49 cuaU0.2.lock crw-rw---- 1 uucp dialer 0x25 Feb 21 23:43 cuau0 crw-rw---- 1 uucp dialer 0x26 Feb 9 09:13 cuau0.init crw-rw---- 1 uucp dialer 0x27 Feb 9 09:13 cuau0.lockДобавляем пользователя asterisk в группу dialer
# pw groupmod dialer -m asterisk
- chan_dongle
Теперь необходимо добавить в астериск модуль chan_dongle. С помощью него возможно подключение и использование GSM модемов для входящих/исходящих звонков и СМС.
Рабочий chan-dongle для asterisk13
https://github.com/oleg-krv/asterisk-chan-dongle/tree/asterisk13
Качаем zip-файл, распаковываем, затем в папке выполняем команды:# aclocal # autoconf # automake -a # ./configure # make install
Файл chan_dongle.so должен появиться в /usr/local/lib/asterisk/modules
Копируем dongle.conf из etc в папке с исходниками модуля в /usr/local/etc/asterisk. Поправляем. Я собираюсь использовать мегафоновскую симку. Редактируем /usr/local/etc/asterisk/dongle.conf (описания параметров можно посмотреть в этом же файле)[general] interval=15 [megafon] context=megafon-incoming exten=+1234567890 audio=/dev/cuaU0.1 data=/dev/cuaU0.2 group=1 rxgain=2 txgain=2 resetdatacard=yes u2diag=0 usecallingpres=yes callingpres=allowed_passed_screen disablesms=no
- context=megafon-incoming - этот контекст будем указывать в extensions.conf для входящей связи
- exten=+1234567890 - номер телефона сим-карты
Заходим в шелл астериска и пробуем загрузить модуль, должно получиться что то вроде этого:# asterisk -rv CLI> module load chan_dongle Loaded chan_dongle [xxx xx xx:xx:xx] NOTICE[101526]: chan_dongle.c:1584 reload_config: [megafon] Loaded device Loaded chan_dongle.so => (Huawei 3G Dongle Channel Driver)
Если при попытке загрузить модуль выскакивает ошибка:CLI> module load chan_dongle Unable to load module chan_dongle Command 'module load chan_dongle' failed. [xxx xx xx:xx:xx] WARNING[100846]: loader.c:595 load_dynamic_module: Error loading module 'chan_dongle': /usr/local/lib/asterisk/modules/chan_dongle.so: Undefined symbol "libiconv" [xxx xx xx:xx:xx] WARNING[100846]: loader.c:1079 load_resource: Module 'chan_dongle' could not be loaded.
то вручную правим Makefile в папке с исходниками модуляLIBS = /usr/local/lib/libiconv.so
Затем выполняем# make install
Модуль установили, астериск его принял, проверяем из шелла:CLI> dongle show devices ID Group State RSSI Mode Submode Provider Name Model Firmware IMEI IMSI Number megafon 1 GSM not re 10 5 4 NONE E1550 11.608.12.00.143 XXXXXXXXXXXXXXX XXXXXXXXXXXXXXX Unknown
- Исходящая связь
/usr/local/etc/asterisk/extensions.conf Добавляем в [default] или в заданный вами контекст (у меня это [from-internal]). Самый простой диалплан:[from-internal] ; out call from mobile exten => _7XXXXXXXXXX,1,Dial(dongle/megafon/+${EXTEN},240,tT)
- dongle/megafon - megafon - название нашего модема из /usr/local/etc/asterisk/dongle.conf
- все звонки на номера, начинающиеся с 7 и содержащие после неё десять цифр, будут осуществляться через модем
- Входящая связь
/usr/local/etc/asterisk/extensions.conf[megafon-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.log) exten => sms,n,Hangup() [megafon-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} - ${CALLERID(num)}: ${BASE64_DECODE(${USSD_BASE64})}' >> /var/log/asterisk/ussd.log) exten => ussd,n,Hangup() [megafon-incoming] include => megafon-incoming-sms include => megafon-incoming-ussd exten => +1234567890,1,Set(${CALERID(num)}) exten => +1234567890,n,Dial(SIP/NUMBER,60) exten => h,1,Hangup()
- [megafon-incoming-sms] - принимаем SMS
- [megafon-incoming-ussd] - принимаем USSD
- [megafon-incoming] - диалплан, указанный в файле /usr/local/etc/asterisk/dongle.conf (context=megafon-incoming)
- +1234567890 - номер, указанный в файле /usr/local/etc/asterisk/dongle.conf (exten=+1234567890)
- NUMBER - номер из /usr/local/etc/asterisk/sip.conf, на который будут приходить все входящие звонки
- Полезные вещи
- [device] имя девайса dongle (поле ID из вывода команды "dondle show devices")
-- Отправка sms из консоли:# asterisk -rx "dongle sms [device] [number] [message]"
номер телефона получателя смс текст смс
-- Если буфер модема переполнен (в логах появится сообщение "SMS storage is full"), то необходимо его очистить из консоли asterisk при помощи команд:
- память SIM:> dongle cmd [device] AT+CPMS=\"SM\",\"SM\",\"SM\" > dongle cmd [device] AT+CMGD=1,4
- память модема:> dongle cmd [device] AT+CPMS=\"ME\",\"ME\",\"ME\" > dongle cmd [device] AT+CMGD=1,4
-- Перезапустить модем из консоли:> dongle restart now [device]