AWS と LINE を連携させてbotを作ってみよう・準備編

概要

LINEでメッセージを送った後、自動的に返答してもらうことができます。

例えば、LINEで「今日の天気は?」と発言すると
「晴れです。」と自動的に返答が来るような機能を作ることができます。
この返答する人物をbotと呼んでいます。

 

使用する物は次の通りです。
・LINE(Android, iPhone, Windows, Mac どれでもOK)
・(AWS) Amazon Api Gateway
・(AWS) Amazon Lambda
・(AWS) IAM
・Node.js

事前に準備する物は次の通りです。
・LINEアカウント
AWSのアカウント

完成時のデータフローは次の通りです。

 

1.LINEでbotに対して発言した言葉はユーザー情報と共に、LINEサーバーへ届きます。
2.LINEサーバーは発言内容やユーザー情報に"トークン"を付与し、
REST APIを提供しているサーバー(今回はAPI Gateway)へPOSTリクエストします。
3.API Gatewayは何も考えずLambdaへリクエストを流します。
4.LambdaはIAMにログ出力等の実行権限があることを確認し、処理を行います。
5.Lambdaが天気予報のサーバーへPOSTやGETでリクエストを行い、天気予報の情報をもらいます。
6.LambdaがLINEサーバーへ天気予報の情報と"トークン"をまとめて発言します。この段階ではまだ発言されません。
RDBでいうところの「insertはしたけどcommitしていない状態」に近いです。
7.Lambda -> API Gateway -> LINEサーバーへとHTTP STATUS 200を送ります。
ここでやっと発言されます。commitした状態です。
HTTP STATUS 200以外を返した場合、発言されません。rollbackした状態になります。

最初は色々と準備が必要です。以下に沿って準備してみましょう。

 

LINE@アカウントの作成

LINEアカウントに紐づけるLINE@アカウントを作成します。
LINEのアカウント等は次の構成で成り立っています。

LINEアカウント…電話番号を使用して取得するアカウント。
└ LINE@アカウント
└ channel, bot

親子関係で1対Nになっているため、LINEアカウント以外は複数ぶら下げることができます。

LINE@のサイトでアカウントを作成します。
http://at.line.me/

 

アカウントを作成するとLINE @MANAGERという管理画面が開きます
"アカウント一覧"から作成したアカウントを選びます

 

"アカウント設置" > "Messaging API設定" > "LINE Developers で設定する" と進んでいきます

 

 

Webhook送信を「利用する」に設定します
アクセストークン(ロングターム)の「再発行」を押して、アクセストークンを生成します。

 

 

LINE@のサイトからLINE Developersを開き、設定をしましたが、
GoogleからLINE Developersを検索し飛んで来た場合、Messaging APIの設定で「予期せぬエラーが発生しました。」と出て詰みます。
以前はLINE@のサイトでMessaging APIの権限設定が出来ましたが、LINE Developersへ統一した際にデグレしているようですので注意してください。

 

AWS Lambda の準備

Lambda を使用してbotの処理内容を作ります
Lambda を管理コンソールで開き、”関数の作成”を行います

 

”一から作成”を選びます。
テンプレートを選択して、必要な部分だけ残して不要な処理を削ることもできるため、Node.js であればどれを選択しても大丈夫です。

 

“名前”は管理用の名前なので好きな物を入力してください。
ロールに“カスタムロールの作成”選択するとロールを作成する画面が開きます。

 

“IAMロール”は”新しいIAMロールの作成”
“ロール名”は管理用なので好きな名前を入力
“ポリシードキュメント”に具体的な権限を設定しますが、とりあえずデフォルトで処理できるので、そのまま進みます

 

“関数の作成”を押して進みます。

 

Lambda の殼だけですが、とりあえずできました。

 

 

Node.js の準備

ローカルでnode.jsが使えるようにNode.jsをインストールします。
外部モジュールが不要なLambdaの処理なら、この手順は不要なのですが、
今回は@LINE bot-sdkを使用するため必要になって来ます。

Node.js の公式サイトにインストーラーがあるのでインストールしてください。
https://nodejs.org/ja

 

注意点としては AWS Lambda の Node.js とバージョンを合わせてください。
現在は Node.js 6.10 が Lambda で使用できるので MACの場合は node-v6.10.0.pkg をダウンロードします。
Windows の場合は、node-v6.10.0-x64.msi か node-v6.10.0-x86.msi をダウンロードします。

 

 

 

インストールが終わったら、プログラムを書くフォルダを MAC なら terminal、 Windows なら コマンドプロンプトで開きます。

 

MAC

mkdir /Users/yamaguchiyuuichirou/Desktop/Lambda
cd /Users/yamaguchiyuuichirou/Desktop/Lambda

 

Windows

mkdir C:¥Users¥yamaguchiyuuichirou¥Desktop¥Lambda
cd C¥Users¥yamaguchiyuuichirou¥Desktop¥Lambda

 

ソースファイルを置くだけなので、パスは適宜変更してください。

コマンドで LINE SDK をインストールします
npm install @line/bot-sdk

SDKの情報は npm のサイトで確認できます
https://www.npmjs.com/package/@line/bot-sdk

 

フォルダ構成が次のようになったと思います

/Users/yamaguchiyuuichirou/Desktop/Lambda/node_modules/@line ほか色々

 

ひとまず必要な物は揃いました。

次回からはLambdaに処理を記載し、LINEで天気予報が受信できるところまで進化させていきましょう。