Для чего нужно менять номер на телефоне? Да например пришел новый человек, и ему нужно завести на настольном телефоне быстро номер, вы берете и вводите комбинацию 555-<его вн. номер> на телефоне. После чего последует замена текущего номера на введенный. Очень удобно, неправда ли? Я не знаю как это сделать на Panasonic TDA100/200 или LG Aria SOHO/LDK и возможно ли это, но здесь, в очередной раз, Asterisk показывает свою гибкость и удобства.
Первым делом требуется настроить TFTP сервер.
Устанавливаем его:
Зададим права на директорию для файлов:
# chown -R nobody:nobody /var/lib/tftpboot
Отредактируем файл /etc/xinetd.d/tftp
service tftp{socket_type = dgramprotocol = udpwait = yesuser = nobodyserver = /usr/sbin/in.tftpdserver_args = -s /var/lib/tftpbootdisable = noper_source = 11cps = 100 2flags = IPv4}
# /etc/rc.d/init.d/xinetd restart
# systemctl restart xinetd
# systemctl status xinetd
Следующим шагом идет настройка DHCP сервера.
Устанавливаем его:
# yum install dhcp -y
И редактируем конфигурационный файл:
# vim /etc/dhcp/dhcpd.conf
authoritative;option option-66 code 66 = string;option option-150 code 150 = ip-address;subnet 192.168.0.0 netmask 255.255.255.0 {range 192.168.0.60 192.168.0.180;interface eth0;option routers 192.168.0.1;option subnet-mask 255.255.255.0;option domain-name-servers 8.8.8.8, 8.8.4.4.4;option tftp-server-name "tftp://192.168.0.222";option option-66 "192.168.0.222";option option-150 192.168.0.222;}
Адрес Asterisk и TFTP сервера одинаковый - 192.168.0.222
Для телефонов Cisco SPA303 создайте файле /var/lib/tftpboot/spa303.cfg со следующим содержимым:
<flat-profile><Upgrade_Enable>Yes</Upgrade_Enable><Resync_Periodic ua="na">3600</Resync_Periodic><Profile_Rule_B>/spa303_$MAC.cfg</Profile_Rule_B><Use_Auth_ID>No</Use_Auth_ID><Primary_NTP_Server ua="na">time.nist.gov</Primary_NTP_Server><Time_Zone ua="na">GMT+06:00</Time_Zone><Time_Format ua="na">24hr</Time_Format><Date_Format ua="na">day/month</Date_Format><Select_Logo ua="na">Text_Logo</Select_Logo><Select_Background_Picture ua="na">None</Select_Background_Picture><BMP_Picture_Download_URL ua="na"></BMP_Picture_Download_URL><Text_Logo ua="na">VashCompany</Text_Logo><Ringer_Volume group="User/Audio">2</Ringer_Volume><Cfwd_Setting group="User/Call_Forward">No</Cfwd_Setting><Station_Display_Name group="Phone/General">VashCompany</Station_Display_Name><Service_Annc_Serv group="Phone/Supplementary_Services">Yes</Service_Annc_Serv><Proxy_1_ group="Ext_1/Proxy_and_Registration">192.168.0.222</Proxy_1_><Use_Auth_ID_1_ group="Ext_1/Subscriber_Information">No</Use_Auth_ID_1_><!-- Software DND button --><DND_Act_Code group="Regional/Vertical_Service_Activation_Codes">*75</DND_Act_Code><DND_Deact_Code group="Regional/Vertical_Service_Activation_Codes">*76</DND_Deact_Code><Service_Annc_Base_Number group="Regional/Vertical_Service_Announcement_Codes">*7</Service_Annc_Base_Number><Service_Annc_Extension_Codes group="Regional/Vertical_Service_Announcement_Codes">DDT:5;DDF:6</Service_Annc_Extension_Codes><PSK_1 group="Phone/Programmable_Softkeys">fnc=sd;ext=*75;nme=DND;ext2=*76;nme2=-DND</PSK_1><PSK_2 group="Phone/Programmable_Softkeys">fnc=sd;ext=777;nme=AGNT;ext2=776;nme2=-AGNT</PSK_2><Idle_Key_List group="Phone/Programmable_Softkeys">em_login|1;acd_login|1;acd_logout|1;avail|3;unavail|3;redial|5;psk2|6;cfwd|7;psk1|8;lcr|9;pickup|10;gpickup|11;unpark|12;em_logout</Idle_Key_List><Programmable_Softkey_Enable group="Phone/Programmable_Softkeys">Yes</Programmable_Softkey_Enable></flat-profile>
Для телефонов Yealink скачайте файл с предварительными параметрами автоконфигурирования:
Внутри архива есть файл common.cfg, его надо переименовать в файл "y000000000007.cfg" для телефонов Yealink T20 и "y000000000034.cfg" для телефонов Yealnik T21-E2. Далее эти два файла, надо положить в каталог TFTP сервера, например - /var/lib/tftpboot/. После чего найти в этих файлах параметры отвечающие за сервер автонастроек (TFTP сервер), а также при необходимости включить другие функции, я добавил коды DND Asterisk:
auto_provision.server.url = 192.168.0.222features.dnd.on_code = *75features.dnd.off_code = *76features.dnd.allow = 1
После DHCP сервера потребуется создать скрипт который будет настраивать телефоны на новый номер.
Скрипты смены номера для телефонов Cisco SPA303 и Yealink T21-E2
И потом уже необходимо отредактировать настройки Asterisk.
Я покажу только самое главное - скрипты и настройку Asterisk.
Скрипт смены номера для телефона Cisco SPA303:
#!/bin/bash CALLERIP=$1 CHOSENNUM=$2 #Объявление переменных, полученных из AGI IP=`echo $CALLERIP | grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}"` #Вытащить IP адрес позвонившего пира и засунуть в переменную IP MAC=`arp -en | grep $IP | grep -E -o '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}'` #Вытащить MAC-адрес позвонившего пира и засунуть в переменную MAC PASSWD=`cat /etc/asterisk/sip.conf | grep -w $CHOSENNUM -B 1 -A 1 | grep secret | cut -c 8- | head -1` #Экспорт пароля в переменную passwd. Проверить вручную, откорректировать параметр -B -A, затем cut -c в зависимости от структуры sip.conf if [ -n "$PASSWD" ] # Если $PASSWD не пуст, значит выбран существующий экстеншн. then touch /var/lib/tftpboot/spa303_$MAC.cfg #Создать файл конфигурации cat /dev/null > /var/lib/tftpboot/spa303_$MAC.cfg #Очистить файл конфигурации перед заливкой нового cat >>/var/lib/tftpboot/spa303_$MAC.cfg <<end-of-text <flat-profile> <User_ID_1_>$CHOSENNUM</User_ID_1_> <Password_1_>$PASSWD</Password_1_> </flat-profile> end-of-text curl http://$IP/admin/reboot touch /var/log/confgen.log echo "$(date +%d-%m-%Y\ %H:%M:%S) User $CALLEDNUM успешно выбрал номер $CHOSENNUM" >> /var/log/confgen.log else touch /var/log/confgen.log echo "$(date +%d-%m-%Y\ %H:%M:%S) User $CALLEDNUM выбрал несуществующий номер $CHOSENNUM" >> /var/log/confgen.log fi
Входные параметы IP адрес и новый вн. номер.
Скрипт смены номера для телефона Yealink T21:
#!/bin/bash CALLERIP=$1 CHOSENNUM=$2 #Объявление переменных, полученных из AGI IP=`echo $CALLERIP | grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}"` echo "Выбран IP адрес - $IP" >> /var/log/debugast.log #Вытащить IP адрес позвонившего пира и засунуть в переменную IP #MAC=`arp -en | grep $IP | grep -E -o '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}'` MAC=`arp -en | grep $IP | grep -E -o '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}' | sed 's/://g'` echo "Выбран MAC адрес - $MAC" >> /var/log/debugast.log #Вытащить MAC-адрес позвонившего пира и засунуть в переменную MAC PASSWD=`cat /etc/asterisk/sip.conf | grep -w $CHOSENNUM -B 1 -A 1 | grep secret | cut -c 8-` #Экспорт пароля в переменную passwd. Проверить вручную, откорректировать параметр -B -A, затем cut -c в зависимости от структуры sip.conf if [ -n "$PASSWD" ] # Если $PASSWD не пуст, значит выбран существующий экстеншн. then touch /var/lib/tftpboot/$MAC.cfg #Создать файл конфигурации cat /dev/null > /var/lib/tftpboot/$MAC.cfg #Очистить файл конфигурации перед заливкой нового cat >>/var/lib/tftpboot/$MAC.cfg <<end-of-text #!version:1.0.0.1 account.1.enable = 1 account.1.auth_name = $CHOSENNUM account.1.user_name = $CHOSENNUM account.1.password = $PASSWD account.1.sip_server.1.address = 192.168.0.252 features.dnd.allow = 1 features.dnd.on_code = *75 features.dnd.off_code = *76 linekey.2.type = 5 end-of-text #curl http://$IP/admin/reboot # for Cisco SPA303 curl admin:admin@$IP/cgi-bin/ConfigManApp.com?key=Reboot # for Yealink touch /var/log/confgen.log echo "$(date +%d-%m-%Y\ %H:%M:%S) User $CALLEDNUM успешно выбрал номер $CHOSENNUM" >> /var/log/confgen.log else touch /var/log/confgen.log echo "$(date +%d-%m-%Y\ %H:%M:%S) User $CALLEDNUM выбрал несуществующий номер $CHOSENNUM" >> /var/log/confgen.log fi
На телефоне Yealink необходимо разрешить доступ к настройкам:
На моделях Yealink SIP-T20 нету кнопки DND (не беспокоить), у нас нет второй линии, поэтому можно назначить на нее функцию DND:
Замеченные глюки:
- Почему-то у меня не проставляется поле Auto Provision -> Server URL
- При первом запуске скрипта на телефоне выходит окошко "Разрешить перезагрузку"
Настраиваем Asterisk
Вызов двух скриптов нужно запихать в Asterisk'а, для этого отредактируем файл /etc/asterisk/extensions.conf, добавим туда контекст с вызовом скриптов по номерам 555-XXX для Cisco SPA303 и 556-XXX для телефона Yealink T21-E2
[register]
exten => _555XXX/_[12]XX,1,Answer()same => n,PauseQueueMember(,SIP/${CALLERID(num)});same => n,AGI(confgen.sh,${CHANNEL(uri)},${EXTEN:3})same => n,Hangup()exten => _556XXX/_[12]XX,1,Answer()same => n,PauseQueueMember(,SIP/${CALLERID(num)});same => n,AGI(confgen2.sh,${CHANNEL(uri)},${EXTEN:3})same => n,Hangup()
Если на телефоне Cisco SPA303 ввести 555-<трех значный вн. номер>, то произойдет смена текущего номера на введенный. Например был номер 100, мы ввели допустим 555200, в результате чего, произойдет смена номера с 100 на 200. Аналогичным образом делается смена номера на телефонах Yealink, только надо ввести 556-<вн. номер>.
Добавление контекста [register] в ваш основной контекст:
Теперь включите контекст туда куда вам удобней:
include register
Ссылки: