アスタリスク:発信者IDと地域コードによるルーティング

以下の情報は、おそらくアスタリスクを使用して番号8〜800を取得し、ロシア連邦のいくつかの都市にあるオフィスに加入者がいる人にとって興味深いものです。



アスタリスク電話技師の古典的な問題に対する私の解決策:ビジネスはウラジオストクのオフィスに極東からの電話、ウラルとシベリアへの電話、ノボシビルスクの事務所への電話、残りはすべてモスクワの事務所に応答することを望んでいます。



前の記事でHabréに提示されたオプションを使用できますが、私はソリューションをもう少し普遍的にすることにしました。 実装とビデオ命令の詳細。





解決策は次のとおりです。アスタリスクのダイヤルプランを超える電話番号で地域を決定する作業を行います。 つまり AGIサーバー側の呼び出し元の番号によって地域コードを決定するロジックを実装します。 アスタリスクは、AGIサーバーがどのように機能するか、データを取得する場所、書き込まれる言語を認識しませんが、要求の結果として地域コードを受信し、ダイヤルプランコールの処理を続行します。



作業スキーム







AGIサーバーはどのように実装されていますか?



AGIサーバー-この例では、これはnodejsアプリケーションであり、番号付きのリクエストを受信すると、MongoDBに接続して一致を見つけ、REGION_CODEダイヤルプラン変数の必要な値を設定します。



ダイヤルプランとは何ですか?



AGIサーバーを使用するためのダイヤルプランは次のようなものです。



[incoming] exten => 88001234567,1,AGI(agi://localhost:3000,${CALLERID(num)}) exten => 88001234567,n,GotoIf($[${REGION_CODE}=24]?outbound,krasnoyarsk,1:) exten => 88001234567,n,GotoIf($[${REGION_CODE}=50]?outbound,moscow,1:outbound,other,1)
      
      







各地域について、確認を示す必要がありますか?



ロシア連邦の各地域に事務所がある場合(および85の事務所がある場合)、各コードの検証を設定する価値があります。 しかし、通常、ロシア連邦の詳細度の低い区分が必要であるため、COUNTY_CODE変数も設定されます-連邦地区の番号(そして、そのうち9つしかありません)。



つまり ダイヤルプランは次のようになります。



 [incoming] exten => 88001234567,1,AGI(agi://localhost:3000,${CALLERID(num)}) exten => 88001234567,n,GotoIf($[${COUNTY_CODE}=5]?outbound,krasnoyarsk,1:) exten => 88001234567,n,GotoIf($[${COUNTY_CODE}=1]?outbound,moscow,1:outbound,other,1)
      
      







または、もちろん、複合モードで。 設定された変数COUNTY_CODEおよびREGION_CODEに基づいて、誰もがダイヤルプランを構築するロジックを決定できます。



これをユーザーインターフェイスにどのように実装できますか?



たとえば、ユーザーインターフェースでは、発信者番号のルーティング設定は次のようになります







コードと名前を含むデータは、npm ロシア語コードで取得し、ドロップダウンメニューで使用できます。



また、MongoDBのデータはAGIサーバーのどこから来たのですか?



データは通常、連邦通信庁のウェブサイトの「 オープンデータ 」セクションにあります。 ダウンロードしてJSONに変換するとき、すでにHabréに書いています 。 しかし、現在のnumcapデータ形式では、リージョンはコードではなく、リージョンの名前を含む文字列で示されます。これはあまり便利ではありません。



そのため、npm numcap-regions (npmのnumcaprussian-codesを使用 )を使用すると、地域コードの表示とともにRFオペレーターの容量を備えた大きなJSONファイルを取得できます。



地域コードのデータでデータベースを更新する必要はありますか?



一度ダウンロードして、そのように使用できます。 ただし、指定されたnpmのユーティリティを使用して、定期的にデータを更新できます。



連邦通信庁は定期的に番号付けレジストリを変更しているため、常に最新のデータベースを簡単に作成できます。 もちろん、電話番号が地域を劇的に変更することはほとんどありませんが(オペレーターにとっては、追加のデータ処理を実行する必要があります)。 numcapデータは月に1回程度更新します。



それで、地域番号とコードが機能するようにルーティングを取得するにはどうすればよいですか?



1. agi-number-archer-appをインストールします(インストールの詳細はagi-number-archer-appリポジトリで説明されています。複製、構成の作成、展開スクリプトを作成できます)。



2.データをMongoDBにアップロードします( numcap-regionsを使用してデータをアップロードします。使用方法はリポジトリにも記載されています)。



これが誰かにとって有用であり、顧客にとってより便利で高品質なサービスを実装できるようになることを願っています。



質問、提案、批判を歓迎します。



ステップバイステップのサービス設定を備えたPSビデオ。




All Articles