チュートリアル bot Google Apps Script javascript チャット

typetalkのAPIとGoogle Apps Script(GAS)を利用して、定期投稿するtypetalk botを作ってみる

eyecatch

こんにちは著しく夏バテが始まりかけているタケヨシです。

今日はtypetalkとGoogle Apps Scriptを使って、簡易的な定期投稿botを作成してみようと思います。
本格的なchatbotとは違いとても簡単に作成できます。

カレンダーに登録しないけど、 定期的に社内にリマインドしたいときなどはありますよね。
むしろ、そのためにわざわざ(毎月○○連絡)みたいなカレンダーを立てたりすることもあったりなかったり。

そういったことって地味に面倒ですし、他の作業に集中していたりすると、 なんだかんだと忘れてしまったりすることがありますよね。

typetalkの話

typetalkとは

プロジェクト管理ツール「Backlog」などNulabさんが開発・運営しているチャットツールです。

typetalkのAPI

このtypetalkにはAPIが充実しており、oauth認証やwebhookなど、APIを使ってユーザーが色々できるようになります。
国産なので日本語ドキュメントもあって嬉しい限りです。
今回はこちらを使って利用していきます。

typetalkのトピックbotの作り方

typetalkでは複数名で会話する場所のことを「トピック」と呼びます。 今回はトピック内でのbotを作っていきます。

まずは任意のトピックを開き、トピック名の右にある、歯車アイコンをクリックして、トピックの編集画面を開きます。

ss_01

開くと、メンバー、サービス連携、ボットのタブがありますので、「ボット」のタブを開きます。
開いた先に「ボットの追加」ボタンがあるので、クリック、必要事項を入力して新規ボットを作成していきます。

ss_02

スコープについて

スコープはボットが利用できるデータの範囲(権限)のことで「読み込み」「書き込み」の2種類がありますので、
ここでは投稿のみで大丈夫なので、デフォルトのままにしておきます。

webhookの欄も利用しませんので、チェックがないままで大丈夫です。

Tokenと、Topicのidをコピー

無事作成が完了すると、Tokenが発行されますので、 これをメモ帳などにコピーしておいてください。
合わせて、topicのidもコピーしておきます。
topicのidは URLの https://typetalk.in/topics/xxxxx/ の「xxxxx」の部分がtopicのidとなります。

ss_03

Node.jsを使ってテスト

まずは試しに投稿が出来るか、Node.jsを使ってテストしてみます。
他の言語でも問題ありませんが、ここではこの後JavaScriptを利用するGoogle Apps Scriptに乗せるので、
そのまま利用しやすいようにJavaScriptを利用しています。

ディレクトリとファイル作成

md nulab_bot  
# macはmkdir nulab_bot

cd nulab_bot

ここにbot_test.jsというファイルを作成します。 bot_test.js内のサンプルのコードはnulabドキュメント公式に掲載されているもの利用していきます。
ソースはこちらから

ソースを開いてtopicidとトークンをxxxとダミーになっている部分と置き換えます。

ファイルの用意ができたら、実際にターミナルからコマンドで実行してみましょう。

node bot_test.js

無事実行できると、200のSTATUS番号とBODYが返ってくると思います。
また、ブラウザで対象のトピックを見ると「Hello, Typetalk!」とbotが投稿しているのが分かるかと思います。
ss_04

ソース内の「Hello, Typetalk!」が投稿メッセージの部分ですので、変更して別の文字列に変更して実行してみると、その文字列で投稿できると思います。

これで、無事APIから投稿ができましたので、APIから投稿する準備が整いました。

Google Apps Scriptへと移動する

Google Apps Scriptはgoogleドキュメントなどのgoogleのクラウドアプリ上で利用できるスクリプトです。
(以降、GASと省略。)

新規スプレッドシートを作成

今回スクリプトはスプレッドシートから利用するので、まずは新規スプレッドシートを作成して、 スクリプトエディタを開きます。

ss_05

Node.js用のサンプルコードをGAS用に調整

Node.jsのソースコードをそのまま利用することができないため、 GAS用にソースコードを調整していきます。
調整といっても、関数を別のものに置き換えるというイメージですので大きな変更はありません。

コードはスクリプトエディタ作成時にあるmyFunction関数内に記載して置いてください。

ss_06

実際に変更したソースコードは以下の通りです。
メッセージも変更しやすいよう、変数化しました。

function myFunction() {
  //トークン
  var TOKEN = 'xxxxxxxxxx';
  var text = 'メッセージ';
  var data = {
    'message' : text
  };
  var topicId = 'xxxxx';
  var options = {
    'method'     : 'post',
    'contentType': 'application/x-www-form-urlencoded',
    'payload'    : data
  };
  var url = 'https://typetalk.in' + '/api/v1/topics/' + topicId + '?typetalkToken=' + TOKEN;
  var res = UrlFetchApp.fetch(url, options);
}

実行してみる。

コード上の時計のようなアイコンの隣に、「実行ボタン(再生アイコン)」があるので、クリックして実行してみます。
上手く動いていれば、再びtypetalk内で投稿されたものが追加されているかと思います。

トリガー機能を使って、特定の時間で投稿をするように設定

ここまで無事に動いたと思いますが、これでは毎回実行を押すことになり、 今までと変わりませんよね。
そこでトリガー機能を利用して、特定の時間で登録されるようにします。

トリガー機能とは「何かのイベント発生時に応じて関数を実行する」というもので、 「スプレッドシートが編集された時」、「googleフォームから送信された時」といったものに加えて、 時間での設定を行なうこともできて「毎月D日の1時~2時」に実行というのもできます。

設定も簡単です。
先ほどの実行のボタンの左側にあった時計のようなアイコンがトリガー設定ボタンですので、ここから設定していきます。

ss_07 ss_08

保存をクリックして、完了です。
後は指定した時間に投稿されると思います。

注意点

時間設定時項目に時単位の「1時~2時」というのがありますが、詳細な時間は設定できないので、1時ぴったりに行いたい場合などは別の時間設定方法やcronなどを検討したほうがです。

おわりに

bot作るのってバチボコ難しいのかなって思っていたのですが、 自分もbotに関して詳しない自分でも簡単に作成することができました。

次回があったら、スプレッドシートと組み合わせたものなども作ってみようと思います!

ありがとうございました!