All Articles

LINE Bot で Hello World を行うまで

LINEでメッセージをやり取りするBot開発の手順について紹介していきます。 本記事では、LINE Developerへの登録から、Hello World メッセージを送るまでの流れについて説明します。

今や国民的SNSとして知られるLINEですが、ビジネス用の公式アカウントも増え、直接消費者へアプローチする手段としての一角を担い始めています。IT業界でも今後、BotやAPIを通じたサービスの開発のニーズは増えてくるのではないでしょうか。

cloud-service

LINE 公式アカウントの作成

LINEのBot開発の前提として、個人アカウントとは別のLINEアカウントが必要です。今回は、せっかくなので本ブログの管理人の公式アカウント作成を兼ねて、Line Business の LINE公式アカウント を利用してみます。

当然(?)、フリープランを利用します。

※Botの作成に公式アカウントは必ずしも必須ではありません。作成しない場合はこの手順をスキップし、次章「LINE Developer への登録」から進めてください。

line-developer-plan (画像出典:LINE for Business 公式ページ)

毎月送信できるメッセージの上限は1000通ですが、個人利用であれば十分でしょう。 また、追加メッセージの従量課金も不可のため、プランを切り替えない限り無料で利用し続けることができます。

以下のページから、[未認証アカウントを開設する] をクリックします。 line-business-official (画像出典:LINE for Business 公式ページ)

登録ページのリンクは こちら

お使いのLINE個人アカウントの認証と、公式アカウントの必要情報の入力を行います。 今回は個人利用なので、以下のように登録してみます。 line-business-account line-business-account-complete

※この時点で、認証した個人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

上記リンクから、[今すぐはじめよう] ボタンをクリックします。

line-business-register

メールアドレスだけでも登録することはできますが、後々の工程を踏まえてアカウントでログインしておきましょう。 ご自身のメールアドレス/パスワードもしくはQRコードによるログインができます。

line-developer-account

ユーザ名/メールアドレス を入力し、[Create Account] をクリックすれば登録完了です。

Provider の作成

LINE Official Account Manager で作成する方法と、そのまま LINE Developer で作成する方法があります。

前者のLINE Official Account Manager で作成する方法では、[設定] - [Messaging API] から作成します。 以下の画像をご参照ください。 line-official-account-manager-messaging-api line-messaging-api-provider1 line-messaging-api-provider2 (※1) ポリシーURLは後で編集できます。 (※2) この手順を踏んだ場合は、Channelも併せて作成されます。

後者のLINE Developer で作成する方法では、次章の Channel の作成 の手順と併せて実施します。

以下の画像のように、Channel 作成時に既存の Provider を選択するか、[Create a new provider] から新規作成を行います。 line-messaging-api-provider3

Channel の作成

LINEの Messaging API を利用するには、LINE Platform と サービスをつなぐための専用のChannel(チャネル)が必要です。 line-developer-create-channel (画像出典:LINE Developer 公式ページ)

「LINE 公式アカウントの作成」の章でアカウントを作成し、「Provider の作成」の章でLINE Official Account Manager からProviderを作成した場合は、自動的にChannelまで作成されるので本章の手順は不要です。

LINE Developer の [Create a channel] から作成します。Channel名など必要情報を入力し、[Create] で作成完了です。

LineBot の実装

ここからはローカルでの実装に移ります。 様々なSDKが提供されているので、お好きな言語で実装すればいいのですが、今回はサクッとNode.js で作ってみます。

(参考)LINE Messaging API SDK

$ 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 のチャネル設定から行えます。 line-messaging-api-token

$ 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を叩いて実行しました。

Ngrok Download

exe を実行するとコマンドプロンプトが立ち上がるので、

$ ngrok http 3000

を実行すると、今度は成功しました。

Webhookの設定

LINE Developer に戻り、Channel 情報の [Messaging API設定]-[Webhook設定] で以下のように設定します。

  • Webhook URL:ローカルトンネリングサービスで指定したサブドメイン込みのURL + ‘/callback’
  • Webhookの利用 :オン

line-messaging-api-webhook

念のため、[LINE公式アカウント機能]で

  • 応答メッセージ:オフ

にもしておきます。

メッセージの確認

line-messaging-api-helloworld

やっとこさ、Hello World にこぎつけました!

最後に

LINE Bot の第一段階クリアです。ここからどんなサービスが提供できるのか、アーキテクチャーをどうするのか、など色々思案していこうと思います。このアカウントはフリープランなので、遊び半分で負荷テストとかしないでくださいね(土下座)

では、最後までお読みいただきありがとうございました。