このエントリーはGMOアドマーケティングAdvent Calendar 2018の21日目です。前日は@thomi40さんのWebVRのフレームワーク「A-Frame」についてでした。
こんにちは@zakisanbaimanです。
普段は広告配信アプリケーションのロジック部分(Java)を担当しています。
最近LINE botで遊んでたので、その構築方法を紹介します。
構築の流れ
- LINE@アカウント作成
- Messaging API
- Herokuの準備
- SDK準備
- botのデプロイ
- LINE DeveloperでWebhook設定
1. LINE@アカウント作成
まずLINE@アカウントを作成します
アカウントは2種類あるのですが、趣味用なら一般アカウントでOKです。
アカウントが発行されると、LINE@MANAGERにログインできます。
ここでボットのアイコンやステータスメッセージなど設定できます。とはいえあんまりこの画面は使いません。
今回はボットをMessaging APIを使うので、「LINE Developers」に移りましょう。¥
以下が「LINE Developers」の画面です。主にこのサイトを使ってボットの設定をしていきます。
- Messaging API
「プロバイダー」を設定していきます。
ここでいうプロバイダーとは、botのサービス提供者のことです。
プランは一旦「Developer Trial」で良いと思います。
これでアプリはできました。
「チャンネル基本設定」の下の方に友達追加用のQRコードがあるので、友達追加してみましょう。
友達登録すると、初期設定であいさつだけしてくれます。
ここまでOKなら、続いてボットのプログラムを作って行きましょう。
3. Herokuの準備
プログラムを乗せるためのサーバを用意します。
今回は無料で簡単に用意できるherokuというクラウドプラットフォームを使います。
ここでは一旦Sign upだけ済ましときましょう。
herokuのセットアップはもうちょっと後ろでやります。
4. SDK準備
まずGitHubからLINEが用意しているLINE Bot開発用のSDKをクローンしてきましょう。
今回はJavaのものを紹介しますが、他にもPHP,Go,Perl,Ruby,Python,Node.jsなどがあります。
https://github.com/line/line-bot-sdk-java
ディレクトリ構造が複雑ですが、シンプルな返答をするだけなら
sample-spring-boot-echo内をいじるだけでOKです。
コードはそのままでもオウム返しの処理が動くので、ここではとくにJavaファイルは変更しません。
1つだと作成しないといけないファイルがあり、それがapplication.ymlです。
resourcesにapplication-template.ymlがあるので、それをコピーしてapplication.ymlを作りましょう。
(パス:line-bot-sdk-java/sample-spring-boot-echo/src/main/resources/application-template.yml)
application.ymlにはチャネルトークンとチャネルシークレットを設定します。
(どちらも「チャネル基本設定に載っています」)
line.bot:
channel-token: '{チャネルトークン}'
channel-secret: '{チャネルシークレット}'
handler.path: /callback
5. botのデプロイ
line-bot-sdk-java/sample-spring-boot-echo/README.mdの中に「Deploy to Heroku」というボタンああるので、押してみましょう。
するとブラウザが勝手に開いてログイン画面が開くので、ログインします。
そしてアプリ名、チャネルシークレット、チャネルトークンを入力して「Deploy app」押下します。
デプロイに数分かかりますが、「Your app was successfully deployed.」と出たらデプロイ成功です。
6.LINE DeveloperでWebhook設定
Webhook送信を「利用する」にします。
Webhook URLに「https://${YOUR_HEROKU_APP_NAME}.herokuapp.com/callback」と設定します。
{YOUR_HEROKU_APP_NAME}は、herokuで設定したapp nameです。
自動応答メッセージは「利用しない」にします。
こう設定しないと、作成したプログラムが呼ばれません。
↑上記設定をしてもうまく反映されていないときがあります。その際は画面更新を行うと反映されるので画面更新などしてみましょう。
ひとまずオウム返ししてくれるボットができました!
参考サイト
ハマったこと
-
../gradlew bootRunが通らない
application.ymlの「This is tempalte〜」の部分がコメントアウトされていないため -
gradle homeが分からない
$ echo $GRADLE_HOME
/usr/local/gradle -
@AllArgsConstructor(onConstructor = @__(@JsonCreator))
Error:(27, 38) java: シンボルを見つけられません
シンボル: クラス __
「Enable annotation processing」にチェックを入れると直った。(IntelliJの場合)
次回のAdvent Calendar 2018
明日は@yoshishinの【Rails6のactiontextを試してみる】のお話です。良いクリスマスを〜