Yvision.kz
kk
Разное
Разное
399 773 постов42 подписчика
Всяко-разно
0
05:44, 15 августа 2016

Autoprovision — смена номера на телефонах Cisco SPA303 и Yealink T20, T21

Blog post image

Для чего нужно менять номер на телефоне? Да например пришел новый человек, и ему нужно завести на настольном телефоне быстро номер, вы берете и вводите комбинацию 555-<его вн. номер> на телефоне. После чего последует замена текущего номера на введенный. Очень удобно, неправда ли? Я не знаю как это сделать на Panasonic TDA100/200 или LG Aria SOHO/LDK и возможно ли это, но здесь, в очередной раз, Asterisk показывает свою гибкость и удобства.

 

Первым делом требуется настроить TFTP сервер.

Устанавливаем его:

# yum install tftp tftp-server
# yum install xinetd

Зададим права на директорию для файлов:

# chown -R nobody:nobody /var/lib/tftpboot

Отредактируем файл /etc/xinetd.d/tftp

service tftp
{
socket_type             = dgram
protocol                = udp
wait                    = yes
user                    = nobody
server                  = /usr/sbin/in.tftpd
server_args             = -s /var/lib/tftpboot
disable                 = no
per_source              = 11
cps                     = 100 2
flags                   = 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.222
features.dnd.on_code = *75
features.dnd.off_code = *76
features.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 необходимо разрешить доступ к настройкам:

Blog post image

На моделях Yealink SIP-T20 нету кнопки DND (не беспокоить), у нас нет второй линии, поэтому можно назначить на нее функцию DND:

Blog post image

Замеченные глюки:

- Почему-то у меня не проставляется поле Auto Provision  -> Server URL

Blog post image

- При первом запуске скрипта на телефоне выходит окошко "Разрешить перезагрузку"

 

Настраиваем 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

 

 

Ссылки:

Настройка сетевой загрузки с помощью DHCP NFS и TFTP

   
0
2722
2