DUICUO

インテリジェントなアウトバウンドコールプラットフォームにおけるFreeswitchクラスターの応用

序文

過去2年間、新型コロナウイルス感染症(COVID-19)のパンデミックは私たちの仕事と生活に甚大な影響を与え、社会のあらゆる分野が深刻な課題に直面しています。Autohomeは、人件費の削減、優良顧客の選別、そしてコンバージョン率の向上がOEMにとって喫緊の課題となっていることを痛感しました。そこで、インテリジェントアウトバウンドコールプラットフォームが誕生しました。

市場に出回っている複数のアウトバウンドコールプラットフォームを調査した結果、多くのビジネスシナリオがサポートされておらず、拡張性が低く、メンテナンスコストが高いことが判明しました。そこで、OEMビジネスをより適切に遂行し、顧客のカスタマイズされたニーズに応えるため、独自のインテリジェントアウトバウンドコールプラットフォームを開発することを決定しました。

一般的なアウトバウンドコールプラットフォームは、VoIP(Voice over Internet Protocol)に基づいています。VoIPは、インターネットプロトコル(IP)を使用して音声通話やマルチメディア会議を実現する音声通信技術です。

VoIP電話

VoIPは従来の電話とは異なり、電話通信の新たな形態です。音声技術をIPプロトコルに統合し、インターネット経由で伝送する新しい通信方式であり、従来の電話よりもはるかに低コストです。

  • VoIP電話の利点


  • VoIPプラットフォームの選択

