RevComm Tech Blog

コミュニケーションを再発明し 人が人を想う社会を創る

AstriCon2023に参加してきました

はじめに

こんにちは。RevCommでPBX (電話交換システム) サーバーの開発等を担当している宮崎です。
RevCommは、電話やオンライン通話による営業活動や顧客応対を支援するビジネス向け通話アプリケーションのMiITelを提供しています。PBXはMiiTelの通話機能を担う重要な技術の一つです。

このたび、ソフトウェアPBXとして世界的に広く活用されているオープンソース「Asterisk」の世界最大のカンファレンスであるAstriCon 2023に参加してきました。
本記事では、AstriCon 2023のイベントや発表の概要、イベント参加を通して知ったことを共有します。

AstriConについて

AstriConはSangoma Technologies社の主催するオープンソースのPBX製品「Asterisk」に関する世界最大のユーザーカンファレンスです。
2004年の初回開催以来、ほぼ毎年アメリカの都市で開催されており、1000名近くが参加した年もあったようです。
新型コロナウイルスの影響で2020年、2021年はオンライン開催、2022年は中止となっており、今回は4年ぶりに現地での開催となりました。

  • 開催地: Broward County Convention Center, Fort Lauderdale, Florida
  • 開催期間: Feb 14-16, 2023
  • 参加者: 50名程度

参加者は想像していたより少なく、ベテランの方が多い印象でした。 また、我々以外に日本人の参加者はいないようでした。

会場の様子

初日はスポンサー企業限定のレセプションパーティで、我々は2、3日目に行われた講演形式の発表を聴講しました。 発表の中で特に興味深かった内容をピックアップして紹介します。

Asteriskの最新情報について

Sangoma Technologies社のAsteriskプロジェクトリーダーであるJoshua C. Colp (JColp) 氏からAsteriskの最新情報に関する紹介がありました。内容をいくつか紹介します。

E911 (緊急通報) 対応

米国では、E911 (Enhanced 911) と呼ばれる緊急通報サービスがあります。
これは、緊急通報時に自動的に発信元の位置情報 (通常は住所) を緊急通報センター (PSAP: Public Safety Answering Point) に提供する機能です。
AsteriskはE911に対応するため、res_geolocation, res_pjsip_geolocationモジュールを実装しました。
これらによりSIP INVITE messageのSDPに含まれる、位置情報を示すPIDF形式 (XML形式) のデータを追加したり読み取ったりすることができるようになりました。また、これらのデータはMulti-partで送信するとUDPのパケットサイズを超える場合があり、TCPかTLSで送る必要があるとのことでした。
参加者から、実際に使えるのか?という質問があがりましたが、現在のところ1キャリアで試したのみで、本格的な活用はこれから広がっていくものと思われます。

音声認識専用プロトコル (res_aeap)

これまでAsteriskを外部の音声認識エンジンと連携させる場合は、各サードパーティごとに用意されたモジュールを使用する必要があり、対応していない音声認識エンジンと連携したい場合は、出力される録音データを外部のアプリケーションでキャプチャして送信する方法しかありませんでした。
今回発表されたAEAP (Asterisk External Application Protocol) は、WebSocketを経由して外部アプリケーションに音声情報を簡単に連携することができます。
サンプルコードも公開されており、簡単にリアルタイムの音声文字起こし (Speech To Text) を実装することができたので、今回のAstriCon参加レポートを社内発表する際、res_aeapを用いて実装した簡単なデモを作成して共有しました。その内容については後述します。

その他アップデート

そのほかAsteriskに関しては、ソースコード管理をGerritからGitHubに移動予定であることや、Asterisk用のテストツールであるTest SuiteをPython2 から Python3に書き直したことなどが発表されていました。FreePBX (Asteriskに管理画面がついた商用製品) に関するアップデート等も紹介されていました。
最後に、JColp氏から会場の参加者に利用しているAsteriskのバージョンを質問する場がありました。意外にも、サポート外のバージョンを使っている参加者や、サポートされているかわからない人がたくさんいるということが印象的でした。

  • サポートされているバージョン (v18, v20) を使っている人:数人
  • Security fix only (v16, v19) を使っている人:数人
  • サポートされていないバージョンを使っている人:たくさん
  • サポートされているかわからない人:たくさん

