20
3

More than 1 year has passed since last update.

LINE Messaging APIのreplyTokenは何秒で無効になるのかを検証【2022年6月時点】

Posted at

はじめに

LINE Messaging API で応答メッセージを送るために必要な replyToken には有効期限があります。
以前は、以下の記事に記載の通りリファレンスには

応答できるイベントには応答トークンが発行されます。 応答トークンは一定の期間が経過すると無効になるため、メッセージを受信したらすぐに応答を返す必要があります。

と書かれており、実験的に30秒有効と判断されていました。
(自分も1年ほど前に必要があって同様の調査を行い、その時点では30秒であることを確認していました。)

ところが最近、改めてリファレンスを確認したところいつの間にか

応答トークンは、Webhookを受信してから1分以内に使用する必要があります。1分を超える場合の使用については、動作は保証されません。

のような表現に変わっていました。

本当に30秒以上有効となっているのか、「1分を超える場合の使用については、動作は保証されません。」とあるが実際はどの程度使えるのかが気になったので、本記事で検証します。

検証方法

お手軽に検証したいので今回はGASを利用してWebhookイベントを受信し、指定秒数スリープしたうえで応答メッセージを送信します。

//LINE Developersコンソールで取得したアクセストークンを入れる
const CHANNEL_ACCESS_TOKEN = 'YOUR_CHANNEL_ACCESS_TOKEN';

// Sleepする秒数
const SLEEP_SEC = 60

function doPost(e) {
  // Webhookイベントオブジェクトを取得
  const webhookEvent = JSON.parse(e.postData.contents);

  // 検証のためにSleepを入れる
  Utilities.sleep(SLEEP_SEC * 1000);

  // イベントを処理する
  for (const event of webhookEvent.events) {
    // メッセージだけ処理する
    const type = event.type;
    if (type !== 'message') {
      continue;
    }

    // 応答トークンとメッセージテキストを取得
    const replyToken = event.replyToken;

    // メッセージを返信    
    UrlFetchApp.fetch('https://api.line.me/v2/bot/message/reply', {
      'headers': {
        'Content-Type': 'application/json; charset=UTF-8',
        'Authorization': `Bearer ${CHANNEL_ACCESS_TOKEN}`,
      },
      'method': 'post',
      'payload': JSON.stringify({
        'replyToken': replyToken,
        'messages': [{
          'type': 'text',
          'text': `${SLEEP_SEC}秒待機`,
        }],
      }),
    });
  }

  return 'ok';
}

結論

5分以上使えたが、GASのタイムアウトに引っかかって本当の上限は分からなかった。。。

以下、検証内容です。

まず1分以上使えるかですが、これはあっさりクリアしました。

image.png

次に上限を調べるために待機時間を増やしてみました。
600秒で応答がなかったのでおっと思ったのですが、これはGASのタイムアウト6分に引っかかっているだけでした。。。

image.png

本当に上限を調べたかったら、GASではなくちゃんとサーバーを立てて検証した方が良さそうです。

まとめ

応答トークンの有効期限は本当に30秒以上に伸びていました。
今回の検証では本当の失効期限は分かりませんでしたが、基本的にはリファレンスに記載の通り1分以内に利用するのが良さそうです。

20
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
3