🐥

LINE開発者向けドキュメントを一部読んだ

2023/11/23に公開

概要

開発で使いたいので、開発者向けの下記読んだサマリ。
今回はボットを作りたいだけなので、Messaging APIまで読む。
https://developers.line.biz/ja/docs/

内容

チャネルアクセストークン

  • チャネルアクセストークン: 権限を持つ。Messaging APIチャネルで使う
  • 4種類あるが、任意に設定できるものも1ヶ月。長期は無制限。
  • 長期はMessaging APIチャネルのみ。
  • ステートレスチャネルアクセストークンという超短期のものがある。1チャネルで大量に使う場合があるときは無制限なのでこれになりそう。
  • 任意の期間のアクセストークンのみJSON Web Tokenになる
  • 1チャネルに対する複数トークン運用は開発チームが分かれている際にそれぞれ使いたいときなど。個人開発であれば特に意識することはなさそう

LINE Developersコンソール

  • 開発者: LINE Developersコンソールにアクセスする人
  • プロバイダー: サービスを提供者。個人開発者であれば≒開発者。開発者ごとに最大10個まで作成可能。
  • 法人だと審査の上で認証プロバイダーになれる。安心をアピールできる。
  • チャネル: LINEプラットフォームと自作システムをつなぐ経路
  • チャネルの種類は、LINEログイン/Messaging API/ブロックチェーンサービス/LINEミニアプリの4種類
  • LINEコンソールにログインする際は個人のLINEアカウント or ビジネスアカウントがあるが、ブロックチェーンサービス以外は個人でも問題なくチャネルを使用できる
  • プロバイダーにはAdminとMember、権限なし(個別に権限カスタマイズ可能)の権限が存在。Memberはプロバイダー名/IDの閲覧のみ
  • チャネルには、Admin/Member/Tester/権限なしが存在。割愛。
    https://developers.line.biz/ja/docs/line-developers-console/managing-roles/#roles-for-channel

Messaging API

  • エンドポイントによって、リクエストするドメインが異なる: api-data.line.me or api.line.me
  • エンドポイント: LINEでのメッセージを取得したいといったやりたいことと思えば良さそう
  • チャネル単位かつエンドポイントのレート制限が存在。429 Too Many Requestsになる。
  • ステータスコードは割愛。
    https://developers.line.biz/ja/reference/messaging-api/#status-codes
  • レスポンスヘッダには、X-Line-Request-Id/X-Line-Accepted-Request-Id(Optional)が存在。リクエストを識別するID
  • エラーレスポンスはjson。detailsはOptional
{
  "message": "The request body has 2 error(s)",
  "details": [
    {
      "message": "May not be empty",
      "property": "messages[0].text"
    },
    {
      "message": "Must be one of the following values: [text, image, video, audio, location, sticker, template, imagemap]",
      "property": "messages[1].type"
    }
  ]
}
  • Webhook URL: LINEでは友だち追加やメッセージの送信のようなイベントを受け取りたいときに、コンソールで設定可能なurl。LINEプラットフォームからPOSTされてくる。
  • LINEプラットフォームのIPアドレスはセキュリティ上非開示なので、ip許可できないので、署名(x-line-signature)の検証する
    https://developers.line.biz/ja/reference/messaging-api/#signature-validation
  • Webhookイベントオブジェクトは下記
{
  "destination": "xxxxxxxxxx",
  "events": [
    {
      "type": "message",
      "message": {
        "type": "text",
        "id": "14353798921116",
        "text": "Hello, world"
      },
      "timestamp": 1625665242211,
      "source": {
        "type": "user",
        "userId": "U80696558e1aa831..."
      },
      "replyToken": "757913772c4646b784d4b7ce46d12671",
      "mode": "active",
      "webhookEventId": "01FZ74A0TDDPYRVKNK77XKC3ZR",
      "deliveryContext": {
        "isRedelivery": false
      }
    },
    {
      "type": "follow",
      "timestamp": 1625665242214,
      "source": {
        "type": "user",
        "userId": "Ufc729a925b3abef..."
      },
      "replyToken": "bb173f4d9cf64aed9d408ab4e36339ad",
      "mode": "active",
      "webhookEventId": "01FZ74ASS536FW97EX38NKCZQK",
      "deliveryContext": {
        "isRedelivery": false
      }
    },
    {
      "type": "unfollow",
      "timestamp": 1625665242215,
      "source": {
        "type": "user",
        "userId": "Ubbd4f124aee5113..."
      },
      "mode": "active",
      "webhookEventId": "01FZ74B5Y0F4TNKA5SCAVKPEDM",
      "deliveryContext": {
        "isRedelivery": false
      }
    }
  ]
}
  • 今回はユーザーのメッセージは関係なく、一方的に情報を送り付けたい。応答メッセージの場合は、応答トークンを前述のWebhookから取得する
  • 任意のタイミングでメッセージを送りたいときは、プッシュメッセージを使用する
    ただし、誰でも送れるわけではない。条件は下記。ブロックされているときといった場合は、サーバーとしては送れなくても200が返ってくるので注意。
LINE公式アカウントを友だち追加しているユーザー
LINE公式アカウントが参加しているグループトーク、または複数人トーク
1対1のトークで、7日以内にLINE公式アカウントへメッセージを送ったユーザー

https://developers.line.biz/ja/reference/messaging-api/#messages

curl -v -X POST https://api.line.me/v2/bot/message/push \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer {channel access token}' \
-H 'X-Line-Retry-Key: {UUID}' \
-d '{
    "to": "U4af4980629...",
    "messages":[
        {
            "type":"text",
            "text":"Hello, world1"
        },
        {
            "type":"text",
            "text":"Hello, world2"
        }
    ]
}'

Discussion