VoIPテレフォニー。 アスタリスク すべてに対する非標準的なアプローチ。 パート2

VoIPサービスプロバイダーのエンジンの変更に関する話を続けます。







最初の部分では、初期データベース構造について説明し、通話の状態を監視しながら、通話にサービスを提供するためにアスタリスクを設定しました。 このパートでは、関税、LCR、請求、ジオロケーションなどについて説明します。







課金



地理的な場所に応じて、さまざまな通信事業者が同じ場所への通話にまったく異なるコストをかけることは誰にとっても秘密ではありません。 特定の方向に格安通話を発信するには、目的の地域で最低価格のオペレーターを選択する必要があります。 通信事業者がサービスを提供する地域によって、通話料金はかなり異なります。 この違いは、オペレーターが会話に費やした時間をどのように考慮するかです。 ほとんどのロシアの通信事業者は1分あたりの通話料金を請求しますが、VoIP事業者の大多数は他の方法を使用して通話料金を決定しています。 プレミアムサービスについては個別の議論が必要ですが、それについては後で詳しく説明します。







運送業者の料金プランからの抜粋は次のとおりです。







"Minimal Duration- 1 second" "Billing increment- 1 second" "USA -6/6" "Mexico 60/60" "Gambia 60/1" "Tonga All (Prefix 676) - 60/60" "Vanuatu All (Prefix 678)- 60/60 " "Samoa (Prefix 685) - 60/60" "Papua New Guinea (Prefix 675)- 60/60 " "Nauru All (Prefix 674)- 60/60 "
      
      





ご覧のとおり、最小通話時間は1秒で、通話コストは費やした秒数(1/1)から計算され、アメリカ合衆国への通話は6秒のステップ(6/6)で請求され、メキシコへの通話は60ステップで請求されます秒、つまり 1分あたり(60/60)。 フォーミュラ60/1を使用することもできます。これは、1秒あたりの通話評価を意味しますが、通話の最初の1分は全額支払われます。 たとえば、1分間の会話に0.37USDがかかり、28秒間話した場合、通話のコストは0.37USDになり、76秒間に通話した場合、通話のコストは(0.37 / 60)* 76USDになります。







固定、モバイル、またはVoIP接続のオペレーターは、通話に対して1秒ごとに課金される地域で1分ごとの請求を提供し、この違いから生計を立てています。 マージンは確かに小さいですが、エンドユーザーの関税の引き上げとあいまって、「20歳の女性-ルーブル」というジョークのようになります。 また、1秒あたりの課金をエンドユーザーに販売できる事業者はほとんどいません。







オペレーターの関税ネットは、コールのプレフィックスアドレス指定に基づいています。 プレフィックスは通常、国際標準の電話の最初の数桁です。 つまり、特定のオペレーターごとに、特定の方向の呼び出しが大幅に異なる場合があります。 これは、被呼加入者にコールを配信する方法と、ナンバリング容量にローカルテレコムオペレータ、いわゆる「プレミアム」または「特別」サービスが導入されたために発生します。 「プレミアム」サービスは、通常、参照(購入先、アクセス方法など)、またはエンターテイメントサービス(ホロスコープ、ソファの上の店、テレフォンセックスなど)と呼ばれ、有料でアクセスが増加します。 。 通信事業者がシステムからの発信コールを制御しない場合、またはパートナーの関税プランをタイムリーに更新しない場合、クライアントの個人アカウントを監視せずに「プレミアム」サービスへのコールを誤って許可したため、巨額の債務が発生します。







これは実生活でどのように起こりますか?







オペレーターの「エンジン」を作り直すと、古い「エンジン」が通話の方向を追跡せず、3600秒の通話時間制限で「実際に」クライアントに請求するという事実に直面しました。 つまり クライアントはプレミアムサービスの電話に電話して、1時間セッションを切断できました。 通話料金は1分あたり5ドルで、オペレーターは1時間あたり300ドルになりました。 また、同時コールの数が制限されていなかったため、損失が大きくなる可能性がありました。 市場に参入するだけの通信事業者が新しい顧客を引き付けようとしているという事実により、彼らは特定の仮想量で「テスト」アクセスを新しいユーザーに与えます。 ユーザーは必要な場所に電話をかけ、接続の品質を評価し、問題がなければ、この通信事業者で「個人用」ウォレットを補充し始めます。 このタイプのアクセスは、「プレミアム」サービスの所有者と共謀している詐欺師によって使用されます。 Froderは、オペレーターの格付けシステムのギャップを利用して、有料サービスを何度か呼び出し、オペレーターを金銭にさらします。 同時に、詐欺師から有料サービスへの通話のコストは事実上ゼロであり、利益は膨大な額に達する可能性があります。 通信事業者は、午前中に、または自分の口座でお金が枯渇したという通知を受け取った後に、問題を検出します。 一連のオペレーターを経由して「プレミアム」サービスに到達した完璧な電話に挑戦することはほとんど不可能です。 セッションの支払いは、オペレーターのチェーン全体に沿って行われます。







「プレミアム」サービスの例と、それらが関税グリッドでどのように見えるかを見てみましょう。







プレフィックス プライスラブ tarif_name
37122 1.001 LATVIA Mobile VOICETRADEC
371227 0.8439 LATVIAその他4、ラトビアVAS IPRS VOICETRADEC
3712270 34,321 ラトビアラトビア-モバイル、ラトビアプレミアム、ラトビアVAS IPRS VOICETRADEC
3712272 1.001 ラトビアラトビアNGN、ラトビアモバイルバイト、ラトビアVAS IPRS VOICETRADEC
3712274 32,812 ラトビアラトビアNGN、ラトビアVAS IPRS VOICETRADEC
3712277 1,0226 ラトビアモバイル-マスター、ラトビアモバイルマスターテレコム、LATVIAラジオコムモバイル、ラトビアmob.Master Telecom VOICETRADEC
3712278 37,181 ラトビアプレミアム、LATVIA Radiocoms Mobile、ラトビアサービスECOネットワーク、ラトビアVAS IPRS、ラトビアmob.ECOソリューション VOICETRADEC
3712279 37,181 LATVIA Mobile、Latvia Premium、Latvia Services ECO Networks、Latvia VAS IPRS、Latvia mob.ECO Solutions VOICETRADEC


表をよく見ると、 37122705678という数字が37122.371227.3712270の3つの関税に該当することがわかります。 番号の先頭を処理するか、時間通りに料金プランを更新しないことが正しくない場合、ルーブルあたりの予想コールまたは84コペックの代わりに、1分あたり30ルーブル以上の価格のコールを受け取ります。 サイバー犯罪者が使用するのはこの抜け穴です。 したがって、このようなシナリオを除外するために、すべてのプレフィックスを14のカテゴリに分割しました。







id カテゴリー 説明
1 修正済み 固定電話番号
2 プレミアム プレミアムサービス(ホロスコープ、セックスサービス、有料の参照情報など)
3 オフネット ローミングからの呼び出し
4 オンネット オンネットコール
5 その他 他の種類の通話
6 モバイル 携帯電話番号
7 ペイジャー ショートメッセージサービス
8 フリーダイヤル コールサービス。着信番号がコールに対して支払うサービス
9 VOIP インターネット電話
10 衛星 衛星接続
11 ネットワーク ローカルサービスプロバイダー
12 パーソナル ジオリファレンスされていない個人用の「美しい」部屋
13 不明 不明な電話コード
14 未使用 未使用の電話コード


そして、彼らが束を立ち上げたとき、彼らは単にテストコールをいくつかの係争中のカテゴリーに限定した。 ユーザーが自分のお金をアカウントに入金した場合、ブロックされたカテゴリは自動的に開かれました。 これにより、不正レベルがほぼ99%削減されました。 残りの割合は、パートナーの関税の更新のタイムラグのために空中に留まりました。 関税グリッドを更新する際、一般リストの「ドロップアウト」テーブルに定義されていなかったプレフィックスは、オペレーターによる分析後、目的のカテゴリに関連付けられました。







LCR(最小コストルーティング)-「最小コストルーティング」



私たちが設計したシステムは多数のオペレーターと接続することを意味するという事実により、1分間の会話の中で最も低コストのルートを選択するという疑問が生じました。







すでに関税グリッドがあり、約70万件の記録がありました。







70万件のレコードの検索がオーバーヘッドであることは明らかであり、オペレーターの数が増えると、レコードの数が著しく増加します。 そのため、料金表のルート検索を高速化する多くの方法を探しました。







注意! 番号79031210011は一例であり、私のものではありません。 表の呼び出しの価格は2016年4月(データベースの最後のダンプ)からです







検索の主な問題は、短いプレフィックスから長い番号を見つけなければならないことでした。 その後、検索結果から各演算子の最長プレフィックスを見つけます。これを行うには2つの方法があります。







 # select * from rates r where '79031210011' like CONCAT(r.prefix,'%') # select * from rates r where INSTR('79031210011',r.prefix) = 1 #  ,    select prefix,pricerub,note,tarif_id from rates r where '79031210011' like CONCAT(r.prefix,'%'); /*  : 0  : 15 : 0  1 : 0,421 sec. */ select prefix,pricerub,note,tarif_id from rates r where INSTR('79031210011',r.prefix) = 1; /*  : 0  : 15 : 0  1 : 0,453 sec. */
      
      





答えは次のとおりです。







プレフィックス プライスラブ tarif_id
7 11.72 認識されないコード 11
79 1,495 ロシアモバイル 3
79 1.15 ロシア(mob)-地域 11
7903 1.15 ロシア(mob)-ビーライン 11
79031 1.15 モスクワ(暴徒)-ビーライン 11
7 0.715 ロシア連邦の修正 5
7903 3,9326 ロシア連邦モバイル 5
7 0.742 ロシア連邦の修正 6
7903 4.2294 ロシア連邦モバイル 6
7 1.6729 ロシア固定 9
79 7.9731 ロシアモバイル 9
7903 5,6999 ロシアモバイル-ビーライン 9
7 0.8027 ロシア固定 10
79 1,457 ロシアモバイル 10
7903 3,393 ロシアモバイル-ビーライン 10


0.5秒の検索速度(テスト環境)は完全に重要ではありませんが、奇妙に見えます。 したがって、検索を最適化するために、プレフィックスフィールドを別のテーブルに移動し、料金テーブルのキーにしました







 select * from rates_prefix r where '79031210011' like CONCAT(r.prefix,'%'); /*  : 0  : 4 : 0  1 : 0,172 sec. */
      
      









ご覧のとおり、検索速度は約3倍に向上しています。 原則として、それほど悪くはありません。 次に、結果のプレフィックスのテーブルは、オペレーターの関税表に「結合」し、余分な「短い」プレフィックスが結果のテーブルから削除されます。 そこにはオペレーターのテーブルがドッキングされており、出口には価格とプレフィックスが付いたルートの完全なリストがあり、サービスプロバイダーに関連付けられています。







 call usp_asteriskfastpathtest('79031210011','test_user',0); /*  : 0  : 17 : 0  1 : 0,140 sec. */
      
      





rate_prefix dial_string rate_pricerub provider_id
79031 SIP / westcall / 79031210011 モスクワ(暴徒)-ビーライン 1.15 7
7903 SIP / sip.voicebuy.com / 999279031210011 ロシア連邦モバイル 3,9326 11
7903 SIP / sbc.voxbeam.com / 001110179031210011 ロシアモバイル-ビーライン 5,6999 8


または、たとえば、番号13606632262のアメリカのクリスタルホテルへのルートのリスト







rate_prefix dial_string rate_pricerub provider_id
1360 SIP / sbc.voxbeam.com / 001110313606632262 アメリカ合衆国-OnNet-WA-360 0.3305 8
1360 SIP / sip.voicebuy.com / 999113606632262 アメリカ合衆国ワシントン 0.3474 11
1360 SIP / 91.190.132.39/010#13606632262 アメリカその他 0.4047 13


当然、ダイヤルリストを作成するとき、料金表グリッドのプレフィックスをソートするときに、かなり多くの追加条件が使用されます。 これは、料金の開始日/終了日、CLIサポート、手動ブロッキングなどです。 データベースに入る前の最終テーブルは、コールの最大コストの指定された制限に対してさらに処理されます。 アカウントに100ルーブルしかないユーザーに300ルーブルの呼び出しを許可することは意味がありません。







これはすべて、生産性にコストを課します。 戦闘システムでは、リクエストごとに約50ミリ秒を受け取りました。







課金



私たち全員が理解しているように、提供されるサービスのコストを計算せずにサービスを提供するシステムはありません。 私たちは、ユーザーのウォレットの状態を最適に制御する方法について長い間考えてきましたが、私たちの意見では、妥協案を見つけました。







最初のパートの最後で、サービス機能とチャネルステータス監視機能を追加するという観点から、アスタリスクサーバーの構成について説明しました。 同じ機能を使用すると、クライアントのコールステータスを明確に監視できます。







下の表に見られるように









オペレーターの現在の関税、オペレーターの通貨、クライアントの関税、方向などに関する情報が常にあります。 次の表になります









そしてmake_a_route.pyが[make_a_call]コンテキストに戻るのはまさにdial_guidであり、 stepフィールドは現在の反復を改良するために使用されます。







アスタリスクは、サブスクライバーを接続するための通信チャネルの準備を開始すると、 create_channel_record.pyアプリケーションを呼び出します。このアプリケーションは、CDRテーブルに空のレコードを作成します。CDRテーブルには、チャネル作成時間、ユーザーID、dial_guid +ステップ以外の情報はありません。 呼び出されたユーザーが電話をピックアップすると、アプリケーションpredial.pyが呼び出され、電話をピックアップして通話料金を請求する時間を担当するテーブルのフィールドに入力します。 会話が正常に終了するか、エラーが発生した場合、 hangup.pyアプリケーションが呼び出され、データベース内のCDRレコードを「クローズ」し、フィールドに会話の終了時刻を入力します。 したがって、何らかの理由で行われなかった誤った呼び出しは、ユーザーの請求に含まれず、システムログに残ります。 トリガーは一時的なCDR情報を持つテーブルにインストールされます。この情報は、行の変更を予期します。この場合、電話をかける時間とコールの終了時間がゼロではありません。 このトリガーが上記の条件を確認するとすぐに、一時的なCDRテーブルからメインのテーブルにデータを転送し、使用した金額をクライアントのアカウントに書き込みます。







ところで、現在の通話を提供し、dial_guidに関連付けられているチャネルの名前を格納する別のテーブルがあります。 データベース内のすべての現在の会話がリアルタイムで表示されるという事実により、現在進行中の会話をそれらの関税およびクライアントのアカウントの残高と相関させるトリガーが5秒ごとにトリガーされました。







クライアントのアカウントに1分未満の会話が残っているとすぐに、トリガーは通話を開始したチャンネルの番号を特別なテーブルに配置します。 各アスタリスクサーバーにあるサービスアプリケーションサーバーは、このテーブルを監視します。 彼に宛てられた行が表示されるとすぐに、 Originateアプリケーションが「not money money」というフレーズを含むコンテキストへのリダイレクトで呼び出され、会話が終了します。 会話が完了すると、クライアントのバランスを変更する定期的な手順がアクティブになります。 このスキームは、すべてのサーバー上のクライアントのアカウントからのすべての会話を監視するという点で優れています。







会話の監視は次のようになります。











多通貨換算



実際、上記のテクノロジーを使用すると、同じシステム内で複数通貨の請求を作成できます。 通貨といえば。 外国のオペレーターを介した通話のコストはドルまたはユーロで考慮されるため、クライアントが機能する通貨を決定する必要があります。 また、為替レートは毎日変化するため、通貨の変換を保証する必要があります。







これにより、単純なPythonスクリプトが作成されます。







 # -*- coding: utf-8 -*- import urllib from sqlconfig import * import mysql.connector import json # Init mysql connection cnx = mysql.connector.connect(**config) cursor = cnx.cursor() cursor.execute('SET AUTOCOMMIT=1;') cursor.execute('SET collation_connection=\'utf8mb4_unicode_ci\';') currency_pairs = [ ('EUR','USD'),('EUR','RUB'),('EUR','UAH'),('EUR','KZT'),('RUB','USD'),('RUB','UAH'),('RUB','KZT'),('USD','UAH'),('USD','KZT') ] for base in currency_pairs: (fromcur,tocur) = base root_url = 'http://www.bloomberg.com/markets/api/security/currency/cross-rates/%s,%s'%(fromcur,tocur) f = urllib.urlopen(root_url) myjson = json.loads(f.read()) pair = myjson[u'data'] for fromcur in pair: for topair in pair[fromcur].items(): (tocur,crossrate) = topair cursor.execute('INSERT INTO currency_cross (getcrosstime,from_currency_id,to_currency_id,crossrate) VALUES (now(),(select id from currency where iso="%s"),(select id from currency where iso="%s"),"%s")'%(fromcur,tocur,crossrate)) print fromcur,tocur,crossrate cnx.commit() cursor.close() cnx.close()
      
      





彼は毎日のクロスコースの表を形成します







から 交換する
米ドル ユーロ 0.9423
ユーロ 米ドル 1.0612
RUB ユーロ 0.01581
ユーロ RUB 63.2363
UAH ユーロ 0.03409
ユーロ UAH 29.3352
KZT ユーロ 0.002831
ユーロ KZT 353.1992
RUB 米ドル 0.01678
米ドル RUB 59.5889
RUB UAH 0.4639
UAH RUB 2.1556
RUB KZT 5.5854
KZT RUB 0.179
UAH 米ドル 0.03618
米ドル UAH 27.6434
米ドル KZT 332.83
KZT 米ドル 0.003005


したがって、計算が行われる主要通貨に応じて、クライアントの資金を再計算し、希望する通貨に関税を課すことができます。







通話場所



ジオロケーションは、世界中の顧客と通信するさまざまなサービスのかなり重要な部分です。 電話であなたの場所と一致する発信者の番号を見るのはいつでもいいです。 どのように機能しますか?







各国の内部規制機関は、国際番号計画および特定の国のプレフィックスに加えて、その地域を地区、地域、地区、都市、町に分割し、それぞれにダイヤルプレフィックスの追加の数字を割り当てます。







モスクワ、サンクトペテルブルクなどの大都市(人口100万人の都市)には、7桁の番号計画、地域的に重要な6桁の都市、地域的に重要な5桁の都市などがあります。







ロシア連邦の番号計画には、次の区分があります。









アメリカ合衆国のナンバープレート内には、次の区分があります。









したがって、電話コードを知っていると、あるオペレーターから別のオペレーターに移行された携帯電話番号と、独立していない番号のサービスを提供するサービスを除いて、オブジェクトの場所を知る可能性が非常に高くなります。

RossvyazのWebサイトあるロシアの番号について 、パブリックドメインで、地域および連邦地区ごとの番号を説明するいくつかの表があります。 オペレーターへのセル番号の所属は、 cniisの Webサイトで明確にすることができます。







他の国については、現地の規制当局のウェブサイトで情報を見つけることもできます。

使用されるプレフィックスに関する情報の収集と明確化には非常に時間がかかります。 したがって、パブリックドメインには完全なデータベースは実質的にありません。 そして、必ずしも必要な情報が含まれているわけではありません。 しかし、ほとんどの場合と同様に、小さなライブハックがあります。







通常、料金を提供するIPテレフォニーオペレーターには、構造化された説明の形式で、プレフィックスを提供する場所が含まれます。







