5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Slack+GASでQ&Aボットを作ってみた

Last updated at Posted at 2021-12-05

この記事は、プロトアウトスタジオのアドベントカレンダー2021の5日目です!

##作ったもの

最近、勤務先の部署に試験的に Slack が導入されたので、ちょっとしたQ&Aボットを作ってみました。

Image from Gyazo

###参考サイト

参考というか、ほとんどこちらのブログに記載の通りにしました。
ありがとうございました。
【雑学】SlackとGASで自由度の高いSlackのチャットBotを作る


では、始めます。

##SLACKの設定

Slack アプリを作るため、以下のリンク先へ。
https://api.slack.com/apps

Incoming Webhooks を選ぶ。
Image from Gyazo

On にする。
Image from Gyazo

下のようなものが現れる。
「Add New Webhook to Workspace」をクリック

Image from Gyazo

チャネルを選ぶ。
Image from Gyazo

WEBHOOK の URL ができる
Image from Gyazo

##Q&Aの辞書データを作成
Google Spreead Sheet で以下のように作成する。

Image from Gyazo

##GASの設定
GoogleSpreadSheet の拡張機能 > Google Apps Script

Image from Gyazo

コード

function doPost(e){
  
  // 疎通確認
  const params = JSON.parse(e.postData.getDataAsString());
  if('challenge' in params){
    return ContentService.createTextOutput(params.challenge);
  }

  // Botの投稿に反応しない
  if('subtype' in params.event) {
    return
  }
      
  let contents="";
  if('text' in params.event) {
    const sheet = SpreadsheetApp.getActiveSheet();
    //エクセルのvlookup関数のようなものを実装
    const answer = vlookup(params.event.text,sheet,2);
    const userName = params.event.user;
    contents = `<@${userName}>` + answer; 
  }

  // 投稿内容
  const options =
  {
    "method" : "post",
    "contentType" : "application/json",
    "payload" : JSON.stringify(
      {
        "text" : contents,
        link_names: 1
      }
    )
  };
  // 投稿
  UrlFetchApp.fetch("SlackのWEBHOOKのURL", options);
}

//エクセルのvlookup関数のようなもの
function vlookup(value,sheet,column) {
  let returnValue = "分かりません";
  for (let i = 2; i <= sheet.getLastRow(); i++) {
    if(value == sheet.getRange(i,1).getValue()){
      returnValue = sheet.getRange(i,column).getValue();
      break;
    }
  }    
  return returnValue;
}

コードを書いたらデプロイする。 [![Image from Gyazo](https://i.gyazo.com/bbf555deb56a281d1e2ebc361154848e.png)](https://gyazo.com/bbf555deb56a281d1e2ebc361154848e)

歯車 > ウェブアプリ
Image from Gyazo

デプロイ
Image from Gyazo

ウェブアプリのURLは控えておく
Image from Gyazo

再びSLACK

さっきのSlackのAPI設定画面の左側の
Event Subscriptons をクリックし、
Enable Events を Onにする

Request URL : 先ほど控えたGASのウェブアプリのURLを入力。
※デプロイするたびにウェブアプリのURLが変わるので、都度入力の必要がある

Subscribe to bot events に message.channels を選ぶ。

Image from Gyazo

この上の画面が現れない場合は以下のように直接 APP Manifest を編集し、Save Change
Image from Gyazo

このような黄色の網掛けのメッセージが現れたら
Image from Gyazo

メッセージの中の reinstall your apps をクリック
Image from Gyazo


うまくいくと SLACKに ボットが追加されたことが投稿される。 ハイパーリンクをクリック [![Image from Gyazo](https://i.gyazo.com/a8f8048367b0d05e962d0ca7774b10b6.png)](https://gyazo.com/a8f8048367b0d05e962d0ca7774b10b6)

このチャンネルにアプリを連携させる
Image from Gyazo

これで、完成!!




PS

3年前に広島で開催されたセミナーでソラコムのMAXさんが、ソラコムの働き方の話をされていたなかで、「会社の住所とか社長の本名とかちょっとしたことだけど、いざ調べるのは面倒なことはSlackでボットに答えさせてる」という話をされていて、いつか作ってみたいと思っていて、やっと実現できました。

このスライドのP62

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?