モバイルオペレータのDEFコードからのアスタリスクのダイヤルパターンの自動生成

オフィスでは、携帯電話への発信通話にGSMゲートウェイを使用しています。 しかし、タスクは、ユーザーがどこにも電話をかけないように、外部ルートアスタリスクの番号の範囲を制限することでした。 つまり、地域の携帯電話ネットワークへの発信通信のみを許可します。



さらに、モバイルオペレーターのDEFコードのパブリックリストを使用して、アスタリスクへの発信呼び出しのダイヤルパターンのアップグレードを自動化する方法を読むことができます。



FreePBX 2.10.1.1ディストリビューションで実行されているAsterisk 1.8.6.0サーバーは自動化れました



そのため、まず最初に、分析可能なモバイルオペレーターのDEFコードのリストをどこかに取得する必要がありました。

Rossvyazサイトにはこの情報があり、定期的に更新されていることがわかりました。

したがって、 このリンクを使用すると、モバイルオペレーターのDEFコードの最新の更新されたリストをhtml形式で取得できます。



後でダイヤルパターンの更新をcrontabにプッシュしたいので、bashでこのhtml-kuを解析することにしました。

まあ、bashはワードプロセッシングに便利だと言っているわけではないので、Dial Patternsの主な翻訳機能はawkで書かれています。



そのため、あらゆる種類のgrepおよびsedコマンドを使用してhtml処理をロードした後、次の形式の区切り文字付きのcsvファイルを取得します。

913;0000000;0199999;200000; ;  913;0600000;0699999;100000; ;  913;2000000;2099999;100000; ;  913;3700000;3999999;300000; ; 
      
      





最初の列: DEFコード

2列目と3列目:強調表示された数値の範囲(開始と終了)

4列目:割り当てられた番号の総数

5列目:演算子

6列目:地域



その後のこの種のビューは、一般にawk言語を使用して行われた主なタスクであるダイヤルパターン形式に変換する必要がありました。 スクリプトの出力はリストでした:

 901458XXXX 901459XXXX 903049XXXX 903076XXXX 90390[0-6]XXXX 90393XXXXX 90399[7-9]XXXX 90509[4-5]XXXX
      
      





ダイヤルパターンを作成した後、FreePBXデータベースに読み込まれ、アプリケーションはcurlを介してFreePBXの構成に適用されます。 ( !!!注意!!テンプレートが適用されるルートのIDを知る必要があります。データベーステーブルに記録されるデータは純粋に個々のものです。したがって、必要なものに正確に注意してください)



スクリプト自体は、すべての操作データを実行し、サーバー上のスケジューラーに書き込むことができます。

 #!/bin/bash # DEF- DOWNFILE='http://www.rossvyaz.ru/docs/num/DEF-9x.html'; #  TMPDIR='./'; #,   csv   FILENAME='codes'; #    REGION=' '; #id outbound route  FreePBX mysql  ROUTE_ID=4 FREEPBX_LOGIN='admin' FREEPBX_PASS='pass' FREEPBX_ADRESS='192.168.1.15' #     csv wget -c -q -O - $DOWNFILE | grep "^<tr>" | sed -e 's/<\/td>//g' -e 's/<tr>//g' -e 's/<\/tr>//g' -e 's/[\t]//g' -e 's/^<td>//g' -e 's/<td>/;/g' | iconv -c -f WINDOWS-1251 -t UTF8 | grep "$REGION" > $TMPDIR/$FILENAME #     check=`cat $TMPDIR/$FILENAME` if [ "$check" == "" ]; then exit 0 fi #  awk  Dial Patterns awk_code=' #   function ret_diap(from,to) { if ((to-from)==0) return from; else if ((to-from)==9) return "X"; else return "["from"-"to"]"; } #  { DEF=$1; razm=1; delete out_str; for (i=1; i <= length($3);i++) { if ((substr($3,i,1)-substr($2,i,1))==0) { for (r=1; r <= razm;r++) { out_str[r]=out_str[r] substr($3,i,1); } } else { if ((substr($3,i,1)-substr($2,i,1))==9) { for (r=1; r <= razm;r++) { out_str[r]=out_str[r]"X"; } } else { if (substr($3,i,1)-substr($2,i,1)>=1 && substr($3,(i+1),1)-substr($2,(i+1),1)!=9) { count=1; init_str=out_str[1]; for (j=substr($2,(i),1); j < substr($3,(i),1);j++) { if (count==1) { out_str[count]=init_str j ret_diap(substr($2,(i+1),1),9); } else { out_str[count]=init_str ret_diap(j,(substr($3,(i),1)-1)) "X"; j=(substr($3,(i),1)-1); } count++; if (razm<count) razm=count; } out_str[count]=init_str j ret_diap(0,substr($3,(i+1),1)); i++; } else { for (r=1; r <= razm;r++) { out_str[r]=out_str[r]"["substr($2,i,1)"-"substr($3,i,1)"]"; } } } } } for (r in out_str) { print 8DEF out_str[r]; } }' #  awk,   - Dial Patterns cat codes | awk -F ';' "$awk_code" > patterns #   sql="DELETE FROM outbound_route_patterns WHERE route_id=$ROUTE_ID" echo $sql mysql -Dasterisk -e "$sql" #   sql="INSERT INTO outbound_route_patterns (route_id,match_pattern_pass,match_pattern_prefix) VALUES " n=1 for i in `cat patterns_mts` do if [ $n -eq 1 ]; then sql="$sql ($ROUTE_ID,'$i','')" else sql="$sql, ($ROUTE_ID,'$i','')" fi let n=n+1 done echo $sql mysql -Dasterisk -e "$sql" #  freepbx curl -c cookies -d 'username=$FREEPBX_LOGIN&password=$FREEPBX_PASS&submit=Login' http://$FREEPBX_ADRESS/admin/config.php > /dev/null #  curl -b cookies http://FREEPBX_ADRESS/admin/config.php?handler=reload > /dev/null
      
      





PS:スクリプトと関数は、理想的で汎用性があると主張していません。 ただし、必要に応じて、必要に応じて簡単にリメイクできます。



All Articles