現在、中国で最も人気があり、広く使用されている VPN は、Freeswitch (https://freeswitch.org/) と Asterisk (http://www.asterisk.org/) です。

以下の画像は、2 つの簡単な比較を示しています。

結論:上記の調査と比較に基づき、Freeswitchは比較的充実したドキュメント、容易な学習曲線、そして多数の成功事例を有していることがわかりました。多くのアウトバウンドコールプロバイダーがソフトスイッチプラットフォームとしてFreeswitchを使用しています。したがって、Freeswitchは私たちにとってより良い選択肢となるでしょう。

Freeswitchの第一印象

Freeswitchはオープンソースの電話交換プラットフォームです。公式には、世界初のクロスプラットフォーム、高度なスケーラビリティ、無料のマルチプロトコル・ソフトスイッチ・プラットフォームと定義されています。Freeswitchが登場する以前は、ソフトスイッチ技術は少数の通信会社によって主に管理され、ハードウェア機器に統合され、高額なユニットとして販売されていました。導入には高度な専門知識が必要であり、ユーザーは主に運用と保守に集中し、コアとなる技術的側面を理解することができませんでした。

FreeswitchがBypassMediaモード(このモードでは、Freeswitchはシグナリングプロキシのように動作し、メディアはFreeswitchを通過せず、SDPメッセージ本体は変更されず、録音、二次ダイヤルなどの機能もありません)で動作する場合、他のVoIP通信方式と同じ原理で動作し、ポイントツーポイントのリアルタイム通信を提供します。BypassMediaモードは、2者間のメディアネゴシエーション、RTPポートの交換、情報のエンコード/デコードなどを処理します。SIPプロトコルまたはネゴシエーションの詳細な手順については、RFC3261ドキュメントを参照してください。ソースコードとコンパイル/インストール手順は、Freeswitchの公式ウェブサイトでご覧いただけます。

  • FreeSwitch操作機構

Freeswitchは内部的にスレッドモデルを使用して同時リクエストを処理します。各接続は個別のスレッドで処理され、異なるスレッドはミューテックスを介して共有リソースにアクセスし、メッセージと非同期イベントを介して通信します。このアーキテクチャは高い同時実行性に対応し、マルチコア環境では複数のCPUまたは単一CPUの複数のコアに均等に計算を分散できます。Freeswitchのコアは非常にコンパクトで効率的であり、それが安定性の鍵となっています。アプリケーション層機能のほとんどは周辺モジュールに実装されています。これらの周辺モジュールは動的にロード(およびアンロード)できるため、実際には必要なモジュールのみをロードできます。周辺モジュールはパブリックAPIを介してコアと通信し、コアはコールバック(またはフック)を介して周辺モジュール内のコードを実行します。

  • 開発モデルの選択

Freeswitch には 2 つの開発モードがあります。

  1. サーバー指向開発はスクリプト埋め込みをベースとしており、主にLuaスクリプトの開発やC言語を用いたMOD開発が行われます。これは開発者の学習曲線が急峻で、メンテナンスが容易ではなく、スクリプトの再利用も困難です。
  2. クライアントサイド開発において、Freeswitch は複数の言語をサポートしており、開発者は好みのプログラミング言語(Java)を使用できます。セッションフロー全体は、コア API を呼び出すことで制御できます。

結論として、LuaスクリプトやC言語は実行効率が高いものの、クライアントサイド開発の方がカスタマイズが容易で実装も容易です。さらに、複雑なビジネスロジックをFreeswitchサーバーに配置すると、将来のメンテナンスや拡張に支障をきたします。クライアントサイド開発には、インバウンドとアウトバウンドの2つの接続モードがあります。ここではインバウンドモードについてのみ説明します。

接続モードでは、Freeswitchはサーバーとして機能し、ユーザープログラムはTCPクライアントとしてFreeswitchにアクティブに接続できます。同様に、Freeswitchは複数のクライアントからの接続を許可します。接続された各クライアントはFreeswitchの内部イベントをサブスクライブできるため、カスタマイズされた開発が可能になります。

たとえば、通話転送やカスタマイズされた呼び出し音は、インライン モードを通じて制御できます。

  • FreeSWITCHにおけるSIPプロトコルに基づくコールフロー

以下では、上記の呼び出しプロセスを段階的に説明します。

  • プロキシ サーバーに送信された INVITE 要求は、セッションを開始する役割を担います。
  • プロキシ サーバーは、INVITE 要求の再送信を停止するために、発信者 (Alice) に直ちに 100 Trying 応答を送信します。
  • プロキシサーバーはロケーションサーバー上でボブのアドレスを検索します。アドレスを取得した後、INVITEリクエストをさらに転送します。
  • その後、ボブが生成した 180 個のリング (一時的な応答) がアリスに返されました。
  • ボブは通話に応答するとすぐに200 OK応答を生成します。アリスが200 OK応答を受信すると、ボブはアリスからACKを受信します。
  • 同時にセッションが確立され、両端から RTP パケット (ダイアログ) が流れ始めます。
  • 会話終了後、参加者(アリスまたはボブ)は誰でもBYEリクエストを送信してセッションを終了できます。BYEはプロキシサーバーを経由せず、アリスからボブに直接送信されます。
  • 最後に、Bob は BYE を確認するために 200 OK 応答を送信し、セッションは終了します。
  • 上記の基本的な呼び出しフローでは、3 つのトランザクション (ラベル 1、2、3) が利用可能です。
    完全な通話 (INVITE から 200 OK まで) はダイアログと呼ばれます。
  • Freeswitchのメイン設定ファイル

Freeswitch のコアコードは C で記述されています。Freeswitch のコア機能をリファクタリングしたり、Freeswitch をベースにしたソフトスイッチを開発したり、Freeswitch 用のカスタムモジュールを開発したりする場合は、Freeswitch の開発仕様に準拠しながら変更を加える必要があります。ただし、Freeswitch の使用や Freeswitch 用の ESL アプリケーションの開発では、通常、基盤となるコードロジックを変更する必要はありません。Freeswitch は、すべての機能の設定とスケジュール制御を、静的な XML ベースのファイル構成を通じて提供します。

ダイヤルプランはFreeswitch設定ファイルの重要な部分であり、主な機能は通話のルーティングです。ユーザーがダイヤルすると、ダイヤルプランは番号を分析し、次のステップを決定します。例えば、音楽の確認のために9197にダイヤルしたり、ユーザーがオフラインの場合はボイスメールメッセージを残すために1001にダイヤルしたりすることができます。ダイヤルプランは、コード割り当てを通じて機能を拡張するためにも使用できます。

Freeswitch には多くのトピックが含まれており、それぞれについて詳細な議論が必要となるため、上記では Freeswitch の使用に関する主要なポイントのみを取り上げました。次のセクションでは、Freeswitch サーバーセンターの進化と構築について説明します。

フリースイッチサービスセンターの進化

  • シングルフリースイッチサービス(1.0)
    インテリジェントなアウトバウンドコールサービスをゼロから開発するプロセスにおいて、各機能の正しい実装と円滑な業務進行を確保することは、まず取り組むべき重要な課題です。Freeswitchのシンプルなモノリシックアーキテクチャは、インテリジェントロボットのアウトバウンドコール要件を満たすことができます。

発信コールロボットのダイヤルプロセス:

  1. Freeswitch サービスが正常に開始されました。
  2. ロボットのアカウントとしてプライベート内線番号を作成します。
  3. ロボットはダイヤルルールを介して Freeswitch を呼び出します。
  4. ダイヤルアップ通話を受信すると、Freeswitch は設定されたゲートウェイを呼び出し、ゲートウェイはダイヤルする番号をファイアウォール経由で回線オペレータに送信します。
  5. 通話リクエストを受信すると、回線プロバイダーはユーザーの携帯電話番号に接続し、最終的に発信通話ロボットとユーザーの携帯電話間の通信チャネルを確立します。

モノリシックアーキテクチャの問題:

    1. 単一障害点のリスクがあり、発信通話システム全体が麻痺する可能性があります。2. 同時実行能力が制限されています。
  • 負荷分散(2.0)

ビジネスが拡大するにつれて、発信コール量が増加し、サービスの安定性に対する要件も高くなるため、高可用性の Freeswitch クラスターの必要性が議題に上がりました。

Freeswitchは、マスター・スレーブフェイルオーバーと負荷分散という2つの高可用性デプロイメント方式を提供しています。公式ドキュメントでは、CorosyncとPacemakerを使用したマスター・スレーブフェイルオーバーのデプロイメントと、フロントエンドのopensipsを使用した負荷分散について説明しています。

バージョン 1.0 のパフォーマンス制限と単一障害点のリスクに対処するために、Freeswitch サービスのシグナリング負荷転送として OpenSIPS が導入されました。

上の図は、OpenSIPS サービスを負荷制御エンドポイントとして使用する Freeswitch 負荷分散アーキテクチャを示しています。

ワークフロー:

  1. 発信通話要求は、OpenSIPS サービスを介して利用可能な Freeswitch サービスに動的に割り当てられます。
  2. Freeswitch は MySQL データベースに接続して双方向チャネル情報を保存し、同じセッション データを共有して通話を維持します。
  3. クライアントは Freeswitch サービスとの直接接続を確立します。
  4. 発信コール サービスは、人間のオペレーターに転送する要求を受信すると、ESL を使用して直接 App コマンドを呼び出し、ダイヤル ルーティングと転送を実行します。

当社のサービス センターが多数の OEM によって使用される必要があり、数万または数十万の同時通話が必要な場合、上記の方法はサポートが困難です。

すぐに新たな問題が発生しました。1. 新しいサーバーごとにネットワーク プロバイダーとの接続が必要となるため、接続が困難になります。2. 新しいサーバーごとに、同じポートを維持しながらパブリック IP アドレスが必要になります。

  • タンデム交換モード + 負荷分散 (3.0)
    前述の2.0ソリューションでは、発信コール数と同時実行数が増加すると、導入が必要なFreeswitchサービスの数も増加し、パブリックIPアドレスの使用に伴うコストが増加します。この問題に対処し、同時実行性をさらに向上させるために、タンデムエクスチェンジ + ロードバランシングモデルが導入されました。

コアノード:

  • fs-router ルーティングセンター
  • fs-media メディア交流センター

fs-router ルーティング センターには、ダイヤルアップ アドレス指定と回線接続、セッション内での中間メッセージ ルーティングの転送という 2 つの主な機能があります。

fs-mediaメディア交換センターは、主にメディア(音声通話)伝送のためのプラットフォームとして機能し、ESLがAPIとコマンドを介してfs-mediaを呼び出すためのプラットフォームとして機能します。ワークフロー:

  1. 発信コール要求は、OpenSIPS サービスを介して利用可能な FreeSWITCH サービスに動的に割り当てられます。
  2. fs-media は MySQL データベースに接続して双方向チャネル情報を保存し、通話を維持するために同じセッション データを共有します。
  3. fs-mediaA/B (メディア終了サービス) はダイヤルアップ ルーティングを介して fs-router に転送され、fs-router と回線プロバイダーは SIP シグナリングを交換します。
  4. 通信が正常に確立されると、fs-mediaA/B は音声ストリームを回線プロバイダーに直接送信します。
  5. クライアントは fs-mediaA/B を介してユーザーと通信します。

タンデム交換 + 負荷分散モードの利点:

  1. タンデム交換モードは、パブリック IP アドレスの占有の問題を解決します。
  2. 統一された出口戦略により、ルートプロバイダーとの接続が簡素化されます。
  3. 新しいサービスの構成を簡単に拡張および簡素化できます。
  4. クラスター化された展開により、ダイヤルアップ構成を介して異なるテナントを異なる fs-media に割り当てることができ、テナント間の物理的な分離を実現できます。

要約

1876年に呼び出し音回路を用いた最初の音声伝送から、今日のネットワークを介した新しい電話通信まで、100年以上が経過し、通信におけるすべてのイノベーションは技術の進歩と切り離すことができません。VoIPの台頭は、通信方法の革命を告げるだけでなく、新世代のコールセンターが電話通信の寵児となったことを意味します。Freeswitchサービスセンターの継続的な発展により、通信サービスの価値は徐々に高まり、少数の通信会社によって制御されていた交換技術の障壁を打ち破り、アクセスの難易度と利用コストを削減します。バージョン1.0のシングルサービスからバージョン3.0のタンデム交換+ロードバランサーまで、アーキテクチャのアップグレード後、Freeswitchサービスセンターは、高並列性とマルチテナントのビジネスシナリオに対応するだけでなく、高可用性を確保し、統合プロセスを簡素化し、サービスの拡張を容易にします。

  • 見通し

次世代のコールセンターは、より多くのメディアと通信チャネルを統合します。将来的には、ビジネスレベルでは、Freeswitchサービスセンターは、インテリジェントなアウトバウンドコールプラットフォームに適しているだけでなく、ヒューマンマシンコラボレーション、オンラインカスタマーサービス、複数人会議、ビデオ通話、着信コールのキューイングなど、他のビジネスシナリオのニーズにも対応します。技術レベルでは、パフォーマンスと可用性の向上に加え、通話品質とビデオ品質の向上も考慮する必要があります。これは、複数のfs-ルーター(ルーティングセンター)によってさらに向上します。最後に、私たちは技術の進歩に遅れずに対応し、新たな挑戦に取り組んでいきます。

記事参照:

  1. SIP チュートリアル: https://www.w3cschool.cn/session_initiation_protocol/
  2. Freeswitch:決定版ガイド