アスタリスク、偶数番号の電話番号による携帯電話会社の自動検出

アスタリスクには、データベースを操作するための独自のメカニズムがあります。アスタリスクダイヤルプランのデータベースを操作する別の方法について説明します。 データベースを操作するだけでなく、サーバー上の他のソフトウェアでも使用できます。 SHELL機能に関する記事。

SHELL に関するドキュメントには次のように書かれています。

SHELL(コマンド)

コマンドを実行し、その出力を返します


SYSTEMとは異なり、SHELLはコマンドの結果を返します。 また、func_odbc.confとは異なり、データベースへのクエリの結果を処理するすべてのロジックは、アスタリスクダイヤルプランから取り出すことができます。 シェルとバッシュの助けを借りて、山を転がすことができますが、このダイヤルプランはほとんど変更せずに残すことができます。 ちなみに、私はそれをAEL( AELに関する素晴らしい記事 )に書いています。



携帯電話番号への呼び出しを処理するコンテキスト
context outgoing_calls_mobile { _89XXXXXXXXX => { Noop( file_conf outgoing_calls.ael context outcoming_calls_mobile); Noop(  ${CALLERID(num)}   ${EXTEN}); Set(mobile_operator_info=${SHELL(/etc/asterisk/scripts/operatorIF.sh ${EXTEN:1} ${CALLERID(num)})}); //        ,    "error" if ("${mobile_operator_trunk_cid}" = "ERROR") { Gosub(error,s,1(${CALLERID(num)},${EXTEN})); }; //   CUT,       Set(mobile_operator_name=${CUT(mobile_operator_info,\,,1)}); Set(mobile_operator_id_region=${CUT(mobile_operator_info,\,,2)}); Set(mobile_operator_region=${CUT(mobile_operator_info,\,,3)}); Set(mobile_operator_region_id=${CUT(mobile_operator_info,\,,4)}); //     : // mobile_operator_name -   // mobile_operator_id_region - id  // mobile_operator_region -   // mobile_operator_region_id - id -   //         ,      // //      ,   ,   . Dial(SIP/${mobile_operator_name}/${EXTEN:1},60,); //    Gosub(test_dial,s,1(${DIALSTATUS},${exten})); Hangup(); }; };
      
      







発信者の内部番号をスクリプトに渡します。このように、この番号がデータベースに追加されます。

また、BASHスクリプト自体は、古いレコードを検索するようデータベースに要求し、データベースに新しいレコードを追加して、現在どのオペレーターが番号を持っているかをメガホンに尋ねます。



Megaphone APIの詳細を読む
スクリプトは、メガホンパブリックAPIへのリクエストを使用します

リクエストに応じて:

 http://www.megafon.ru/api/mfn/info?msisdn=79XXXXXXXXX
      
      





APIは次の形式の行を返します。

 {"operator":"","operator_id":99,"region":" .","region_id":56}
      
      







最後に、代替リクエストサービスを使用して行をコメントアウトします。これは、バックアップチャネルとして終了することができる人であれば誰でも使用できます。



ここではbashスクリプトです
 #!/bin/bash sql='mysql -uprovisioning -pxkYyNFuyc3nEKsFj -Dasterisk -e' #   ,          lifetime=30 #   ,         #     ,    30 ,       . array_operator_old=($($sql "SELECT operator,operator_id,region,region_id FROM operators WHERE to_phon_nomber like '$1' \ and data >DATE_ADD(NOW(), INTERVAL -$lifetime DAY) limit 1"| awk 'NR>1')) #       ,   ,       . if [ -n "${array_operator_old[1]}" ] then operator_old=${array_operator_old[0]} operator_id_old=${array_operator_old[1]} region_old=${array_operator_old[2]} region_id_old=${array_operator_old[3]} echo -n $operator_old,$operator_id_old,$region_old,$region_id_old exit 0 fi #      ,     : array_operator=($(curl -s http://www.megafon.ru/api/mfn/info?msisdn=$1|tr -d '"{}'|tr -s ' ' '_'|tr -s ',' '\t')) #   ,   ,   ERROR     test_error=$(echo -n ${array_operator[@]}|grep error) if [ -n "$(echo -n ${array_operator[@]}|grep error)" ]; then echo -n ERROR; exit 0; fi #   ,     /    #       . operator=$(echo -n ${array_operator[0]} | tr -d 'operator:'|tr -d '\,') operator_id=$(echo -n ${array_operator[1]} | tr -d 'operator_id:') region=$(echo -n ${array_operator[2]} | tr -d 'region:') region_id=$(echo -n ${array_operator[3]} | tr -d 'region_id:') $sql "REPLACE INTO operators\ (id, data, to_phon_nomber, operator, operator_id, region, region_id, in_phon_nomber)\ VALUES\ (NULL,\ NULL,\ '$1',\ '$operator',\ '$operator_id',\ '$region_old',\ '$region_id',\ '$2')" #operator=$(curl -s https://phonenum.info/phone/$1|grep \:|head -n1| sed 's/\:\ //'|tr -s "[:space:]" "_"|sed -r 's/\..*//') echo -n $operator,$operator_id,$region,$region_id exit 0
      
      







ダンプベースの「演算子」。



ありがとうございます)



All Articles