おみくじ LINE BOT のレシピ

お正月といえば初詣。

初詣といえばおみくじ。

一度使ってみたかったLine messaging apiでおみくじを作成してみた。

Line messaging apiの設定

Lineのトークルームやグループで自動返信を行う、いわゆるbotを作ることができるツール。

プログラムに沿って特定の言葉に反応させたりすることができる。

Line messaging apiを使用するためにはビシネスアカウントを用意する必要があるため、Line Business Centerにアクセスしてログインする。

business.line.me

多分普段使っているアカウントで問題ない。

ログインしたあとはサービスのMessaging APIを選び、 Messaging APIを始めるをクリック。

事業者名は個人ならば本名でもなんでもいいのかな。

その後アカウント名に作成するbotの名前と画像をつける。

「おみくじくん」とつけた。

業種は個人を選択。

アカウントの作成ができたら、Line@Managerに行きアカウント設定のbot設定をクリック。

botの設定はWebhook送信を利用するにチェックする。

複数人のトークでも利用できるようにするため、Botのグループトーク参加も利用するにチェックする。

自動応答メッセージはbot利用しない。

友だち追加時あいさつはどっちでも良い。

Webhook送信が重要なようで、ここに設定したurlにプログラムを置くことでbotを作ることができるみたい。

Google apps scriptにbotのプログラムを作成

www.google.com

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)
  }
};

必要なことは、

  1. LINE Developers の Channel Access Tokenを設定

  2. Webhook送信の設定

  3. おみくじ画像の設定

である。

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コードから友達になりトークルームやグループに招待したあと、「おみくじ」とつぶやくと、、、

f:id:gilmon:20170104223623p:plain

このように、乱数によって選択された占い結果を返信させることができた!

今回作成したbotQRコードなので友だちに追加して動かしてみてね。

友だち追加