Настойка связки FreeBSD 8.2+Asterisk 1.8.5+модем Huawei E150
Речь пойдёт о связке 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. По большей части всё описанное выше справедливо и для старых версий. Однако рекомендую при установке пользоваться свежими версиями.
Обратите внимание, что заметки могут обновляться со временем. Это может быть как исправление найденных ошибок, так и доработка содержания с целью более полного раскрытия темы. Информация об изменениях доступна в репозитории на github. Там же вы можете оставить в Issue ваши замечания по данной заметке.
Если данная заметка оказалась вам полезной, можете поблагодарить автора финансово.