2023年5月1日を持ちまして、株式会社KDDIウェブコミュニケーションズのTwilioリセール事業が終了したため、本記事に記載されている内容は正確ではないことを予めご了承ください。
はじめに
Twilioで音声ファイルを再生する際に、以下のような502エラーが発生する場合の原因を記録しておきます。
この例では、サーバーからwavファイルをダウンロードしてきた際に、502エラーが発生しましたという内容になっていますが、実際Webサーバーのログを見る限りでは、正しくファイルは提供しています(ステータスコード「200」で応答している)。
試しに、ブラウザからwavファイルを直接指定した場合も、正しく音声が再生されます。
すなわち、Webサーバーはステータスコード「200」で返しているのに、Twilioで呼び出すと502エラーになってしまうという現象です。
原因
結論から言うと、Twilio側でwavファイルが正しく認識されていないのが原因です。
例えば、wavファイルが圧縮されてしまっている場合などが該当します。
気をつけなくてはいけないのは、圧縮されているwavファイルでも、先ほどのブラウザで再生されたように、多くの場合、ただしく再生されます。よって、正しいwavファイルなのに、Twilioだとエラーになってしまう→Twilioのバグじゃないの?的な間違った認識をしがちです。
調査方法
wavファイルが圧縮されているかを確認するのはなかなか難しいのですが、直接wavファイルの中身を覗いてしまうのが一番確実です。
どうやってやるかというと、バイナリエディタを使います。Macユーザであれば、0xEDというフリーのバイナリエディタがおすすめです。
バイナリエディタでwavファイルを開くと、以下の様に内容を表示することができます。
注目するべきは先頭の4バイトです。正しいwavファイルの場合は、この画面のように先頭が52494646('RIFF')になっていて、さらに"WAVEfmt"という記述も記載されています。
もし先頭がこのようになっていない場合は、正しくない(Twilioでは利用できない)wavファイルですので、正しくファイルを作りなおして下さい。