技術ブログ

GASでSlack Bot作成:初心者でも簡単!自動応答ボットの作り方

/ 初心者向け

GASでSlack Bot作成:初心者でも簡単!自動応答ボットの作り方

GASでSlack Bot作成:初心者でも簡単!自動応答ボットの作り方

Slackでのコミュニケーションをより効率化・自動化したいと思ったことはありませんか? そんな時に役立つのが、カスタムSlack Botです。そして、Google Apps Script (GAS) を使えば、コーディング経験が浅い方でも手軽にオリジナルのSlack Botを作成できます。

この記事では、GASを使って基本的なSlack Botを作成する手順を、サンプルコードとともに分かりやすく解説します。まずは、簡単な「こんにちは」と応答するボットから始めてみましょう。

1. Slackアプリの準備

まず、Slackのワークスペースにアプリを作成し、ボットトークンを取得する必要があります。

1. Slack APIサイトにアクセス: https://api.slack.com/apps にアクセスし、「Create an App」ボタンをクリックします。

2. 「From scratch」を選択: アプリの作成方法で「From scratch」を選びます。

3. アプリ名とワークスペースを選択: アプリ名(例: GAS Bot Demo)と、ボットを作成するSlackワークスペースを選択して「Create App」をクリックします。

4. 「OAuth & Permissions」へ移動: 作成したアプリの設定画面で、左側のメニューから「OAuth & Permissions」を選択します。

5. 「Scopes」の設定: 「Scopes」セクションにある「Bot Token Scopes」で、ボットに必要な権限を追加します。今回は、メッセージの読み取りと投稿を許可するために chat:writechannels:history を追加します。必要に応じて他のスコープも追加してください。

6. トークンの取得: 画面上部に戻り、「Install App」ボタンをクリックし、ワークスペースにアプリをインストールします。インストール後、「Bot User OAuth Token」が表示されるので、これをコピーしておきましょう。これがGASからSlackにアクセスするための「トークン」になります。

2. Google Apps Script (GAS) の準備

次に、GASエディタを開き、Slack Botのロジックを記述します。

1. GASプロジェクトの作成: Googleドライブを開き、「新規」>「その他」>「Google Apps Script」を選択して、新しいスクリプトプロジェクトを作成します。

2. プロジェクト名の変更: デフォルトの「無題のプロジェクト」を分かりやすい名前に変更します(例: Slack Bot Script)。

3. コードの記述: エディタに表示されているデフォルトのコードを削除し、以下のコードを貼り付けます。

const SLACK_BOT_TOKEN = 'YOUR_SLACK_BOT_TOKEN'; // ここに取得したBot Tokenを貼り付け
const CHANNEL_ID = 'YOUR_CHANNEL_ID'; // ボットを応答させたいチャンネルのID

function doPost(e) {
  const message = JSON.parse(e.postData.contents);
  const text = message.event.text;

  if (text) {
    let responseText = '';
    if (text.includes('こんにちは')) {
      responseText = 'こんにちは!何かお手伝いできることはありますか?';
    } else {
      responseText = '「こんにちは」と話しかけてください。';
    }
    postMessageToSlack(responseText);
  }

  return ContentService.createTextOutput(JSON.stringify({ 'response_message': 'Received' })).setMimeType(ContentService.MimeType.JSON);
}

function postMessageToSlack(message) {
  const url = 'https://slack.com/api/chat.postMessage';
  const payload = {
    'channel': CHANNEL_ID,
    'text': message
  };

  const options = {
    'method': 'post',
    'contentType': 'application/json',
    'headers': {
      'Authorization': 'Bearer ' + SLACK_BOT_TOKEN
    },
    'payload': JSON.stringify(payload)
  };

  UrlFetchApp.fetch(url, options);
}

// ボットがイベントを受け取るための設定(初回実行時など)
function getBotInfo() {
  const url = 'https://slack.com/api/bots.info';
  const options = {
    'headers': {
      'Authorization': 'Bearer ' + SLACK_BOT_TOKEN
    }
  };
  const response = UrlFetchApp.fetch(url, options);
  Logger.log(response.getContentText());
}

