SlackとAIをがっちゃんこしてみた。

この記事は「株式会社グロージェント Advent Calendar 2016」の5日目の記事です。

 

お疲れ様です。

完全にお久しぶりな高橋です。
お疲れサマンサ!と言いたいところですが、
本家本元に怒られそうなので、差し控えさせていただきます。

さて、グロージェントでも恒例となって来た、
アドベントカレンダーですが、少し技術者らしい内容にしてみました。

 

ブログタイトルの意味ってなーに?

弊社では、社員同士のコミュニケーションツールとして、「Slack」を導入しております。
余り活動的でない時期もありましたが、近頃はとても活発的に繰り広げられてます。
最近では、botを作成する社員もいたりなど、IT企業らしい使い方も多くなって来ています。

そこで、以下の図のようにSlackとAIをサーバレスなGoogle Apps Scriptで繋げてみました。

bot%e5%9b%b3

 

そもそも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を繋げた結果となります。

slack

私(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などを用いてサーバレスで便利ツールを作るべく日々勉強しています。

以上、ありがとうございました。

About the author

By TN

最近の投稿

アーカイブ

カテゴリー

タグクラウド

コーポレートサイト

メタ情報