Речь пойдёт о связке FreeBSD 8.2+Asterisk 1.8+модем Huawei E150. Цель - принимать входящие и осуществлять исходящие вызовы и принимать SMS. Модем Huawei E150 практически аналогичен модему Huawei E1550. Единственное различие - отсутствие кардридера для MisroSD-карт памяти.
Кроме непосредственно операционной системы и Asterisk необходим драйвер модема. К сожалению, найти его в портах не удалось, равно как и архива с исходным кодом, поэтому был установлен пакет devel/subversion и скачана последняя версия с сайта разработчика. Итак, проделываем следующие шаги.
cd {путь для исходных текстов} svn checkout http://asterisk-chan-dongle.googlecode.com/svn/trunk/ asterisk-chan-dongle-read-only asterisk-chan-dongle-read-only ./configure gmake gmake install cp etc/dongle.conf /usr/local/etc/asterisk
Установка модема на сервер прошла успешно. Система сразу же определила несколько устройств. В том числе 4 порта COM (cuaU0.x) и CD-накопитель. Судя по этому модем можно не перепрограммировать модем если наличие виртуального CD в системе не смущает.
Настраиваем /usr/local/etc/asterisk/dongle.conf:
[general] interval=15 [datacard0] context=incoming-utel ; Контекст для вызовов. Должен быть описан в дайлплане. audio=/dev/cuaU0.1 ; Порт для аудио data=/dev/cuaU0.2 ; Порт для команд group=1 rxgain=3 txgain=3 autodeletesms=yes resetdatacard=yes u2diag=0 usecallingpres=yes callingpres=allowed_passed_screen [datacard1] context=incoming-motiv audio=/dev/cuaU3.1 data=/dev/cuaU3.2 group=2 rxgain=0 txgain=0 autodeletesms=yes resetdatacard=yes u2diag=0 usecallingpres=yes callingpres=allowed_passed_screen
Большинство параметров я взял из шаблона [datacard1]. Всё лишнее удалил.
По непонятной мне причине при первом включении оказалось 4 порта cuaU для каждого модема. Изначально было указано audio - cuaUx.2, для data cuaUx.3.Для того, чтобы Asterisk получил доступ к портам дадим пользователю asterisk доступ к ресурсам группы dialer.
# pw usermod asterisk -G dialer
Дальше всё просто. Настраиваем дайлплан. Для хранения информации по дайлплану я использовал extensions.ael:
context incoming-utel { s => { Set(CALLERID(all)=$[CALLERID(num)]); Dial(SIP/903&SIP/900,60,t); }; sms => { Verbose(Incoming SMS from ${CALLERID(num)} ${SMS}); System(echo '${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} - ${DONGLENAME} - ${CALLERID(num)}: ${SMS}' >> /var/log/asterisk/sms.txt); Hangup(); }; }
По команде Dial в моём варианте вызов будет поступать на внутрениие номера 903 и 900. Кто первый ответит, тот и будет разговаривать. Замените номера своими. Естественно, здесь можно использовать все варианты команды Dial, т.е. можно отправлять вызов и на внешние направления. Всё зависит от вашей фантазии и финансов. Как правило вызовы на сеть ТФОП и сотовые телефоны не бесплатные, а платить вы будете за исходящий вызов, поэтому будьте внимательными.
Команда Set нужна для того, чтобы определялся номер звонящего на SIP-телефоне. Если эту строку удалить, то вместо номера будет указано "datacard0". Возможно вам это покажется полезным если вы планируете использовать Asterisk в качестве основы Call-центра - ваши операторы не будут видеть кто им дозванивается и не смогут игнорировать "плохих" клиентов. В любом случае узнать позже номер звонящего абонента можно в файлах CDR.
SMS принимаются и в файл /var/log/asterisk/sms.txt. Можете заманить команду echo любой командой и выполнять необходимые вам действия при приёме SMS.
Если Asterisk сообщает, что хранилище SMS переполнено: [datacard0] SMS storage is full - удалите все сообщения с помощью команды в консоли Asterisk:
# asterisk -r tavda*CLI> dongle cmd datacard0 AT+CMGD=1,4
Теперь можем проверить работоспособность входящего канала:
tavda*CLI> dongle show devices ID Group State RSSI Mode Submode Provider Name Model Firmware IMEI IMSI Number datacard1 1 Free 18 3 3 MOTIV E150 11.609.82.02.143 35210... 25035... Unknown datacard0 1 Free 27 3 3 Utel E150 11.609.82.02.143 35210... 25017... +790225...
Если есть желание, то можно задать номер телефона для сим-карт с номером Unknown:
tavda*CLI> dongle cmd datacard1 AT+CPBS=\"ON\" tavda*CLI> dongle cmd datacard1 AT+CPBW=1,\"+795273XXXXX\",145
Для осуществления исходящих вызовов через модемы просто используйте соответствующие шаблоны в extensions.ael:
_89022[5-7]XXXXX => Dial(Dongle/datacard0/${EXTEN}); _895304XXXXX => Dial(Dongle/datacard1/${EXTEN});
Вот собственно и всё. Больше ничего от модема мне не требовалось. При желании можете найти варианты настройки Asterisk для работы с модемом Huawei E1550. Настройки дайлплана для E150 будут аналогичные.
И будьте внимательны - поскольку исходящие вызовы через сотовую платные не давайте доступ к ним кому попало, а если есть доступ к серверу из интернета, пользуйтесь стойкими паролями хотя бы для тех, кто будет пользоваться исходящей связью.
P.S. Первоначальный вариант статьи от 22.12.2010 03:41 был переработан. Вместо chan_datacard теперь используется chan_dongle. Также произведён переход с FreeBSD 8.1 на 8.2 и Asterisk 1.8.0 на 1.8.5. По большей части всё описанное выше справедливо и для старых версий. Однако рекомендую при установке пользоваться свежими версиями.
Позитивная статейка, однозначно пригодится - модемы только предстоит прикручивать.
ОтветитьУдалитьА как отправить СМС кирилицей?
ОтветитьУдалитьУвы,отправкой СМС не баловался.
Удалитькакое количество модемов может проглотить данная схема?
ОтветитьУдалитьсейчас стабильно работают только три. как только включаю еще один модем, они начинают виснуть, и астер их теряет.
ps: кстати, победил ли кто-нибудь перемешивание модемов? пока прикрутил костыль, но хотелось бы от него уйти.
Увы, ничего не могу сказать. У меня работало одновременно только 3: E150, E150 и E1550. Один из них был под атакой СМС в течении месяца. Пришло порядка 3,5 тысяч сообщений.
УдалитьПеремешивание модемов действительно имеет место. Один из трёх модемов был включен на время проведения СМС голосования и потом изъят. В обоих случая после перезагрузки система работала только частично до правки конфигов.
у меня та же проблема, удалось ее как-то победить? и можно подробнее насчет костыля?
УдалитьИспользуйте chan_dongle.
УдалитьИспользую. Все равно иногда отваливаются модемы, причем не все, а начиная с определенного номера и те, что за ним следуют. Как с эти бороться? Модемов всего 5 штук, вот начиная с 3 и по порядку за ним иногда пропадают из астера и даже консоль начинает чудить и не реагировать на команды. Иногда помогает только перезагрузка компа.
УдалитьЕсли вам ещё интересно, то под Linux есть такая замечательная штука, как привязка модемов к каналам по IMEI. Правда у меня возникли проблемы с модемами E150 теми же самыми - односторонняя слышимость. Пока так и не решил.
УдалитьАлександр, модемы могут отваливаться от недостатка питания по USB порту компа. Вам поможет активный (с дополнительным питанием) USB хаб. Я использую D-Link DUB-H7
УдалитьМожно ли проработать вариант комммерческой отправки смс? Скажем есть интернет-магазин и наступает время уведомить постоянных клиентов о чем-то ... как всем послать смс?
ОтветитьУдалитьЛюбой каприз за ваши деньги. Отрпавляйте СМС со своей сим карты, пока ваш сотовый оператор не заблокирует.
УдалитьСпасибо за гайд.
ОтветитьУдалитьОшибочка тут:
tavda*CLI> dongle cmd datacard0 AT+CMGD=1,4
Надо
tavda*CLI> dongle cmd dongle0 AT+CMGD=1,4
Может кто знает, как заблокировать опсосу определение модели устройства, т.е. USB-донгла?
ОтветитьУдалитьНасколько я знаю, никак.Модель устройства закодирована в IMEI который передается в сеть опсоса. Как вариант, менять IMEI девайса. Благо, в E1550 это элементарно делается. Но это незаконно ;)
УдалитьДа всё верно, но если улучшить его интерьер с помощью дизайн сайта psd, который будет оборонять вашу графическую информацию
ОтветитьУдалитьЗдравствуйте, есть цель звонить нашим благотворителям (у нас фонд по защити уличных животных) и проигрывать аудио файл где говорится о новых собаках в нашем приюте, а также принимать звонки и проигрывает тот же файл, я так наверное по своей наивности не нашел никакого решения бесплатного или вылеченного от жадности под виндовс, конечно можно подумать, нужно брать Астерикс или что-то в этом роде. Но я с линуксом не дружу, а настройка стоит от 3т.р, сейчас для меня это не подъемная сумма,нашёл в вылечинную от жадности oktell но я так и не понял как там через неё звонить, может быть есть какой-то интуитивно понятная программа. Возможно даже зарубежная. Которая бы дружила GSM шлюзом, или какая-нибудь сборка юникса но очень дружелюбное простая для новичка, Сильно не пинайте новичка.
ОтветитьУдалитьКто сможет помочь в настройке пишите в телегу @seogud ,ICQ: 665 055 198 , скайп nugnyi-nick
Единственный способ бороться с собственной жадностью - изучать самому.
Удалить