おみくじ LINE BOT のレシピ
お正月といえば初詣。
初詣といえばおみくじ。
一度使ってみたかったLine messaging apiでおみくじを作成してみた。
Line messaging apiの設定
Lineのトークルームやグループで自動返信を行う、いわゆるbotを作ることができるツール。
プログラムに沿って特定の言葉に反応させたりすることができる。
Line messaging apiを使用するためにはビシネスアカウントを用意する必要があるため、Line Business Centerにアクセスしてログインする。
多分普段使っているアカウントで問題ない。
ログインしたあとはサービスのMessaging APIを選び、 Messaging APIを始めるをクリック。
事業者名は個人ならば本名でもなんでもいいのかな。
その後アカウント名に作成するbotの名前と画像をつける。
「おみくじくん」とつけた。
業種は個人を選択。
アカウントの作成ができたら、Line@Managerに行きアカウント設定のbot設定をクリック。
botの設定はWebhook送信を利用するにチェックする。
複数人のトークでも利用できるようにするため、Botのグループトーク参加も利用するにチェックする。
自動応答メッセージはbot利用しない。
友だち追加時あいさつはどっちでも良い。
Webhook送信が重要なようで、ここに設定したurlにプログラムを置くことでbotを作ることができるみたい。
Google apps scriptにbotのプログラムを作成
bot の作成にはサーバーを立てたりする必要があるのかと思いきや、Google apps scriptを使うことで簡単にプログラムが書ける。
Google apps scriptとはGoogle drive上で実装できるJavascriptの一種で、グーグルの各種サービスと連携できる。
Javascript触るの初めてだけど、このページを見ながらやってみた。
Googleアカウントだけで始めるLINEbot(Google Apps Script編) - Qiita
Google Apps Scriptを使ってLINE Messaging APIでオウム返しをする - Qiita
Google drive上で新規→その他→Google Apps Scriptを選択。(初回はアプリ追加からGoogle Apps Scriptを追加する必要があるみたい)
my functionのみがエディタに表示されているので、下記のように書き換える。
// LINE Developers の Channel Access Tokenを設定 var channel_access_token = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; // LINEから呼ばれる関数 function doPost(e) { var events = JSON.parse(e.postData.contents).events; events.forEach(function(event) { if(event.type == "message"){ lineReply(event); } }); } // LINEへの返信 function lineReply(e) { var repMes = replyMessage(e); var postData = { "replyToken" : e.replyToken, "messages" : repMes }; var options = { "method" : "post", "headers" : { "Content-Type" : "application/json", "Authorization" : "Bearer " + channel_access_token }, "payload" : JSON.stringify(postData) }; UrlFetchApp.fetch("https://api.line.me/v2/bot/message/reply", options); } //返信する画像を準備 function replyMessage(e) { if(e.message.text=="おみくじ"){ var rand = Math.floor( Math.random() * 4 ) +1; var imageurl; switch (rand) { case 1: //大吉 imageurl="[image url 1]" break; case 2: //中吉 imageurl="[image url 2]" break; case 3: //吉 imageurl="[image url 3]" break; case 4: //凶 imageurl="[image url 4]" break; } var repMes=[ { "type" : "image", "originalContentUrl" : imageurl, "previewImageUrl" : imageurl } ]; return(repMes) } };
必要なことは、
LINE Developers の Channel Access Tokenを設定
Webhook送信の設定
おみくじ画像の設定
である。
1は、Line Business CenterのアカウントリストからLine Developersをクリックし、Channel Access Tokenのissueを押して出てきたurlをコードの最初に貼り付ける。
2は、Google Apps Scriptのエディタから公開→ウェブ アプリケーションの導入をクリックし、
プロジェクト バージョン:新規作成(更新したいときも「新規作成」を選択)
次のユーザーとしてアプリケーションを実行:自分
アプリケーションにアクセスできるユーザー:全員(匿名ユーザーを含む)
を選択して出てきた現在のウェブ アプリケーションの URLをコピーする。
その後、Line DevelopersのEditを押してWebhook URLに貼り付け、verifyをクリックしSuccessと表示されることを確認する。
これで、LineとGoogle Apps Scriptを連携することができた。
3の画像の設定についてだが、Line messaging apiでは画像を送るために何処かにアップロードしたurlで指定してやる必要がある。
ドキュメントによるとjpeg形式で直接リンクされていて、なおかつurlがhttpではなくhttpsで始まってなければいけないようだ。
googleドライブに保存した画像ではだめなようで良い方法がわからなかったが、dropboxを使えば動かすことができた。
おみくじの画像はいらすとやのものを使用させてもらった。
一度、画像を保存し、少し縮小してjpgに変換したあとdropboxにアップロードする。
dropboxの共有ボタンをクリックしてリンクをコピーするを押すと
https://www.dropbox.com/s/xxxxxxxxxxxxxxxxx/omikuji_daikichi.jpg?dl=0
のような形式になっている。(xxxはディレクトリ的な英数字)
直接リンクするために
https://dl.dropboxusercontent.com/s/xxxxxxxxxxxxxxxxx/omikuji_daikichi.jpg
のように、書き直して上記のソースコードの[image url 1]に設定する。
大吉以外の画像についても同様に設定する。
完成品
作成したbotのアカウント設定画面に表示されているQRコードから友達になりトークルームやグループに招待したあと、「おみくじ」とつぶやくと、、、
このように、乱数によって選択された占い結果を返信させることができた!