18 июня 2015

Asterisk phonebook provisioning

Скрипт на баше, формирующий справочник из телефонных номеров заведенных на астериске. Полученный файл XML готов для загрузи на телефоны Polycom.
Формат выходного файла, в принципе, очень легко правиться под любого вендора.


В скрипте есть одно проблемное местно. В цикле для каждого номера дважды запускается asterisk -rx "sip show peer $line".
Я не придумал как проверить и вынуть данные за 1 итеррацию. Можно, например, вовсе отказать от проверки !=  "". Если знаешь как, пиши в комментариях.



#!/bin/sh
asterisk -rx 'sip show peers' |egrep 'OK|UNKNOWN|UNREACHABLE' |grep -v '[:alpha:]'|grep -v '^[169]'|grep -v '{5,9}' |awk '{print $1}'|awk -F'/' '{print $1}' > /tmp/extensions.txt
echo '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' > /tftpboot/000000000000-directory.xml
echo '<!-- $RCSfile$  $Revision: 35928 $ -->' >> /tftpboot/000000000000-directory.xml
echo '<directory>' >> /tftpboot/000000000000-directory.xml
echo '        <item_list>' >> /tftpboot/000000000000-directory.xml
cat /tmp/extensions.txt | while read line
do
    RES=$(asterisk -rx "sip show peer $line" |grep Callerid |grep -v 'FIX' |grep -v 'Test');
    if [ "$RES" !=  "" ]; then
        asterisk -rx "sip show peer $line" |grep Callerid | awk -F': "' '{print $2}' | awk -F'" <' '{print "\t\t<item>\n\t\t\t<ln>"$1"</ln>\n\t\t\t<ct>"$2"</ct>\n\t\t</item>"}' >> /tftpboot/000000000000-directory.xml
    fi
done
echo '        </item_list>' >> /tftpboot/000000000000-directory.xml
echo '</directory>' >> /tftpboot/000000000000-directory.xml