私たちは遠くに行かず、オペレーターの料金プランから最初の行を取ります。







 "prefix","comment","price","connect_cost","increment","custom","created_at", "9375","AFGHANISTAN - CDMA","0.388125","0.0000","60","0","2015-10-11 23:21:51", "9340","AFGHANISTAN - HERAT","0.388125","0.0000","60","0","2015-10-11 23:21:51", "9360","AFGHANISTAN - JALALABAD","0.388125","0.0000","60","0","2015-10-11 23:21:51", "9320","AFGHANISTAN - KABUL","0.388125","0.0000","60","0","2015-10-11 23:21:51", "9330","AFGHANISTAN - KANDAHAR","0.388125","0.0000","60","0","2015-10-11 23:21:51", "9350","AFGHANISTAN - MAZAR-E-SHARIF","0.388125","0.0000","60","0","2015-10-11 23:21:51", "937","AFGHANISTAN - MOBILE","0.388125","0.0000","60","0","2015-10-11 23:21:51", "9377","AFGHANISTAN - MOBILE - AREEBA","0.32751","0.0000","60","0","2015-10-11 23:21:51", "9370","AFGHANISTAN - MOBILE - AWCC","0.32751","0.0000","60","0","2015-10-11 23:21:51", "9378","AFGHANISTAN - MOBILE - OTHER CARRIERS","0.32751","0.0000","60","0","2015-10-11 23:21:51", "9379","AFGHANISTAN - MOBILE - ROSHAN","0.310365","0.0000","60","0","2015-10-11 23:21:51", "93","AFGHANISTAN - PROPER","0.388125","0.0000","60","0","2015-10-11 23:21:51", "35568","ALBANIA - MOBILE - AMC","0.456165","0.0000","60","0","2015-10-11 23:21:51", "35567","ALBANIA - MOBILE - EAGLE","0.452925","0.0000","60","0","2015-10-11 23:21:51", "35569","ALBANIA - MOBILE - VODAFONE","0.47007","0.0000","60","0","2015-10-11 23:21:51", "355","ALBANIA - PROPER","0.08046","0.0000","60","0","2015-10-11 23:21:51", "3554","ALBANIA - TIRANE","0.08046","0.0000","60","0","2015-10-11 23:21:51", "35541","ALBANIA - TIRANE","0.08046","0.0000","60","0","2015-10-11 23:21:51", "35542","ALBANIA - TIRANE","0.03861","0.0000","60","0","2015-10-11 23:21:51", "35543","ALBANIA - TIRANE","0.08046","0.0000","60","0","2015-10-11 23:21:51", "35544","ALBANIA - TIRANE","0.08046","0.0000","60","0","2015-10-11 23:21:51", "35545","ALBANIA - TIRANE","0.08046","0.0000","60","0","2015-10-11 23:21:51", "35546","ALBANIA - TIRANE","0.08046","0.0000","60","0","2015-10-11 23:21:51", "3554249","ALBANIA 0 OLO GROUP","0.04401","0.0000","60","0","2015-10-11 23:21:51", "7997","RUSSIA (MOBILE)","0.07938","0.0000","60","0","2015-10-11 23:21:51", "78182","RUSSIA - ARKHANGELSK","0.09558","0.0000","60","0","2015-10-11 23:21:51", "73512","RUSSIA - CHELYABINSK","0.055755","0.0000","60","0","2015-10-11 23:21:51", "74932","RUSSIA - IVANOVO","0.055755","0.0000","60","0","2015-10-11 23:21:51", "73412","RUSSIA - IZHEVSK","0.055755","0.0000","60","0","2015-10-11 23:21:51", "78432","RUSSIA - KAZAN","0.052515","0.0000","60","0","2015-10-11 23:21:51", "73912","RUSSIA - KRASNOYARSK","0.052515","0.0000","60","0","2015-10-11 23:21:51", "7813","RUSSIA - LENINGRAD REGION","0.055755","0.0000","60","0","2015-10-11 23:21:51", "79","RUSSIA - MOBILE","0.07938","0.0000","60","0","2015-10-11 23:21:51", "7964","RUSSIA - MOBILE - BEELINE","0.13311","0.0000","60","0","2015-10-11 23:21:51", "7965","RUSSIA - MOBILE - BEELINE","0.13311","0.0000","60","0","2015-10-11 23:21:51", "792","RUSSIA - MOBILE - MEGAFON","0.07938","0.0000","60","0","2015-10-11 23:21:51", "791","RUSSIA - MOBILE - OTHER CARRIERS","0.07938","0.0000","60","0","2015-10-11 23:21:51", 1531,US,"United States - OnNet - NE - 531",0.008100,6,6,0.008100,Unchanged,USD,11-Apr-2016,22:00:00,18-Apr-2016,22:00:00 1603,US,"United States - OnNet - NH - 603",0.008100,6,6,0.008100,Unchanged,USD,11-Apr-2016,22:00:00,18-Apr-2016,22:00:00 1201,US,"United States - OnNet - NJ - 201",0.008100,6,6,0.008100,Unchanged,USD,11-Apr-2016,22:00:00,18-Apr-2016,22:00:00
      
      





このデータからわかるように、コードは国と接続の種類にバインドされています。









, , . . , , .







, , . 3 . . https://sanstv.ru/codes/ , , , . . , 2 . . . , . .







.







© Aborche 2017

アボルシュ








All Articles