5log

日々の仕事の備忘録

hangout chat botでスプレッドシートのデータを取得・表示するbotを作る(Google Apps Script使用)

最近、弊社ではhangout chatのbotを使った作業効率化がちょっとしたブームとなっています。

私も作ってみようかな、と思いつつもパワポで提案資料を作る業務が忙しくて中々触れていなかったのですが、昨日ふとチームの作業改善でbotが使えそうなネタを思い立ち、軽く作ってみたところ短時間で簡単に目的のbotが作れたので、今回はchatbotの作り方について記録していこうと思います。

はじめに:今回のゴール

今回作りたいスクリプトGoogleスプレッドシートから特定セルの情報を取得→chatグループ内にセル内に入っている情報をコメントさせる」botを作ります。実際に、業務で使うためのbotには複雑な処理も加えているのですが、今回はセルの情報取得・botへの情報の受け渡しの流れをシンプルに説明できるよう、最低限の機能だけ実装したスクリプトを作成します。

事前準備:Googleスプレッドシートの作成

まずはデータを取得するためのスプレッドシートが必要になりますが、仕事の情報を晒すわけにもいかないので、今回は説明用に、データ取得用のスプレッドシートを作成します。

シートのデータはこんな感じで用意してみました。

f:id:K3105:20181215112826p:plain

準備ができたら、今のうちにシートのIDをメモしておきましょう。下記アドレスバー内赤字のエリアの内容をコピーしてメモ帳などに記録しておきます。これは後ほどスクリプトを書くときに使用します。

f:id:K3105:20181215113102p:plain

1. hangout chatでグループを作成して、Webhookを追加する

いよいよbotの作成スタートです。まずはbotを動かす用のグループを作成します。今回は「テストルーム」という名前でグループを作成していますが、グループ名は何でも良いです。

グループを作成後にWebhookの追加を行います。「Webhook」の説明は当記事では省略するので、知りたい人は調べてみてください。

まずはグループ名をクリックし、プルダウンメニューから「Webhookを設定」をクリック。

f:id:K3105:20181215113149p:plain

そうするとウィンドウが出てくると思うので、そこに今回作るbotの情報を入れていきます。「名前」はbotの名前になるので、好きに入れてください。(今回は「testbot」と入力しました。)「アバターのURL」はbotのアイコン画像となります。今回は省略しますが、こちらも入れたい人は入れましょう。注意点として、URLはhttpsで公開されている画像のURLを指定する必要があります。

f:id:K3105:20181215113245p:plain

これでbotの設定が完了しました。bot名の右側のこのアイコンをクリックするとbotのURLがコピーできます。こちらもメモ帳などにコピーしておきましょう。

f:id:K3105:20181215121429p:plain

2. Google Apps Scriptでスクリプトを書く

続いて、Google Apps Script(通称GAS)でスクリプトを書いていきます。Googleドライブの「新規作成→その他→Google Apps Script」を選びます。

f:id:K3105:20181215114535p:plain

そうすると、GASのコードエディターが出てくるので、その中にコードを書いていきます。

今回書いていくのは下記のコードです。SpreadsheetApp.openByIdには、事前準備でコピーしたスプレッドシートのID名を、var urlの変数には1でコピーしたbotのURLをそれぞれ指定します。

function testbot(){
  // 対象となるスプレッドシートの情報を取得
  var sprsheet = SpreadsheetApp.openById("【スプレッドシートのIDを入れる】");
  // 取得したスプレッドシートから、対象とするシート名を指定
  var objsheet = sprsheet.getSheetByName("シート1");
  // 取得したシート名から、今回取得したいセルの場所を指定
  var range = objsheet.getRange(3, 1); //A3のセル情報を取得
  // セルから情報を取得
  var value = range.getValue(); //セル情報を文字列で取得する
    
  //botのURLを入れる
  var url = "【BOTのURLを入れる】";
  var text = value;
  
  var payload = {
    "text" : text
  }
  
  var json = JSON.stringify(payload); //エンコード
  
  var options = {
  "method" : "POST",
  "contentType" : 'application/json; charset=utf-8',
  "payload" : json
  }
  
  var response = UrlFetchApp.fetch(url, options);
}

今回は業務改善用として、すぐにbotを作る必要があったので、取得した情報の送信は下記サイトのコードを流用する形で作りました。各動作の意味はこれからbot公式のガイドをもう少し読み込んで理解したいと思います。

Hangouts ChatのAPIで通知BOTを作る - 新人マネージャー奮闘記

3. スクリプトを実行する

いよいよ、スクリプトを実行します。上のメニュー内から再生ボタンをクリック。

f:id:K3105:20181215115342p:plain

初回のスクリプト実行時は承認が必要になるので、許可します。

f:id:K3105:20181215115420p:plain

許可が終われば、グループにbotがメッセージを投稿してくれると思います。

f:id:K3105:20181215115726p:plain

これにてbotは完成となります。

おまけ:トリガーを設定して、指定した時間で実行

さて、これで目的の機能を持ったbotは完成したものの、実行時にわざわざGASを開いて再生ボタンを押して....では面倒なので、特定の時間に自動でスクリプトが実行されるよう、トリガーで実行させる設定したいと思います。

タイトル下のメニューの中から「編集→現在のプロジェクトのトリガー」を選択。そうすると新しいページが出てくるはずなので、そのページの右下にある「トリガーを追加」を選択します。

そしたらウィンドウが出てくるので、今回は下記のようにセット。これで毎日朝9:00〜10:00にスクリプトが実行されるかと思います。

f:id:K3105:20181215115955p:plain

GAS標準のトリガーは、どうやら細かい時間の指定などができないようなので、もし詳細な時間指定が必要になるようであれば、別途スクリプトにトリガー処理の記述を追加する必要がありますが、逆に細かい時間指定が不要であれば、スクリプトを書かずに作れるのは手軽ですね。

まとめ

Javascriptをある程度理解して書ける人なら、1〜2時間もあれば簡単なbotが作れてしまうので、みなさんもぜひ作って業務効率化しましょう。