コードの説明

  • SLACK_BOT_TOKEN: Slack APIから取得したボットトークンを貼り付けます。
  • CHANNEL_ID: ボットを応答させたいSlackチャンネルのIDを指定します。チャンネルIDは、SlackのURL(例: https://yourworkspace.slack.com/archives/CXXXXXXXXXX)の C から始まる部分です。
  • doPost(e): SlackからのHTTP POSTリクエストを受け取る関数です。Slackイベント(メッセージ受信など)がここに送られてきます。
  • JSON.parse(e.postData.contents): 受信したJSONデータをパースします。
  • message.event.text: 受信したメッセージのテキストを取得します。
  • if (text.includes('こんにちは')): メッセージに「こんにちは」が含まれているかチェックします。
  • postMessageToSlack(responseText): Slackにメッセージを投稿する関数を呼び出します。
  • postMessageToSlack(message): 指定されたチャンネルにメッセージを投稿する関数です。Slack APIの chat.postMessage エンドポイントを利用します。
  • 'Authorization': 'Bearer ' + SLACK_BOT_TOKEN': APIリクエストに必要な認証ヘッダーを設定します。
  • getBotInfo(): ボットの情報を取得するための関数です。初回実行時などに、ボットが正しく設定されているか確認するために利用できます。

3. Slack Botの設定(イベントサブスクリプション)

GASで作成したボットがSlackからのメッセージを「受信」できるように設定します。

1. 「Event Subscriptions」へ移動: Slackアプリの設定画面に戻り、左側のメニューから「Event Subscriptions」を選択します。

2. 「Enable Events」をオン: 「Enable Events」をオンにします。

3. 「Request URL」の設定: 「Request URL」にGASスクリプトのデプロイURLを入力します。GASスクリプトの「デプロイ」>「新しいデプロイ」から、タイプを「Webhook」にしてデプロイした際のURLをコピーして貼り付けます。

  • GASスクリプトのデプロイ方法:

1. GASエディタで「デプロイ」>「新しいデプロイ」をクリックします。

2. 歯車アイコンをクリックし、「タイプ」を「Webhook」にします。

3. 「実行権限」は「自分」で構いません。

4. 「デプロイ」ボタンをクリックします。

5. 表示されるWebhook URLをコピーします。

4. 「Subscribe to bot events」の設定: 「Subscribe to bot events」セクションで、「Add Bot User Event」をクリックし、「message.channels」を選択して追加します。これにより、ボットがパブリックチャンネルのメッセージを購読できるようになります。

5. 変更の保存: 設定を保存します。

4. ボットのテスト

これでSlack Botの準備は完了です。実際にSlackチャンネルでテストしてみましょう。

1. Slackチャンネルでボットに話しかける: ボットを招待したチャンネルで、ボットに「こんにちは」と話しかけてみてください。

2. ボットからの応答を確認: ボットが「こんにちは!何かお手伝いできることはありますか?」と応答すれば成功です!

「こんにちは」以外のメッセージを送ると、「「こんにちは」と話しかけてください。」と応答するはずです。

まとめ

今回は、GASを使って簡単な応答ができるSlack Botを作成する方法をご紹介しました。この基本を応用すれば、以下のような様々な機能を持つボットを開発できます。

  • 天気予報ボット: 天気予報APIと連携して、地域ごとの天気を通知する。
  • TODO管理ボット: スプレッドシートと連携して、TODOリストを管理・共有する。
  • リマインダーボット: 指定した時間にメッセージを送信する。

GASはGoogle Workspaceの様々なサービス(Gmail, スプレッドシート, ドキュメントなど)とも連携できるため、Slack Botの可能性は無限大です。ぜひ、あなただけの便利なSlack Botを作成してみてください!

まずは、この基本ボットをベースに、色々な機能を実装していくのがおすすめです。GASとSlack Bot開発の世界をぜひ楽しんでください!

GAS自動化の導入相談

請求書PDF作成、Gmail自動送信、Slack通知、スプレッドシート連携などを業務に合わせて実装できます。

請求書自動生成ツールを見る / SNS自動投稿ツールを見る