LINE

Messaging API

Overview

Overview > 仕組み

LINE

Platform

 

System

Bot Server

action

POST : /webhook/url

webhook

Messaging Client

Message

DB

Overview > メッセージの種類

Overview > Webhookイベントの種類

Overview > Messaging APIの料金

フリープラン ライトプラン スタンダードプラン
月額固定費 無料 5,000円 15,000円
無料メッセージ通数 1,000通 15,000通 45,000通
追加メッセージ料金 追加不可 5円 ~3円
(多いと割引が効く)

2021/02/15現在

むやみに送りすぎるとお金がかかる

1000人に2通送ればカウント2000

Usage

Usage > Messaging APIを用意する

  1. LINE Developerに登録/ログインする
  2. Providerを作る
  3. Channelを作る

MessagingAPIはChannelに属する

Usage > Messaging APIを用意する

2.Providerを作る

Usage > Messaging APIを用意する

3.Channelを作る

Channel=トークルームというわけではない

Usage > Messaging APIを用意する

3.Channelを作る

トークルームも一緒に作られる

QRを読めば友達登録できる

Usage > Messageを配信する 

必要な情報

  • User ID
  • Channel Access Token 
  • Reply Token (Replyメッセージ)

User IDはProvider, LINEユーザアカウント毎に一意

User IDはスマホLINE上で見れるIDとは別物

UserIDとReplyTokenはWebhookリクエストから取得できる

Channel Access TokenはDevelopers Consoleから確認可能

System

Bot Server

DB

'use strict';
const line = require('@line/bot-sdk');
const express = require('express');

const CHANNEL_ID = "";
const CHANNEL_SECRET = "";
const CHANNEL_ACCESS_TOKEN = "";

var config = {
  channelId: CHANNEL_ID,
  channelSecret: CHANNEL_SECRET,
  channelAccessToken: CHANNEL_ACCESS_TOKEN
};

const client = new line.Client(config);
const app = express()

// register a webhook handler with middleware
// about the middleware, please refer to doc
app.post('/callback', line.middleware(config), (req, res) => {
  Promise
    .all(req.body.events.map(handleEvent))
    .then((result) => res.json(result))
    .catch((err) => {
      console.error(err);
      res.status(500).end();
    });
});

// event handler
function handleEvent(event) {
  if (event.type !== 'message' || event.message.type !== 'text') {
    // ignore non-text-message event
    return Promise.resolve(null);
  }

  // create a echoing text message
  const echo = { type: 'text', text: event.source.userId };

  // use reply API
  return client.replyMessage(event.replyToken, echo);
}

// listen on port
const port = process.env.PORT || 3000;
app.listen(port, () => {
  console.log(`listening on ${port}`);
});

何か発言されたらその人のUser IDを返すWebhookハンドラ

Usage > Messageを配信する 

LINE

Platform

 

POST : /callback

webhook

Messaging Client

Usage > Messageを配信する 

ProviderとLINE ユーザ

アカウント毎に一意なID

Pushメッセージなど送る時に使用する。

流出すると悪用される恐れがあるため、

DBで管理する場合は暗号化しておいた方が良い。

  // create a echoing text message
  const echo = { type: 'text', text: event.source.userId };

Usage > Messageを配信する 

Webhook URLはDevelopers Consoleから設定可能

Usage > Messageを配信する 

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

curlでメッセージ配信リクエストも送れる

動作確認などでさくっと試したい時に便利

Development

          Case Example

Case Example > バースデーメッセージ

LINE

Platform

 

Spring

Batch

・誕生日のユーザのUser ID

・Channel Access Token

・メッセージのテンプレート

 

cron

起動

RDS

EC2 バッチサーバ

"HAPPY BIRTH DAY!"

+ 動画

[
  {
    "type": "text",
    "text": "HAPPY BIRTH DAY!"
  },
  {
    "type": "imagemap",
    "baseUrl": "https://hogehoge/birthday",
    "altText": "お誕生日おめでとうございます!",
    "baseSize": {
      ...
    },
    "video": {
      "originalContentUrl": "https://hogehoge/birthday_movie.mp4",
      "previewImageUrl": "https://hogehoge/birthdat_movie_preview.png",
      "area": {
         ...
      }
    },
    "actions": [
      {
           ...
]

S3

動画コンテンツ,

プレビュー画像の取得

Messaging Client

Case Example > チャンネルブロック/

           ブロック解除対応

LINE

Platform

 

API

Server

RDS

チャンネルブロック

チャンネルブロック解除

アンフォローイベント

フォローイベント

ECS Fargate

Webhook

アンフォローフラグを立てる

アンフォローフラグを外す

アンフォローフラグが立っているユーザはバッチ処理の対象から外す

API Document

 

LINE

By shoki

LINE

  • 495