show log include yuh

勉強したことの復習を兼ねて、IT関係(ネットワーク/サーバ/アプリケーション)についてまとめてます。たまに趣味のこと

スポンサーリンク

A3RTとGASを利用しておしゃべりBotを作ってみる

概要

以前紹介していた雑談BotAPIの提供のサービス終了のようで利用できなくなっていました。
新しくA3RTのAPIを用いて実装してみたいと思います。今回GASを使うことで無料で運用することできました。 yunabe.hatenablog.com

準備するもの

  • APIトークン(A3RT)
  • Incoming Webhook(Slack)
  • Outgoing Webhook(Slack)

A3RT

こちらのリンクでユーザ登録をすることでAPIトークンが手に入れます。 a3rt.recruit-tech.co.jp

Incoming Webhook(Slack)

通知先のチャネルのWebhockのurlを取得します。
https://{{チーム名}}.slack.com/apps の検索欄にて Incoming Webhook で検索すると出てきますので、設定からURLを取得してください。

Outgoing Webhook(Slack)

今回 雑談 というキーワードでA3RTに対してAPIを叩き、雑談を実現します。
- 引き金となる言葉:雑談
- URL:後ろで説明するGASで生成したURL
- トークンはメモしておいてください。

GAS(Google Apps Script)

実装するポイントは以下になります。
- Slackから雑談したい文字を受け取る
- 受け取った文字を用いA3RTのAPIを叩く
- A3RTからのレスポンスをSlackに通知する
試しに以下のコードを書きました。

//A3RTのAPIを叩く
function postA3RT(text){
  var url = "https://api.a3rt.recruit-tech.co.jp/talk/v1/smalltalk";
  var api_key = "{{APIトークン(A3RT)}}"
  var payload =
      {
        "apikey" : api_key,
        "query" : text
      };
  
  var options =
      {
        "method" : "post",
        "payload" : payload
      };
  var response =  UrlFetchApp.fetch(url, options);
  var result = JSON.parse(response.getContentText())["results"][0]["reply"];
  Logger.log(result);
  return result;
}

//Skackへ通知する
function postSlack(text){
  var url = "{{Incoming Webhook(Slack)}}";
  var options = {
    "method" : "POST",
    "headers": {"Content-type": "application/json"},
    "payload" : '{"text":"' + text + '"}'
  };
  UrlFetchApp.fetch(url, options);
}

// Slackからの入力を受け取る
function doPost(e) {
  var varify_token = "Outgoing Webhook(Slack)";
  if (varify_token != e.parameter.token) {
    throw new Error("invalid token.");
  }
  var data = e.parameter.text.split(" ");
  var message = postA3RT(data[1])
  postSlack(message); 
}

こちらをGASで実装しデプロイを実施するとURLが取得できます。こちらのURLを先程の Outgoing Webhook に入力してください。

動かし方

雑談 おはよう
などとSlackで発信すると返事くれば成功です。