通知メッセージがユーザーに届いたかどうか知りたい
配信予約を行った通知メッセージが実際にユーザーまで届いたかどうかは、API を利用して確認します。
通知メッセージがユーザーまで到達したか否かを判定するためには、LINE Messaging API の Webhook 設定が必要です。
Webhook の設定方法については下記を参考にしてください。
Webhook URLを設定する | LINE Developers
通知メッセージ送信結果の取得
LINE Webhook の設定が済んだ状態で、ソーシャルPLUS の通知メッセージ送信結果の取得 API を使用します。
この API を使うことで、通知メッセージが届かなかったユーザを検知し、メールや SMS での通知に切り替えるといった対応を行うことができます。
詳しい判定内容は 通知メッセージ送信結果の取得 API のレスポンスパターン を確認してください。
$.result.status
は後方互換のためのパラメータです。通知メッセージの送信結果を取得する機能を新規で実装される場合は $.result.detail.status
の値のみを取得してください。
通知メッセージがユーザーに届かない理由
通知メッセージがユーザーに届かない理由は下記の5つです。
- 送信対象として指定した電話番号が LINE 側に存在しない
- 対象ユーザーが通知メッセージの受信をオプトアウト(拒否)している
- 対象ユーザーは通知メッセージのサービス対象国に属していない
- 対象ユーザーが公式アカウントをブロックしている
- 対象ユーザーが電話番号の SMS 認証を行っていない
これらの未達を判別する方法は、以下のとおりです。
1〜3 の理由で未達の場合
通知メッセージ送信結果の取得 API のレスポンスパターンの表をご確認ください。
1〜3 の理由で未達の場合は、レスポンス $.result.detail.status
の値が failed
(LINE への配信リクエストに失敗)となります。
この failed
レスポンスは LINE からソーシャルPLUS へ即時応答されます。
すなわち通知メッセージ送信リクエスト後、通常は数秒でこのレスポンスを得ることが可能です。
4, 5 の理由で未達の場合
4 もしくは 5 の理由で通知メッセージが届かない場合、LINE Webhook の仕様上 incompleted
(ユーザに配信失敗)が確定するのは 配信リクエストをしてから 24 時間後です。
completed
(ユーザに配信済み)は実際に配信された際に即時確定します。
それまでは delivered
の状態が続きます。
$.result.status | $.result.detail.status | 状態 |
---|---|---|
success | delivered | LINE へ配信リクエスト済み |
success | completed | (LINE Webhook 利用時のみ応答可)ユーザに配信済み |
success | incompleted | (LINE Webhook 利用時のみ応答可)ユーザに配信失敗 |
つまり $.result.detail.status
の値は delivered
から、completed
や incompleted
へと時間の経過とともに変化します。
配信失敗が確定する 24 時間以内に、ユーザーが公式アカウントのブロックを解除したり、電話番号の SMS 認証を済ませることで、通知メッセージを受け取ることができるようになります。その場合は、最終的に通知メッセージが配信され completed
(ユーザに配信済み)になります。
必ずしも incompleted
(ユーザに配信失敗)の結果が得られるまで 24 時間待つ必要はありません。
ご利用要件によって、たとえば 6 時間で completed
(ユーザに配信済み)にならなければ失敗と見なし、別の方法でメッセージを送信するといった運用も考えられます。この待機時間については案件に応じて決定してください。
具体例
通知メッセージの送信リクエスト後、任意の時間待機した後に通知メッセージ送信結果の取得 API へリクエストを送り、 $.result.detail.status
の値を取得します。
取得した値から通知メッセージの未達を判断します。
$.result.status | $.result.detail.status | 状態 |
---|---|---|
success | delivered | 現状はまだ届いていない。時間経過により別の配信方法に切り替えることができる |
success | completed | ユーザが通知メッセージを閲覧できる状態になっている |
success | incompleted | delivered 状態が 24 時間続いた。配信済みの通知メッセージが届くことはない |
failed | failed | 1〜3 の理由で届かない。別の配信方法に切り替える |
問題なく通知メッセージが到達する多くのユーザは、通知メッセージ送信のリクエストから数秒で $.result.detail.status
が completed
(ユーザに配信済み)に変わります。
値が delivered
(LINE へ配信リクエスト済み)だった場合は、任意の待機時間以降は届いていないものと割り切った上で別の配信方法に切り替えるなども一つの方法です。
もちろん 24 時間待って、incompleted
(ユーザに配信失敗)に変わったのを確認してから別の配信方法に切り替えていただくことも可能です。