【LINE】分析系の Messaging API を叩いてみる
吉川@広島です。
LINE Messaging API というとお知らせ通知や自動返信といったメッセージ送信 API のイメージが強いかと思いますが、例えば送信したメッセージについてどれくらい反応があったのかというような分析系のAPIも存在しています。
本記事ではこれらの分析 API を叩いてみた結果を共有したいと思います。
環境
- Node.js 14.x
- TypeScript 4.1.3
- line-bot-sdk-nodejs 7.2.0
- REST Client 0.24.5
VSCode REST Client
本記事では API クライアントとして VSCode プラグインの REST Client を使っています。
REST Client については下記などご参考下さい。
[VSCode] REST Client は変数を使うとAPIの環境やパラメータ変更が楽になる!
Channel Access Token
各 API を叩くのに必要なチャネルアクセストークンは LINE Developers にて チャネル選択→「Messaging API設定」→「チャネルアクセストークン」より取得 が可能です。
本記事では検証用チャネルを作成して実施しました。
メッセージの送信数を取得する
リクエスト
GET https://api.line.me/v2/bot/insight/message/delivery?date={DATE} Authorization: Bearer {CHANNEL_ACCESS_TOKEN}
{DATE}
に 20210416
のような形式で日付を渡します。
レスポンス
{ "status": "ready", "autoResponse": 15, "welcomeResponse": 1, "apiReply": 1 }
status
が ready
以外の場合は別の有効な必要を指定する必要があります。
ready:メッセージ数を取得できます。
unready:dateに指定した日付のメッセージ数の集計がまだ完了していません。しばらくしてからリクエストを再実行してください。通常、集計処理は翌日中に完了します。
out_of_service:dateに指定した日付が、集計システムの稼働開始日(2017年03月01日)より前です
友だち数を取得する
リクエスト
GET https://api.line.me/v2/bot/insight/followers?date={DATE} Authorization: Bearer {CHANNEL_ACCESS_TOKEN}
{DATE}
に 20210416
のような形式で日付を渡します。
レスポンス
{ "status": "ready", "followers": 1, "targetedReaches": 1, "blocks": 0 }
友達は私一人だけなので、意図通りの値が返ってきていますね。
友だちの属性情報に基づく統計情報を取得する
リクエスト
GET https://api.line.me/v2/bot/insight/demographic Authorization: Bearer {CHANNEL_ACCESS_TOKEN}
レスポンス
{ "available": false, "genders": [], "ages": [], "areas": [], "appTypes": [], "subscriptionPeriods": [] }
available
が false
になっていますが、これは以下によるものと思われます。
また、統計情報を表示するには20人以上のターゲットリーチが必要です。
検証用のプロジェクトで私一人しかユーザがおらず、上記を満たしていないからですね。
ユーザーの操作に基づく統計情報を取得する
下準備 (ブロードキャストメッセージを送信)
LINE公式アカウントから送信したナローキャストメッセージまたはブロードキャストメッセージに対して、ユーザーがどのように操作したかを示す統計情報を確認できます。
ということなので、分析対象となるナローキャストメッセージかブロードキャストメッセージを送信する必要があります。今回はブロードキャストメッセージを送信することにします。
line-bot-sdk-nodejs
を使った以下の TypeScript コードを書きました。
import { Client, LINE_REQUEST_ID_HTTP_HEADER_NAME } from '@line/bot-sdk' const main = async () => { const client = new Client({ channelAccessToken: process.env['LINE_CHANNEL_ACCESS_TOKEN'] as string, }) const broadcastResult = await client.broadcast({ type: 'text', text: 'hello', }) console.log( 'broadcast requestId: ', broadcastResult[LINE_REQUEST_ID_HTTP_HEADER_NAME] ) } main()
実行前に下のように LINE_CHANNEL_ACCESS_TOKEN
環境変数をセットしておきます。
export LINE_CHANNEL_ACCESS_TOKEN={CHANNEL_ACCESS_TOKEN}
その後、トランスパイルして実行すると
broadcast requestId: xxxxxxxxxxxxxxxxxxxxxxx
とリクエスト ID を得られるので、これを控えておきます。
リクエスト
GET https://api.line.me/v2/bot/insight/message/event?requestId={REQUEST_ID} Authorization: Bearer {CHANNEL_ACCESS_TOKEN}
{REQUEST_ID}
に先程取得したリクエスト ID を渡します。
レスポンス
{ "overview": { "requestId": "{REQUEST_ID}", "timestamp": 1618822800, "delivered": 1, "uniqueImpression": null, "uniqueClick": null, "uniqueMediaPlayed": null, "uniqueMediaPlayed100Percent": null }, "messages": [], "clicks": [] }
uniqueClick
などの値が null なのは、以下によるものと思われます。
またプライバシーを保護するため、次のような場合、個人の操作に関するプロパティの値はnullになります。
プロパティの値が20未満だった場合
プロパティの値が20以上であっても、そのイベントを発生させた実人数が20人未満だった場合(たとえばmessages[].mediaPlayedは30だが、messages[].uniqueMediaPlayedが15だった場合は、どちらの値もnullになります)
たしかに、クリックした人数があまりに少ない場合、具体的に誰のことか予測できてしまう場合があるのかもしれません。
まとめ
今回は検証用チャネルを使っており、ユーザがいない & 実践的な送信メッセージがないのであまり面白い数値は得られていません。しかしドキュメントを見て頂くとわかるようにデータがしっかりある場合はかなり色々な項目を得ることができます。
以上、参考になれば幸いです。