この記事は「株式会社グロージェント Advent Calendar 2016」の5日目の記事です。
お疲れ様です。
完全にお久しぶりな高橋です。
お疲れサマンサ!と言いたいところですが、
本家本元に怒られそうなので、差し控えさせていただきます。
さて、グロージェントでも恒例となって来た、
アドベントカレンダーですが、少し技術者らしい内容にしてみました。
ブログタイトルの意味ってなーに?
弊社では、社員同士のコミュニケーションツールとして、「Slack」を導入しております。
余り活動的でない時期もありましたが、近頃はとても活発的に繰り広げられてます。
最近では、botを作成する社員もいたりなど、IT企業らしい使い方も多くなって来ています。
そこで、以下の図のようにSlackとAIをサーバレスなGoogle Apps Scriptで繋げてみました。
そもそもGoogle Apps Scriptってなーに?
Google Apps Scriptとは、Google Apps (Gmail、Googleカレンダー、Googleスプレッドシート等) で利用出来る
マクロ機能で、Google Appsの操作をスクリプトで自動化することができる。
Googleが様々なAPIを提供しており、例えばGoogleスプレッドシートの変更履歴をメールで通知したり
特定のキーワードが含まれるメールをピックアップしてスプレッドシートに書き出したりといった操作を自分で記述
することができる。
人工知能ボットってなーに?
今回利用する、人工知能ボットに関しては、
株式会社ユーザーローカル様のご協力により、
チャットボットAPIを利用させていただいております。
(株式会社ユーザーローカル様:http://www.userlocal.jp/)
作成時の注意点
各種tokenの扱い方とGASのプログラム公開を行わないと更新されない点が上げられます。
経験者なら、30分もあればbotが作れます。
以下、実際にSlackとチャットボットAPIを繋げた結果となります。
私(takahashi)に対して、botが返信していることがわかります。
なかなかレスポンスが良く、1~2秒で返信を返して来ます。
ソースコード晒します!
Main.gs
// チャンネル判別用 var ai_bot_userlocal_token = '<ご自身で取得したchannel tokenを入れて下さい>'; // slackのchannelを判定する function doPost(e) { // bot自身の発言はスルーする if (e.parameter.user_name == 'slackbot'){ return null; } var channel_token = e.parameter.token; if (channel_token == ai_bot_userlocal_token){ doPost_userlocal(e); } }
UserLocal.gs
// AI APIのエンドポイント var userlocal_endpoint = 'https://chatbot-api.userlocal.jp/api/chat'; // bot取得 function doPost_userlocal(e) { var ai_token = '<ご自身で取得したuserlocal tokenを入れて下さい>'; var bot_name = 'Re:ai_userlocal'; var bot_emoji = ':alien:'; var user_message = e.parameter.text; // botへ送信&レスを取得 var res = UrlFetchApp.fetch( userlocal_endpoint + '?key=' + encodeURIComponent(ai_token) + '&message=' + encodeURIComponent(user_message) ); var replay_text = JSON.parse(res).result; var message = '@' + e.parameter.user_name + '\n「' + replay_text + '」'; // Slackに投稿 postMessage(e.parameter.channel_id, message,bot_name,bot_emoji); }
SendSlack.gs
// Slackに投稿する function postMessage(channel_id,message,bot_name,bot_emoji) { var slack_token = '<ご自身で取得したslack tokenを入れて下さい>'; var app = SlackApp.create(slack_token); return app.postMessage(channel_id, message, { username: bot_name, icon_emoji: bot_emoji }); }
今回は、GAS上でSlackを使用する際の便利ライブラリとして、
大橋様のSlackライブラリを使用させていただきました。
とても便利なので、GASでSlackを扱う際は必須と言えます。
http://qiita.com/soundTricker/items/43267609a870fc9c7453
今後について
こういった人工知能やさらに上を行く利便性、意外性のある技術を
学んで行きたいと思います。
弊社では、初の試みとして「Slack botコンテスト」なるものを開催しております。
社員毎に新しい使い方を含めて模索している様です。
私自身も、GASなどを用いてサーバレスで便利ツールを作るべく日々勉強しています。
以上、ありがとうございました。