LINEでメッセージをやり取りするBot開発の手順について紹介していきます。
本記事では、LINE Developerへの登録から、Hello World
メッセージを送るまでの流れについて説明します。
今や国民的SNSとして知られるLINEですが、ビジネス用の公式アカウントも増え、直接消費者へアプローチする手段としての一角を担い始めています。IT業界でも今後、BotやAPIを通じたサービスの開発のニーズは増えてくるのではないでしょうか。
LINE 公式アカウントの作成
LINEのBot開発の前提として、個人アカウントとは別のLINEアカウントが必要です。今回は、せっかくなので本ブログの管理人の公式アカウント作成を兼ねて、Line Business の LINE公式アカウント
を利用してみます。
当然(?)、フリープランを利用します。
※Botの作成に公式アカウントは必ずしも必須ではありません。作成しない場合はこの手順をスキップし、次章「LINE Developer への登録」から進めてください。
(画像出典:LINE for Business 公式ページ)
毎月送信できるメッセージの上限は1000通ですが、個人利用であれば十分でしょう。 また、追加メッセージの従量課金も不可のため、プランを切り替えない限り無料で利用し続けることができます。
以下のページから、[未認証アカウントを開設する] をクリックします。
(画像出典:LINE for Business 公式ページ)
登録ページのリンクは こちら 。
お使いのLINE個人アカウントの認証と、公式アカウントの必要情報の入力を行います。
今回は個人利用なので、以下のように登録してみます。
※この時点で、認証した個人LINEに自動的に友達追加されます。
ここからは、LINE Official Account Manager
で詳細を設定していきます。
画像の [LINE Official Account Managerへ] をクリックします。
プロフィールは [設定] から、友だち追加時の最初のメッセージは [あいさつメッセージ] からそれぞれ設定できます。
LINE Developer への登録
「メッセージの送信」はLINEの Messaging API
を利用するため、LINE Developerへの登録が必要です。
Messaging API
はサービスとLINEユーザーの双方向コミュニケーションを可能にする機能で、サービスから任意のタイミングでメッセージを送信する「Push」と、ユーザのコメントに対して応答する「Reply」があります。リクエストは、JSON形式でHTTPSを使って送信され、LINE Platform を介してBotとサービスをつなぎます。
(公式ページ) Messaging API
上記リンクから、[今すぐはじめよう] ボタンをクリックします。
メールアドレスだけでも登録することはできますが、後々の工程を踏まえてアカウントでログインしておきましょう。 ご自身のメールアドレス/パスワードもしくはQRコードによるログインができます。
ユーザ名/メールアドレス を入力し、[Create Account] をクリックすれば登録完了です。
Provider の作成
LINE Official Account Manager
で作成する方法と、そのまま LINE Developer
で作成する方法があります。
前者のLINE Official Account Manager
で作成する方法では、[設定] - [Messaging API] から作成します。
以下の画像をご参照ください。
(※1) ポリシーURLは後で編集できます。
(※2) この手順を踏んだ場合は、Channelも併せて作成されます。
後者のLINE Developer
で作成する方法では、次章の Channel の作成
の手順と併せて実施します。
以下の画像のように、Channel 作成時に既存の Provider を選択するか、[Create a new provider] から新規作成を行います。
Channel の作成
LINEの Messaging API
を利用するには、LINE Platform と サービスをつなぐための専用のChannel(チャネル)が必要です。
(画像出典:LINE Developer 公式ページ)
「LINE 公式アカウントの作成」
の章でアカウントを作成し、「Provider の作成」
の章でLINE Official Account Manager
からProviderを作成した場合は、自動的にChannelまで作成されるので本章の手順は不要です。
LINE Developer
の [Create a channel] から作成します。Channel名など必要情報を入力し、[Create] で作成完了です。
LineBot の実装
ここからはローカルでの実装に移ります。 様々なSDKが提供されているので、お好きな言語で実装すればいいのですが、今回はサクッとNode.js で作ってみます。
$ mkdir ShibainuLineBot
$ cd ShibainuLineBot
任意のディレクトリを作成します。
$ npm init -y
Node.js の管理ファイルである package.json
を作成します。
こんな感じの文言が表示されるはずです。
{
"name": "ShibainuLineBot",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}
Node.js の SDK を使って、サクッとひな型を作ります。
$ npm i @line/bot-sdk express
コマンドが完了したら、エディタで同階層に server.js
を作成します。
中身はこんな感じ。
'use strict';
const express = require('express');
const line = require('@line/bot-sdk');
const port = 3000;
const settings = {
//Line DeveloperのChannelの基本情報から確認
channelSecret: '1874e72007879b50c0b61ca9062dd06b',
//Line DeveloperのChannelの[Messaging API設定]-[チャネルアクセストークン]から発行
channelAccessToken: 'ilYmWTxUaVAWVe4zdqPe9WBJu8aQ68ASLpYJOxY+Q9InxABgCL4nB2Ygy6zZV8WPOKDfdYAXltU4GHLaTs+HjSNIYhP11skUO9ZTEE9zvrWC8VTmN6S9EJZJZEAj8voWsVPSfroeWSFiTaqrnQQnIwdB04t89/1O/w1cDnyilFU='
};
const client = new line.Client(settings); //Linebot用のClient作成
const app = express();
app.post('/callback', line.middleware(settings), (req, res) => {
// 今回は雑にリプライだけにします
Promise.all(req.body.events.map(replyEvent)).then((result) => res.json(result));
});
async function replyEvent(event) { //メッセージの応答なので非同期でね
return client.replyMessage(event.replyToken, {
type: 'text',
text: 'Hello World!' //ここは好きな文言を入れればOK
});
}
// 実行時処理
app.listen(port);
console.log('Server running at localhost:${port}');
ChannelSecretの確認とアクセストークンの発行は、Line Developer
のチャネル設定から行えます。
$ node server.js
Node.js を実行します。ポート3000 で起動したというログが表示されると思います。
ローカルサーバーのSSL対応
本来であれば何かしらのサーバーにデプロイして動作させますが、面倒なので、今回はローカルサーバーに外部からアクセスできるようにする仕組みです。ただし、セキュリティ的な観点ではよろしくないので、今回は Hello World の確認の後は停止させます。
仮にも公式アカウントなので(笑) 実運用の際には Heroku などを使いましょう。
ローカルサーバーを外部から利用するには、この辺りが有名なサービスです。
ngrok
$ npm install -g ngrok
Node.js はポート3000 で動作しているため、以下のコマンドで3000をトンネリングします。
$ ngrok http 3000
ランダムに生成されるドメインのURIを取得します。
localtunnel
$ npm install -g localtunnel
How To Use は こちら から確認。
$ lt --port 3000 --subdomain shibainulinebot
これで、https://shibainulinebot.localtunnel.me/
にアクセス可能になります。
筆者の場合
実は環境依存なのか、上記2種類のトンネリングがエラーで失敗してしまいました。 世の中一般的にはどちらかで問題ないと思うのですが、一応私のワークアラウンドとしては ngrok を直接ダウンロードして、exeを叩いて実行しました。
exe を実行するとコマンドプロンプトが立ち上がるので、
$ ngrok http 3000
を実行すると、今度は成功しました。
Webhookの設定
LINE Developer
に戻り、Channel 情報の [Messaging API設定]-[Webhook設定] で以下のように設定します。
- Webhook URL:ローカルトンネリングサービスで指定したサブドメイン込みのURL + ‘/callback’
- Webhookの利用 :オン
念のため、[LINE公式アカウント機能]で
- 応答メッセージ:オフ
にもしておきます。
メッセージの確認
やっとこさ、Hello World
にこぎつけました!
最後に
LINE Bot の第一段階クリアです。ここからどんなサービスが提供できるのか、アーキテクチャーをどうするのか、など色々思案していこうと思います。このアカウントはフリープランなので、遊び半分で負荷テストとかしないでくださいね(土下座)
では、最後までお読みいただきありがとうございました。