高可用性音声APIアプリケーション構築


信頼性の高いインフラストラクチャと最良のプログラミング手法だけではサーバーの稼働時間が100％になるとは限りません。可能な限り最高のCXを提供する為には、フェイルオーバーの検討は必須です。 Vonageが提供するVoiceAPI機能の活用によりサービスの可用性の向上方法をこちらではご紹介致します。


[Fallback URL](https://developer.nexmo.com/voice/voice-api/webhook-reference#fallback-url)
---------------------------------------
アプリケーションを提供するハードウェアまたはソフトウェアに問題が発生し、応答/イベントURLに到達できなくなった場合、VonageはフォールバックURL（設定している場合）にリクエストを送信を試みます。リクエストの本文には、元のリクエストと同じデータと、元のURLや元のリクエストが失敗した理由などの追加のコンテキスト情報が全て追加されます。

このフォールバックURLは、セカンダリデータセンターまたはフォールバックシナリオのNCCO命令を含む静的JSONファイルを指しています。これは、PSTN番号（またはSIPエンドポイント）に直接接続するか、Text to Speechによりテキスト読み上げもしくは事前に録音されたオーディオでアナウンスを再生する事が可能です。

NCCOの機能を使用すると、他のフェイルオーバーシナリオを検討することも実装可能

Configurable Timeouts
---------------------------------------
VonageがフォールバックURLを使用しようとする前に、プラットフォームは元の回答/イベントURLへのリクエストを再試行します。デフォルトでは1秒後に再試行が行われます。この要求自体も1秒後に失敗すると、プラットフォームはフォールバックURLに切り替わります。よって、ユーザーは合計2秒間待機します。システムの応答速度に応じて、フェイルオーバーが開始するまでの時間を短縮したい場合は、応答、イベント、およびフォールバックURLにカスタム値を設定可能です。

[WebSocket Disconnection](https://developer.nexmo.com/voice/voice-api/guides/websockets#fallback-options)
---------------------------------------
音声ボットを含め各種Speech to Text等AIエンジンを介在してメディアのキャプションを可能にするためにWebSocketを接続を提供しています。このケースでも、いくつかのフォールバックオプションを追加することを検討可能です。

WebSocket接続が意図せずに閉じられた場合、アプリケーションに対して特定の切断されたイベントのコールバック要求を受け取ります。この要求はNCCOが応答に戻ることを期待しているため、サービスに再接続するか、ユーザーをエージェントに接続したり、ボイスメールメッセージをキャプチャしたりするなどのフォールバックアクションを実行可能です。

イベントコールバックは上記のフォールバックURLをサポートしているため、可用性の問題が発生している同じサーバーまたはデータセンターに音声アプリとWebSocket接続の両方がある場合でも、ユーザーがフォールバックシナリオを提供しないようにすることができます。このケースでは無音応答もしくは電話を切る必要があります。

[Singed Callbacks](https://developer.nexmo.com/voice/voice-api/guides/signed-webhooks)
---------------------------------------
悪意のある可能性のあるリクエストからサービスを保護するために、ファイアウォールを設定し、公開されているIP範囲を許可リスト可能です。これらは実行可能で有効な解決策と考えます。ただし、Vonageインフラストラクチャにおいて新しいIPレンジの追加通知を見逃した場合、接続に対する安定性の問題につながる可能性があります。

解決策としては、着信要求の署名をチェックする事で、それがVonageから特にアプリケーションに送信されていることを確認可能とします。 VonageはMessagesAPIコールバックでJWTをサポートし、Voiceコールバックにも同じ手法が導入されました。

この機能は、現状開発段階である事から、いくつかの既知の制限があります（詳細については、[Singed Callbacks](https://developer.nexmo.com/voice/voice-api/guides/signed-webhooks)を参照下さい）。開発中ですが、インフラストラクチャやユースケースに応じてこちらをのソリューションを試してみることをお勧めします。

Summary
---------------------------------------
高可用性はソフトウェア業界において最も重要であり顧客体験に対して重要な課題です。これまでご紹介した通り、Vonage Voice APIを使用すると、技術的な問題が発生した場合でもサービス継続する為に多大なコストや労力をかけることはなく、アプリケーションの継続性を提供可能となり、顧客体験向上に貢献可能です。

実務上直面する課題や、コミュニティのSlackチャネルでのその他のフィードバックについて皆さんの課題や痛みを共有してください。 また、Vonage APIの使用で問題が発生した場合は、弊社サポートチームにお気軽にご連絡ください。みなさんの問題を迅速に解決致します！

各種高可用性アプリケーション構築関連の詳細記事
---------------------------------------
* [Fallback URL](https://developer.nexmo.com/voice/voice-api/webhook-reference#fallback-url)
* [Webhook Timeouts](https://developer.nexmo.com/application/overview#webhook-timeouts)
* [WebSocket Fallback Options](https://developer.nexmo.com/voice/voice-api/guides/websockets#fallback-options)
* [Singed Callbacks](https://developer.nexmo.com/voice/voice-api/guides/signed-webhooks)

参照記事
---------------------------------------
https://learn.vonage.com/blog/2020/12/09/build-high-availability-voice-api-applications/

連絡先
---------------------------------------
Vonage Japan合同会社
Mail: sales-japan@vonage.com
URL: https://www.vonagebusiness.jp/communications-apis/