Asteriskの活用例

Asteriskの各社における活用例を紹介する内容が多く発表されていました。
業務における利用シーンや、利用している機能・アーキテクチャなどを紹介しており、自社サービスに組み込んでいるケースや、社内利用しているケースもありました。
面白いと感じた内容をいくつか紹介します。

社内業務での活用例

大手量販店チェーンのTARGET社では、店舗の従業員が使うモバイルアプリのバックエンドにAsteriskを採用しているとのことです。
以前は顧客から電話が入った際に従業員をWalkie-Talkie (トランシーバー) で呼び出し、事務所の電話を取らせるというオペレーションでしたが、これを内製のモバイルアプリとハードフォン宛に転送するように改善しました。TARGET社は小売業者でありながらTech CompanyとしてもさまざまなOSSの公開などの活動をしているようです。

金融情報サービス大手のBloomberg社も、社内向けに開発したAsteriskのサービスについて紹介していました。Bloombergでは頻繁に電話を使うこともあり、Asteriskベースの電話システムをバージョンアップを繰り返しながら10年くらい運用しているとのことでした。
ターミナルライクなUIが好まれるため、Slackのようなチャットアプリを社内を独自開発し、アプリ内でクリックtoコールもできるようにしているとのことです。電話代の削減のため、UKからUSに国際電話をするようなケースでは、USのAsteriskを経由させる運用をしています。Asteriskを選んでいる理由は安定しており、標準的なSIPを利用できるからとのことでした。

Asterisk - Kubernetes

Kubernetes (K8s)によるAsteriskのクラスタ化に関するトピックが2件ありました。

Stratus Talk社の方による発表では、Stratus TalkというクラウドPBXをEC2のK8sで構成して運用しているとのことでした。単一のノードにおける同時通話を負荷テストすると100コールくらいで音声に途切れが出始めたので、100コールを目安にスケールアップしているとのことです。クラスタはRancher で管理し、Prometheusで監視しているとのことでした。Extension (内線番号) を持たせず、個人宛の通話は全てDID (Direct Inward Dialing) によって実現しているという話でした。
引用:https://github.com/voxoco/k8s

voxo社のCTOであるJoe氏もK8sによるAsteriskのクラスタ化に関するトピックで発表していました。voxo社ではKamailioをフロントに置いたk8sの構成を組んだプラットフォームをOSSで公開しています。構成上のポイントとして、共通して使う情報をGlobal KVSに置く点、HPA (Horizontal Pod Autoscaler) を使ったスケールダウン、スケールアップのポリシー, サイジングに関してはCPUに気を配る点、4コアのCompute Optimizeのインスタンスをつかっており、200chを目安にオートスケーリングを入れている点を紹介していました。

Natural Language Intent Based IVR

localsplash社のCEOであるDavid氏は、IVRで顧客の発話した内容から適切な呼び出し先に接続するサービスを提供しています。
David氏によるとIVRは、ボタン入力のみを受け付けるレガシーなIVRから、単語の音声入力を受け付ける少し賢いIVR、そしてNatural Language Intent Based IVRと言われる顧客の話した内容から意図を汲み取り、適切な呼び出し先に接続する賢いIVRへと変遷してきたといいます。
Localsplash社は顧客ごとにAsteriskかVicidialのPBXサーバーを提供しており、Spreadsheetにインテント(意図)とキーワードを登録すると、Dialplanが自動的に作られる仕組みを開発しているとのことです。
Natural Language Intent Based IVRの導入後に直面した課題として、IVRの自動応答に対して実際に電話をかけてきた人の44%が何も喋らかったということをあげていました。
”すみません、よく聞こえませんでした” などといった音声をさらに流すことでその後90%の人が喋るようになったそうです。
機械の音声に対して会話するという体験に慣れていないユーザーが多いので、「例えば、”住所変更がしたい” というようにおっしゃってください」など、どのように話せばいいかを例示するなどの工夫が重要であるとおっしゃっていました。

