そのため、あるビジネスセンターから別のビジネスセンターに、アナログ電話を使用して70人を短時間で輸送する必要が生じました。 新しいオフィスでは、所有者がPBXにアナログポートを持たず、古いPBXは電話会社に属していたため、状況は悪化しました。 すべてのアナログ都市回線をアスタリスクに転送して、IPテレフォニーを迅速に実装する必要がありました。 機器の配送は移転の前日に予定されていたため、電話を導入する時間はほとんどありませんでした。
カットの下でそれが来たもの。
多くの資料があるので、心配しないでください。
したがって、既存の構成:
- コンピューターを使用する60人のユーザー。
- 60台のCisco SPA 502G電話
- 4つのCisco SPA500Sパネル
- 5つのシーメンスC610Aベースとそれぞれのチューブのペア。
- FreeBSD上の1つのサーバー。
- スイッチのペアCisco SF300-24P
ネットワーク上の自動プロビジョニングに関連する多くのドキュメントを検索して読んだ後、私たちはアスタリスク機能を利用して、独自に自動デバイス構成を実行することにしました。 すべてうまくいきますが、判明したように、アスタリスクのsqlデータベースを介した自動調整では、doppanelの拡張機能のステータスを監視できません。 つまり ヒントを構成できません(少なくとも2012年8月ではサポートされていませんでした)。 一対の電話を利用できるため、自動プロビジョニングを作成することにしました。
サーバーとスイッチのセットアップから始めました。 204と214の番号を持つ2つのVLANを作成しました。1つ目はLAN用、2つ目はIPテレフォニー用です。 なぜなら 電話には構成可能なスイッチが組み込まれていますが、これは私たちの観点からは最適なソリューションでした。
ユーザーがトランクに接続するスイッチのポートを設定し、ネイティブVLANを変更します。
interface fastethernet1 switchport trunk allowed vlan add 204 switchport trunk native vlan 214 exit
サーバーをトランクポートのスイッチに接続し、
dhcpd.confの設定を変更しました
素晴らしい。 アドレスが聞こえ、電話が起動しました。それでは、基本構成をガッシュします。
thttpdを上げて、
XMLDefault.cnf.xmlのルートに
配置します <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <flat-profile xmlns="http://www.sipura.net/xsd/SPA50x-30x-SIP" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sipura.net/xsd/SPA50x-30x-SIP http://www.sipura.net/xsd/SPA50x-30x-SIP/SPA50x-30x-SIP-7-5-2.xsd"> <Admin_Passwd ua="na">7654321</Admin_Passwd> <SPCP_Auto-detect ua="na">No</SPCP_Auto-detect> <Domain ua="rw">phones.mydomain.local</Domain> <Primary_DNS ua="rw">172.16.214.1</Primary_DNS> <Syslog_Server ua="na">172.16.214.1</Syslog_Server> <Debug_Server ua="na">172.16.214.1</Debug_Server> <Debug_Level ua="na">0</Debug_Level> <Primary_NTP_Server ua="na">172.16.214.1</Primary_NTP_Server> <Enable_VLAN ua="rw">Yes</Enable_VLAN> <Enable_PC_Port_VLAN_Tagging ua="na">Yes</Enable_PC_Port_VLAN_Tagging> <Enable_CDP ua="na">No</Enable_CDP> <Enable_LLDP-MED ua="na">No</Enable_LLDP-MED> <PC_Port_VLAN_ID ua="na">204</PC_Port_VLAN_ID> <Profile_Rule ua="na">http://172.16.214.1/XMLDefault.cnf.xml</Profile_Rule> <Profile_Rule_B ua="na">http://172.16.214.1/cfg/cfg.cgi?SN=$SN&MAC=$MA</Profile_Rule_B> <Key_System_Auto_Discovery ua="na">No</Key_System_Auto_Discovery> <G722_Enable_1_ ua="na">Yes</G722_Enable_1_> <L16_Enable_1_ ua="na">No</L16_Enable_1_> <G726-16_Enable_1_ ua="na">No</G726-16_Enable_1_> <G726-24_Enable_1_ ua="na">No</G726-24_Enable_1_> <G726-32_Enable_1_ ua="na">No</G726-32_Enable_1_> <G726-40_Enable_1_ ua="na">No</G726-40_Enable_1_> <Enable_IP_Dialing_1_ ua="na">No</Enable_IP_Dialing_1_> <Use_Remote_Pref_Codec_1_ ua="na">Yes</Use_Remote_Pref_Codec_1_> <Time_Format ua="rw">24hr</Time_Format> <Date_Format ua="rw">day/month</Date_Format> <Text_Logo ua="na">Company</Text_Logo> <Time_Zone ua="na">GMT+04:00</Time_Zone> <Upgrade_Rule ua="na">( $SWVER ne 7.5.2b )? http://172.16.214.1/sw/spa50x-30x-7-5-2b.bin</Upgrade_Rule> </flat-profile>
したがって、電話はdhcpから自動構成パラメーターを取得し、サーバーから基本構成を取得した後、デバイスのシリアル番号とそのポピーアドレスにバインドされている構成ファイルの後に2回目の反復を実行します。 構成の初期化が完了すると、電話機はコンピューターポートを204 VLANに転送し、ローカルネットワークで機能するようにします。
電話機が設定ファイルを取得する方法に移りましょう。
設定
/usr/local/etc/astprov.confで補助ファイルを作成します
sqlite="/usr/local/bin/sqlite3" ast_provisiondb="/var/db/asterisk/asterisk_provision.sqlite3" ast_ext_dialplan="/var/db/asterisk/asterisk_ext_dialplan.conf" ast_ext_accounts="/var/db/asterisk/asterisk_ext_accounts.conf" logger_tag="astprov" include="/etc/rc.conf"
構成ファイルで指定されたsqlite3データベースを使用して、次の構造を作成します。
PRAGMA foreign_keys=OFF; BEGIN TRANSACTION; CREATE TABLE `provision` ( `macaddress` varchar(12) NOT NULL, `serial` varchar(12) NOT NULL, `secret` varchar(32) NOT NULL, `ext` int(11) NOT NULL, `fullname` varchar(64) NOT NULL, `callerid` varchar(64) NOT NULL, `callgroup` varchar(32) NOT NULL default '1', `pickupgroup` varchar(32) NOT NULL default '1', `context` varchar(32) NOT NULL, `subscribecontext` varchar(32) NOT NULL default '1', `ip` varchar(15) NOT NULL); COMMIT;
その後の職場の迅速なセットアップのために、電話でファイルを作成します
3027|Buhgalter 3097|Igor 3018|Sergey 3016|Oleg 3091|Vladimir 3014|Ekaterina 3012|Andrey 3015|Maxim
パラメータとしてスクリプトに送ります
スクリプトは自動的にデータベースに入力し、新しい電話をすばやく接続する機能を提供します。
今少し魔術。
アスタリスクはアスタリスクで実行されます。アスタリスク、thttpdはwww:wwwで実行されます。 したがって、アスタリスクとwwwを追加するastprovグループを作成します。
次に、電話の設定をカスタマイズする必要があります。
スクリプト
/usr/local/www/data/cfg/cfg.cgiを作成します
。perlが大好きなので、pearlのコンフィギュレーターです。
スクリプトは、デバイスのMACリクエストとそのシリアル番号から受信します。リンクがデータベース内にある場合、電話には、サーバーに接続するためのログイン/パスワードとパラメーターの設定が与えられます。 接続がない場合、電話はデータベースに追加され、「サービス番号」、この場合は1000〜2000が割り当てられ、電話には設定が与えられます。
追加の<MAC> .xmlという名前のファイルを「
cfg 」フォルダーに入れると、このファイルは構成によって電話機に追加されます。 この機能を使用して、パネル設定を携帯電話にダウンロードします。 例:
<Attendant_Console_Call_Pickup_Code ua="na">*8</Attendant_Console_Call_Pickup_Code> <Unit_1_Key_1 ua="na">fnc=sd+cp+blf;sub=2010@172.16.213.1;nme=2010</Unit_1_Key_1> <Unit_1_Key_2 ua="na">fnc=sd+cp+blf;sub=2012@172.16.213.1;nme=2012</Unit_1_Key_2> <Unit_1_Key_3 ua="na">fnc=sd+cp+blf;sub=2014@172.16.213.1;nme=2014</Unit_1_Key_3> <Unit_1_Key_4 ua="na">fnc=sd+cp+blf;sub=2100@172.16.213.1;nme=2100</Unit_1_Key_4> <Unit_1_Key_5 ua="na">fnc=sd+cp+blf;sub=2110@172.16.213.1;nme=2110</Unit_1_Key_5> <Unit_1_Key_6 ua="na">fnc=sd+cp+blf;sub=2111@172.16.213.1;nme=2111</Unit_1_Key_6> <Unit_1_Key_7 ua="na">fnc=sd+cp+blf;sub=2112@172.16.213.1;nme=2112</Unit_1_Key_7> <Unit_1_Key_8 ua="na">fnc=sd+cp+blf;sub=2120@172.16.213.1;nme=2120</Unit_1_Key_8> <Unit_1_Key_9 ua="na">fnc=sd+cp+blf;sub=2121@172.16.213.1;nme=2121</Unit_1_Key_9>
または、別のVLANに転送するためにポート設定を変更するには
<Enable_VLAN ua="rw">Yes</Enable_VLAN> <Enable_PC_Port_VLAN_Tagging ua="na">Yes</Enable_PC_Port_VLAN_Tagging> <Enable_CDP ua="na">No</Enable_CDP> <Enable_LLDP-MED ua="na">No</Enable_LLDP-MED> <PC_Port_VLAN_ID ua="na">300</PC_Port_VLAN_ID>
電話が正しくロードされているかどうか、および設定が正しく与えられているかどうかを確認します。
これを手動で行うには、thttpd.logを見て、リクエストをブラウザにコピーします。
すべてが順調であれば、最も興味深い部分、つまり自動化とアスタリスクの設定に進みます。 誰もが彼にとって便利なものについて書いていますが、コンソールを介してsqlite3を操作する機会があるので、シェル上に鉄筋コンクリートスクリプトを書くことにしました。 一見怖いですが、最終的には非常にコンパクトになりました。 主な部分は、アスタリスクと対話するためのエラー処理で占められています。 アスタリスクから対話型制御モードで実行されたすべてのアクションは、システムログに記録されます。 ほとんどすべてのスクリプトでは、内部エラーが発生すると停止モードが有効になります。 以下のスクリプト名にパスがない場合は、
/ usr / local / etc / asterisk / scripts /にあります。
extensions.conf構成で、追加します
#include "/var/db/asterisk/asterisk_ext_dialplan.conf"sip.conf構成で、追加します
#include "/var/db/asterisk/asterisk_ext_accounts.conf"アスタリスクから直接コマンドを実行するには、スクリプトのグループを作成します。
/usr/local/etc/astprov.subr-データベースを操作するためのすべての手順を含むメインスクリプト。
診断用の
showall.shダンプベース
rebuildlist.shアスタリスクの動的構成更新スクリプト。
電話番号を別の電話番号に置き換える
changenumber.shスクリプト。
電話を交換するための
togglenumbers.shスクリプト。 内線1023を2035年から交換する必要があるとしましょう。従業員を移植する場合は非常に便利です。 電話はそのままで、数字は場所を変えます。
スクリプトが投稿されます。 原則として、スクリプトとハンドを使用できます
su -mアスタリスクですが、最良のオプションはこの「機能」をアスタリスクに統合することです。
なぜなら すべての新しい未登録の電話機がゲストコンテキスト「[unreg]」に分類される場合、アスタリスクでこのコンテキストの説明を作成する必要があります。
;goto service menu exten => 3999,1,Goto(unreg,_X.,1) [unreg] exten => _X.,1,Answer() ;same => n,Authenticate(040478) same => n,NoOp(Entering Service Menu) same => n,Playback(ivr/prov-welcome-to-service-menu) same => n(menu),Background(ivr/change-number&ivr/swap-numbers&ivr/rebuild-list&ivr/reboot-phone&ivr/reload-server) same => n,Read(CHOICE,,1,,1,10) ; 1 - Change Number ; 2 - Swap Numbers ; 3 - Rebuild extensions list ; 4 - Reload phone ; 5 - Reload server ; Rename Number exten => 1,1,Read(RENAMETO,ivr/enter-dest-number,4,,1,5) same => n,GotoIf($["${RENAMETO}" = ""]?menu) same => n,Playback(ivr/entered-number) same => n,SayDigits(${RENAMETO}) same => n,Read(APPROVE,ivr/press-1-for-accept,1,,1,5) same => n,GotoIf($["${APPROVE}" != "1"]?menu) same => n,Set(CHGNM=${SHELL(/usr/local/etc/asterisk/scripts/changenumber.sh ${CALLERID(num)} ${RENAMETO})}) same => n,NoOp(${CHGNM}) same => n,GotoIf($["${CHGNM}" = "GETERR"]?geterr) same => n,GotoIf($["${CHGNM}" = "SETERR"]?seterr) same => n,GotoIf($["${CHGNM}" = "NUMEXIST"]?numexist) same => n,GotoIf($["${CHGNM}" = "OK"]?ok) same => n(ok),Playback(ivr/prov-saved&privacy-thankyou) same => n,System(/usr/local/etc/asterisk/scripts/rebuildlist.sh) same => n,GotoIF($["${SYSTEMSTATUS}" != "SUCCESS"]?error) same => n,Playback(ivr/rebuild-ok) same => n,System(/usr/local/sbin/asterisk -rx "sip notify cisco-check-cfg ${CALLERID(num)}") same => n,GotoIF($["${SYSTEMSTATUS}" != "SUCCESS"]?error) same => n,Playback(ivr/send-phone-reboot-ok) same => n,System(/usr/local/sbin/asterisk -rx "reload") same => n,GotoIF($["${SYSTEMSTATUS}" != "SUCCESS"]?error) same => n,Playback(ivr/server-reload-ok) same => n,Hangup() same => n(geterr),Playback(ivr/script-get-error) same => n,Hangup() same => n(seterr),Playback(ivr/script-set-error) same => n,Hangup() same => n(numexist),Playback(ivr/prov-exist) same => n,Hangup() same => n(menu),Goto(_X.,menu) same => n,Hangup() same => n(error),Playback(ivr/script-error) same => n,Hangup() ; Reverse numbers exten => 2,1,Read(SWAPTO,ivr/enter-dest-number,4,,1,5) same => n,GotoIf($["${SWAPTO}" = ""]?menu) same => n,Playback(ivr/entered-number) same => n,SayDigits(${SWAPTO}) same => n,Read(APPROVE,ivr/press-1-for-accept,1,,1,5) same => n,GotoIf($["${APPROVE}" != "1"]?menu) same => n,Set(CHGNM=${SHELL(/usr/local/etc/asterisk/scripts/togglenumbers.sh ${CALLERID(num)} ${SWAPTO})}) same => n,NoOp(${CHGNM}) same => n,GotoIf($["${CHGNM}" = "GETERR"]?geterr) same => n,GotoIf($["${CHGNM}" = "SETERR"]?seterr) same => n,GotoIf($["${CHGNM}" = "OK"]?ok) same => n(ok),Playback(ivr/prov-saved&privacy-thankyou) same => n,System(/usr/local/etc/asterisk/scripts/rebuildlist.sh) same => n,GotoIF($["${SYSTEMSTATUS}" != "SUCCESS"]?error) same => n,Playback(ivr/rebuild-ok) same => n,System(/usr/local/sbin/asterisk -rx "sip notify cisco-check-cfg ${CALLERID(num)} ${SWAPTO}") same => n,GotoIF($["${SYSTEMSTATUS}" != "SUCCESS"]?error) same => n,Playback(ivr/send-phone-reboot-ok) same => n,System(/usr/local/sbin/asterisk -rx "reload") same => n,GotoIF($["${SYSTEMSTATUS}" != "SUCCESS"]?error) same => n,Playback(ivr/server-reload-ok) same => n,Hangup() same => n(geterr),Playback(ivr/script-get-error) same => n,Hangup() same => n(seterr),Playback(ivr/script-set-error) same => n,Hangup() same => n(error),Playback(ivr/script-error) same => n,Hangup() same => n(menu),Goto(_X.,menu) same => n,Hangup() exten => 3,1,System(/usr/local/etc/asterisk/scripts/rebuildlist.sh) same => n,NoOp(${SYSTEMSTATUS}) same => n,GotoIF($["${SYSTEMSTATUS}" != "SUCCESS"]?error) same => n,Playback(ivr/rebuild-ok) same => n,System(/usr/local/sbin/asterisk -rx "reload") same => n,GotoIF($["${SYSTEMSTATUS}" != "SUCCESS"]?error) same => n,Playback(ivr/server-reload-ok) same => n,Goto(_X.,menu) same => n(error),Playback(ivr/script-error) same => n,Goto(_X.,menu) exten => 4,1,System(/usr/local/sbin/asterisk -rx "sip notify cisco-check-cfg ${CALLERID(num)}") same => n,GotoIF($["${SYSTEMSTATUS}" != "SUCCESS"]?error) same => n,Playback(ivr/send-phone-reboot-ok) same => n,System(/usr/local/sbin/asterisk -rx "reload") same => n,GotoIF($["${SYSTEMSTATUS}" != "SUCCESS"]?error) same => n,Playback(ivr/server-reload-ok) same => n,Hangup() same => n(error),Playback(ivr/script-error) same => n,Goto(_X.,menu) same => n,Hangup() exten => 5,1,System(/usr/local/sbin/asterisk -rx "reload") same => n,GotoIF($["${SYSTEMSTATUS}" != "SUCCESS"]?error) same => n,Playback(ivr/server-reload-ok) same => n,Goto(_X.,menu) same => n(error),Playback(ivr/script-error) same => n,Goto(_X.,menu) same => n,Hangup()
実際、この文字と数字のセットを作るのは何ですか。
1.番号の変更。
既存の登録作業番号を別のものに変更できます。 変更する電話番号が要求されます。 番号を変更すると、動的構成リストが再作成され、サーバーでリロードが行われ、電話機が自動的に再起動します。
2.電話を交換する
通話は、別の電話で変更したい電話から行われます。 データベース内の電話を交換すると、構成スクリプトによって指定された情報が変更されます。 ログイン電話のパスワードは変更されず、発信者と内線の情報のみが変更されます。
番号を変更した後、動的構成リストが再作成され、サーバーでリロードが行われ、電話機が自動的に再起動します。
3.電話リストを再作成します。
動的構成ファイルが再作成されます。 自動設定の多くの未登録の電話機が立ち上がってメンテナンスの順番を待っているが、サーバーに登録できない場合に使用すると便利です。 実行時に、動的構成のリストが再作成され、サーバーでリロードが実行されます。
4.デバイスの再起動
呼び出し元のデバイスを再起動します。 サーバーで自動的にリロードします。
5.サーバーの構成を更新します。
サーバーで自動的にリロードします。
それだけです。 サーバーへのスクリプトの正しい転送により、テレフォニーを上げることは簡単なタスクになります。 最初は、ダイヤルプランを作成してデータベースに追加するだけです。 それ以降のアクションは、アスタリスクの管理に精通していない人でも完全に透過的で理解しやすいものです。 質問があります-書き込み。 このスキームは、他の好きなデータベースに非常に移植性があります。
Aborche 2013