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を用意する
- LINE Developerに登録/ログインする
- Providerを作る
- 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
- 879