送信したSMS/MMSメッセージが届かない場合のトラブルシューティング手順と、可能な場合の修正方法をご説明します。
コンテンツ:
- メッセージ送信APIリクエスト
- "Failed"とマークされたメッセージ
- "Undelivered"とマークされたメッセージ
- "Sent" または "Delivered"とマークされたメッセージ
- メッセージングサービスのエラー処理についての注意事項
メッセージ送信APIリクエスト
Twilioでメッセージ送信の有効なAPIリクエストを受け取ると、201 Created
応答が返され送信ログにメッセージのレコードが作成されます。リクエストが正しく受信・処理されたことを確かめるには、TwilioプロジェクトのProgrammable Messagingログで送信メッセージレコードを確認します(ConsoleまたはREST API(英語)を使用)。メッセージのレコードが見つからなければ、APIリクエストの問題であるか、あるいはTwilioのインシデントによるものと考えられます。
まず、Twilio Status Page(英語)でアクティブインシデントが問題の原因であるかを確認します。
次に、もう一度メッセージを送り問題が再現するか確かめます。メッセージの送信にはREST APIリクエストを使用できます。無効なリクエストに対してTwilioは400 Bad Request
を返します。これにはエラーコードと問題の内容についてのメッセージが含まれています。このタイプのREST APIエラーは通常、2XXXXエラーコードを返します。こちらは最も一般的な問題の例です
Error 20003: 正しいアカウントSIDと認証トークンを使用していることを確認してください。テスト認証情報を使用するとメッセージが送られたことを示す応答が返されますが、メッセージは実際に送信されないことにご注意ください。
Error 21408: この国のSMS権限を[Global SMS Permissions]ページで有効にする必要があります。
Error 21606: 送信を試みた「From」番号は「To」番号へのSMSメッセージを送信できません。これには一般的に2つ理由があります。
- 音声対応のみの電話番号からSMSを送信しようとした可能性があります。こちらのリストでSMSに対応するTwilio電話番号を確認できます。それ以外のTwilio電話番号はSMSメッセージの送信はできません。
- Twilioで確認済みの番号(Verified Caller ID)からSMSを送信しようとした可能性があります。Twilioでこの操作に使えるのは通話のみでありSMSは使用できません。(日本向けには発信者番号表示されません)詳しくは通話時にビジネス名称等のテキスト(CNAM)をCallerIDとして表示できない場合をご覧ください。
Error 21610: STOPキーワードを使用してメッセージ受信を拒否した番号にメッセージを送ろうとしています。
Error 21612: "TO"に指定された番号はSMS/MMSで到達できません。このエラーには2つの原因が考えられます。
- 送信に使うキャリアが非対応のキャリアである。Twilioは世界のほとんどのキャリアに対応していますが、未対応のキャリアも存在します。Twilioに対応するキャリアを確認するには、SMS料金ページで国名を検索するか、スクロールして「すべてのSMS料金」のセクションをご覧ください。リストにないキャリアの場合、現時点ではTwilioからSMSメッセージの送信はできません。
- 「To」電話番号の形式に誤りがあります。すべての「To」番号は、正しく送信するためにE.164形式(英語)を使用する必要があります。
ここに記載されていないエラーについては、2XXXX REST APIエラーの説明と問題の解決手順が「APIエラーと警告一覧(英語)」にあります。
"Failed"とマークされたメッセージ
「Failed」メッセージステータスは、Twilioからメッセージが送信できなかったことを示します。「Failed」メッセージはTwilioプラットフォームから送信されていないため課金はされません。このステータスは、下記の「Undelivered」ステータスとは異なります。
最も一般的な「Failed」メッセージの理由:
- Error 30001 "Queue overflow:"Twilio番号または送信者が使える最大キュー長を超えたか、キュー内のメッセージの時間がAPIリクエストに指定したValidityPeriodを超えています。
- Error 30002 "Account suspended:"ご使用のTwilioアカウントが現在一時停止されています。例、アカウント資金が不足し、自動再チャージが設定されていない。アカウントが一時停止されている場合は、お手元にTwilioから一時停止理由のメールが届きます。Twilioアカウントに関連するメールの説明をご確認ください。
- (Twilio MMSメディアメッセージ固有)
- Error 11200, 11751, または 12300: これらのエラーは、TwilioがMMSメディアメッセージの送信用に指定されたMediaUrlからメディアの取得を試みるときに発生する問題を示しています。例えば、実際のファイルタイプとサーバーが返すContent-Typeヘッダーが一致しないとMMSメッセージの送信が失敗してエラー12300が出ます。
"Undelivered"とマークされたメッセージ
「Undelivered」メッセージステータスは、Twilioがメッセージの不達を伝える配信通知を受信したことを示します。メッセージのステータスとエラーコードをTwilioプロジェクトのProgrammable Messagingログで確認できます(ConsoleまたはREST APIを使用)。不達のメッセージは通常、30XXXエラーコードを返します。こちらは最も一般的な問題の例です。
Error 30005 "Message Delivery - Unknown destination handset": 宛先のキャリアからTo番号が不明であるか現在使われていない番号であることが報告されています。
Error 30005 "Message Delivery - Unknown destination handset": 宛先のキャリアから「To」番号が到達不能であると報告されています(デバイスが電源オフ、サービスエリア外、メッセージを受信不能)。
Error 30007 "Message Delivery - Carrier Violation" 宛先のキャリアによりメッセージがフィルターされ配信されませんでした。
Error 30008 "Message Delivery - Unknown error" 宛先のキャリアから一般エラーメッセージが返されました。
Error 30008 "Message Delivery - Unknown error": メッセージがブロックされて宛先に届きませんでした。
Error 30006 "Message Delivery - Landline or unreachable carrier": 宛先が固定回線であるか、宛先のキャリアに到達不能です。
メッセージングサービスを使用して送信するメッセージの場合、(上記のメッセージ送信APIリクエストにあげた)APIレベルのエラー以外のエラーは「Failed」メッセージレコードに分類されます。詳しくは、下記の「メッセージングサービスのエラー処理についての注」を参照してください。
ここに記載されていないエラーについては、30XXXメッセージングエラーの説明と問題の解決手順が「APIエラーと警告一覧(英語)」にあります。
"Sent" または "Delivered"とマークされたメッセージ
これらのメッセージステータスは、Twilioがメッセージの送信確認を受信したか、メッセージが届いた配信通知を受信したことを示します。この問題をトラブルシューティングするために、まず問題の再現を試みます。このユーザー宛にREST APIリクエスト(英語)を使用を使用してさらにテキストメッセージを送信します。特にリクエストを入念に調べ、メッセージを送信する電話番号に誤りがなく、正しい国際電話番号のフォーマット(E164)を使用していることを確認してください。同じ結果が得られたら、次のチェックリストに従いトラブルシューティングを続けます。
- Twilio Status Page(英語)でアクティブインシデントが問題の原因であるかを確認します。
- 宛先のデバイスは電源オンか?
- デバイスの信号強度は十分か? 信号強度不足の場合は、デバイスの電源をオフにして30秒待ち、再びオンにします。
- デバイスは国内キャリアネットワークに接続されているか? 国際ローミングやネットワーク外のデバイスへのメッセージ配信は保証されません。
- デバイスはTwilio以外のSMSを受信可能か?
- 別のTwilio番号(Twilio Programmable SMSにおける英数字送信ID)のメッセージ、または短い1セグメント(Twilioは連結されたSMSメッセージや160文字以上のメッセージをサポートしていますか?)の本文を含むメッセージを受信できるか?
- 同じモバイルキャリアを使う他のデバイスはメッセージを受信できるか?
上記の問題がすべて当てはまらない場合、Twilioサポートチームが'メッセージ不達の原因調査をサポートいたします。過去24時間に発生した問題のメッセージログからメッセージSIDを3件以上集めてサポートリクエストをご依頼ください。
メッセージングサービスのエラー処理についての注意事項
特定の「From」番号や送信者IDを渡さずにメッセージングサービスを使用してメッセージを送信する場合、いくつかのエラーについてTwilio APIの動作が若干異なります。特に2XXXXエラー(21610-配信停止中の相手への送信を試みた など)は、APIレベルのエラーとしては返されず、APIリクエストを受けた後に発生します。
このように動作が異なるのは、メッセージングサービスによるAPIリクエストの処理が効率的であるためであり、短時間に多くのAPIリクエストを送信できることによります。メッセージングサービスを使用したメッセージ送信リクエストでは、TwilioはAPIリクエストの初期確認をしてパラメーターが有効であることを確認します。Twilioのシステムにメッセージレコードが作成された後で、メッセージングサービスの送信者番号プールから最適な送信者を選ぶなどの完全な確認がなされます。
この違いを次の2つのシナリオで説明します。
シナリオ1 – 特定の送信者を「From」パラメーターで渡す:
APIリクエストで「From=MyCompany」のメッセージを米国の携帯番号宛「To」に送信します。MyCompanyは有効な英数字の送信者IDですが、この機能は米国のキャリアではサポートされません。TwilioのAPIリクエスト確認によりリクエストは失敗とされ、error 21612.と共にHTTP 400 Bad Request
が返されます。
APIリクエストが失敗するとメッセージレコードは作成されず、メッセージSIDを受け取ることはありません。
シナリオ2 – メッセージングサービスSIDを渡す:
メッセージングサービスを作成し、英数字の送信者ID「MyCompany」を送信者番号プールに追加します。プールにはTwilio電話番号は追加せず、英数字の送信者IDのみを追加します。
続いてメッセージングサービスSIDから米国携帯番号に送信するAPIリクエストを行います。これは有効なAPIリクエストであるため、Twilioで受け取るとHTTP 201 Created
が返されます。この応答に含まれるメッセージSIDを使用して、Twilio ConsoleかAPIによりメッセージを見つけることができます。
APIリクエストを受けたTwilioは、メッセージングサービスから送信者を選択します。追加されているのは英数字の送信者IDのみで、米国の携帯番号に到達できる送信者は追加されておらず、Twilioからメッセージを送信できません。メッセージレコードには「Failed」とマークされerror 21703(「メッセージングサービスにメッセージを送信できる電話番号が含まれていません」)がマークされます。
Twilioからこのステータス更新がステータスコールバックWebhookを通じて送られます(いずれかのメッセージングサービスが設定済みであるかAPIリクエストで提供されていることが前提)。
なお、「Failed」ステータスのメッセージは課金されず、HTTP 400を返すAPIリクエストも対象となりません。このため、これらの動作が異なる場合も料金に違いはありません。