※この記事はAWSアカウントが作成済みであることを前提としています。
#はじめに
この記事は、2019/2/11に行なった【学生大歓迎】プログラミング未経験者向け Node.js で LINE Bot 開発講座参加者の一部より「botを永続化したい」という要望を受けたため、bot永続化のためのオンラインハンズオンを追加で行なった際に使用した資料です。(2/11のハンズオンの際はngrokを使用したため最長8時間しか動きませんでした。)
#AWS Lambdaとは
AWS (Amazon Web Service)のサービス(Faas)で、サーバレスでNode.jsやPython等を動かす事ができます。
#システム構成
LINEサーバからのwebhookをAPI Gatewayで受け取り、それをLambdaの関数に渡す形になります。
#Botのチャネルを作ろう!
こちらの記事を参考にLINEBotのチャネルを作成して下さい。
#Lambdaの関数を作ろう!
- AWSマネジメントコンソールにアクセスします。
#API Gatewayの設定をしよう!
##APIを作成しよう
- 左上の「AWS」を右クリックして新しいタブで開きます。
##APIの設定をしよう!
- POSTを選択して下さい - チェックマークを押して下さい。 - 「Lambda統合プロキシの利用」にチェックを入れて、「Lambda関数」に先程作成した関数の名前を入力してから「保存」を押して下さい。 - 「HTTP リクエストヘッダー」を選択して、「ヘッダーの追加」を押して下さい。 - ```X-Line-Signature``` と入力してチェックマークを押して下さい。 - 「必須」にチェックマークを入れて下さい。 - 「アクション」を押すとプルダウンメニューが出てくるので、「APIのデプロイ」を押して下さい - 「デプロイされるステージ」の右にある四角いやつを押して、「新しいステージ」を選択して下さい - ステージ名を入力して下さい ※今回は「prod」にします - 「デプロイ」を押して下さい - これでAPIの作成は完了です!※リクエストが本当にLINEから送られてきたものかを確認するために署名検証を行う必要があります。(検証しなくてもBotを動かすことは一応可能です。)
X-Line-Signatureには、その検証を行うための署名が記載されています。
X-Line-Signatureがリクエストヘッダーに含まれていないリクエストはLINEからのものではないため、受け取る必要がありません。なので、APIGateway側であらかじめ弾く設定にしています。
#Botのコードを書こう!
##Lambdaにコードをアップロードしよう!
※Lambdaはインラインエディタを使用してブラウザ上で直接コードを書くことが可能ですが、今回はモジュールが必要になるので纏めてzipでアップロードしていきます。
- いよいよBotのコードを書いていきます。こちらのページを開いて「Clone or download」をクリックし、「Download ZIP」を選択して下さい。
- zipを解凍してください。
- 解凍して出てきたフォルダを開いて、中のファイルを纏めて圧縮します
##環境変数にアクセストークンとチャンネルシークレットを入力しよう
※コードに直接アクセストークンを書くと精神衛生上良くないので、環境変数を使用します
- LINEDevelopersのBotのページを開き、アクセストークンの項目にある「再発行」を押して下さい
- 特に変更はせず、そのまま「再発行」を押します
- 出てきた文字列をコピーします
- 先ほど作ったLambda関数を開き、下の方にある「環境変数」のキーに
ACCESSTOKEN
と入力して下さい - 「値」には先ほどコピーした文字列を貼り付けます
- Botのページを開き、Channel Secretをコピーします
- Lambdaの下の方にある「環境変数」のキーに
CHANNELSECRET
と入力して下さい - 「値」には先程コピーした文字列を貼り付けます
- 右上の保存を押します
##Webhook送信をオンにしよう!
※LINEからの通知を先ほど作ったLambda関数が受け取れるように、Webhookの設定をしていきます。
- 「APIエンドポイント」の隣にあるURLをコピーして下さい - botのページを開いて、「Webhook URL」の項目にある「編集」ボタンを押して下さい - 先程コピーしたURLを貼り付けて https:// を削除します![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260292/b18890e9-7cf0-9e62-e610-214a4a9dfa2b.png) - 「更新」を押します![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260292/807406ea-63d6-11d9-f7df-95c3e42944d5.png) - 「Webhook送信」の項目にある「編集」ボタンを押して下さい - 「利用する」を選択して、「更新」を押します![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260292/9f6ada81-62ba-dd38-d4cc-746dbbfdb1e2.png) - ページをリロードして、変更が反映されているか確認します※たまに反映されていない場合があるので、その場合は再度設定変更を行なって下さい
- 以下のような状態になっていれば設定完了です!
#作ったBotを試してみよう!
- botのページに友達追加用のQRコードが載っているので、そこからbotを友達追加します
#おまけ
以下の資料の「おまけ」の手順で、「こんにちは」というメッセージが送られてきたら「Hello World」と返信して、「おはよう」と送られてきおたら「Good Morning!!」と返信するという事が出来ます。
https://qiita.com/shinbunbun_/items/b1d82f5bd85786a7f06e#%E3%81%8A%E3%81%BE%E3%81%91
また、以下の資料の「はじめに」〜「確認テンプレートを返信してみよう!」と同じ手順でテンプレートメッセージを返信することが出来ます。
https://qiita.com/shinbunbun_/items/81db9b7973553b2d665d
#前回ハンズオン参加者の方々へ
messageFuncは前回のハンズオンの際に使用したコードと全く同じになっています。