AstriConのイベントについては以上です。

AEAP を活用した ChatGPT 自動応答電話機能

AstriConの参加レポートを社内で発表した際に、Asteriskの新機能として紹介されていた音声認識専用プロトコル (res_aeap) を利用して自動応対ボットを開発し、そのデモを行いました。

デモの概要

このデモでは発信者の音声入力をres_aeapによるWebsocketでの音声データ送信でテキストに変換後、ChatGPTのAPIにリクエストを投げ、レスポンスのテキストを音声に変換して再生することで、ChatGPTと音声で会話する体験を提供します。

下記のような処理をおこなっています。

  1. 通話中に受け取った音声データを、AsteriskがWebsocketクライアントとなりサーバー (図中の aeap-speech-to-text) に送信する。
  2. サーバーは、受け取ったデータをGoogle Cloud Speech APIに送信し、音声認識結果のテキストデータを受け取る。
  3. 受け取ったテキストを引数にしてpython3で実装したスクリプトchatgpt.pyを実行する
  4. chatgpt.py内で引数で受け取ったテキストをChatGPTのAPIに投げ、レスポンスのテキストを受け取る
  5. 受け取ったテキストを自社開発のText-To-Speech API (TTS API) に送り、テキストを音声に変換して受け取る
  6. 受け取った音声を再生する

res_aeapによるSpeech APIへの音声送信

上記のデモにおけるres_aeapを使用した箇所について紹介します。

/etc/asterisk/aeap.conf

[my-speech-to-text]
type=client
codecs=!all,ulaw
url=ws://127.0.0.1:9099
protocol=speech_to_text
@language=ja-JP

Asteriskのaeap.confにmy-speech-to-textというSpeech engineを定義しています。

/etc/asterisk/extensions.conf

[speech_to_text]
exten=>550,1,log(NOTICE,'Start IVR')
 same=>    n,Wait(1.5)
 same=>    n,SpeechCreate(my-speech-to-text)
 same=>    n,SpeechStart()
 same=>    n,Playback(please-wait)
 same=>    n,Set(SPOKEN_TEXT=${SPEECH_TEXT(0)})
 same=>    n,log(NOTICE,${SPOKEN_TEXT})
 same=>    n,System(python3 /root/chatgpt/chatgpt.py /tmp/rec_${UNIQUEID}.wav ${SPOKEN_TEXT})
 same=>    n,SpeechDestroy()
 same=>    n,Playback(/tmp/rec_${UNIQUEID})
 same=>    n,Return()

extensions.confの定義では、Speech Recognition APISpeechCreate()に先ほど定義したmy-speech-to-textを指定しています。
これにより、WebSocketクライアントはmy-speech-to-textに指定された URL への接続を試行します。

my-speech-to-textに指定したws://127.0.0.1:9099をListenするWebSocketサーバを、サンプルコードとして公開されているこちらのアプリケーションを利用して起動します。
このWebSocketサーバを経由してGoogle Cloud Speech APIに音声データを送信し、テキストデータを受け取ります。

実際に社内発表の中でデモを行った様子を公開します。

 

このように外部アプリケーションへの音声データの連携を簡単に実装することができました。

まとめ

今回はAstriCon2023への参加を通じて得た情報を紹介しました。
現地の肌感としては、思ったより参加人数が少なく、参加者の年齢層が比較的高かった事もありVoIP系の技術者は国内外問わずあまり増えていないのかな?という印象を受けました。現在、音声認識技術や対話型AIなどVoIP技術との相性が良さそうな技術への注目度が高まってきているので、今後VoIP系技術者の需要も高まっていくのではないでしょうか。

参考資料:
http://lists.digium.com/pipermail/asterisk-users/2004-April/036295.html
https://www.itexpo.com/east/astricon.aspx

RevCommでは音声サーバエンジニアを募集しています。興味を持っていただけた方は、ぜひともご応募ください!

hrmos.co