【意外と簡単!】SlackとChatGPTを連携してGoogleカレンダーを操作する方法
はじめに
この記事では、SlackとChatGPTを連携させてSlackの会話の中からGoogleカレンダーに予定を作成する方法をステップバイステップで解説します。
実際には、Slack上で「今日の20時からMTGを追加して」とボットに命令すると実際にGoogleカレンダーに予定を作成してくれます。
このSlackボットでは以下のことができます。
Slack上で作成されたBotをメンションし自然言語の命令によってGoogleカレンダーへのイベント自動作成
メンションされたユーザーを自動的にイベントの招待者として追加(メアドを直接入力したユーザも招待されます)
ダイレクトメッセージ、チャンネル両方に対応
Googleカレンダーのイベント作成に関係ない場合は、普段のChatGPTとしてメッセージに回答
この記事の対象者:
Slackを日常業務に活用しているチームや組織
ChatGPTやその他のAI技術を利用して業務効率化を図りたい開発者や技術者
自動化されたチャットボットに興味があるすべての人
GASなどを使い業務効率化したい方
必要な準備:
Googleアカウント:GASスクリプトを作成・実行するために必要です。
Slackアカウント:ボットを追加するチームまたはワークスペースが必要です。
OpenAIのAPIキー:ChatGPTとの連携に必要となります。APIキーはOpenAIの公式ウェブサイトから取得可能です。
手順① OpenAI APIの設定
ChatGPTとの連携には、OpenAIのAPIキーが必要になります。以下のステップに従って、OpenAI APIの設定を行います。
1. OpenAIアカウントの作成
まだOpenAIのアカウントを持っていない場合は、OpenAIの公式ウェブサイトにアクセスしてアカウントを作成します。アカウント作成は無料ですが、APIの使用には料金がかかります。
2. APIキーの取得
アカウントを作成したら、OpenAIのダッシュボードにログインし、「API」セクションに移動します。ここで「New API Key」ボタンをクリックして新しいAPIキーを生成します。生成されたAPIキーは、後ほどGoogle Apps Script(手順③)で使用するため、保存しておきます。
次に、Slack APIの設定をします。
手順② Slack APIの設定
利用ブラウザでSlackアカウントにログイン後、Slack Appsページにアクセスします。アクセス後、画面右側にある「Create New App」ボタンを選択します。。
「From Scratch」を選択し、任意のApp Nameを入力し、Slackのワークスペースを選択したら「Create App」ボタンを押下します。
「Basic Information」ページに遷移後、「Permissions」ボタンを押下し「OAuth & Permissions」ページに移動する。
「Scopes」の「Bot Token Scopes」に以下を追加する。
app_mentions:read
channels:history
chat:write
groups:history
im:history
mpim:history
users:read
users:read.email
上記のようにScopeの設定が完了したら、同画面内の「Install to Workspace」ボタンを押下し、遷移後の画面で「許可する」ボタンを押下してください。
その後、再び「OAuth & Permissions」ページに戻り「OAuth Tokens for Your Workspace」下のBot User OAuth Tokenの値を保存しておきます。(手順③で使用します)
チャットボットとのダイレクトメッセージを許可する
Slack Appの「App home」ページでAllow users to send Slash commands and messages from the messages tabにチェックを入れてください。botへのDMができるようになります。
作成したSlackボットを特定のチャンネルに追加します。
追加が終わり次第、作成したBotのプロフィール画面に移動し、メンバーIDとチャンネルIDをコピーし、保存します。(手順③で使用します)
こちらで、一旦Slack Appの設定は完了し、GASの設定をします。
手順③ エディタの設定
エディタの準備する
以下のリンクからGoogle Apps Script(GAS)をコピーします。
プロジェクト設定のスクリプトプロパティに各値を設定する
コピーされたスプレットシートのメニュータブから、拡張機能>App Scriptを押下しGASのエディタを開きます。
サイドバーから「プロジェクトの設定」を開き「スクリプト プロパティ」に以下の値を追加します
BOT_AUTH_TOKEN : 手順②で取得したもの(xoから始まるもの)
BOT_CHANNEL_ID : 手順②で取得したもの
BOT_MEMBER_ID : 手順②で取得したもの
OPENAI_SECRET_KEY : 手順①で取得したもの(skから始まるもの)
作成したGASをWebアプリとしてデプロイする
デプロイの仕方はこちらの記事の手順②を参考にします。
デプロイが完了したら、ウェブアプリURLをコピーします。(手順④で使用します)
手順④ Slack APIの設定を完了させる
「Event Subscriptions」ページに移動してトグルをOnに変更し、Request URLに手順③でコピーしたウェブアプリURLを貼り付けます。
また、「Subscribe to bot events」に以下の値を登録してください。
message.channels
message.groups
message.im
message.mpim
最後に下にある、「Save Changes」を押下し、保存します。
こちらで全ての設定が完了です。
試してみる
実際に、#generalチャンネルでChatGPT botをメンションして以下の命令を送信します。
そうするとイベントを作成したとのリプライを受信し、実際に自分のGoogleカレンダーにイベントが作成されます。
また、イベント作成に関係のないメッセージには、イベントを作成せずにChatGPTが回答を生成します。
コードの解説
GASのコードをざっくりと解説します。
fetchMsgsInThread関数
Slack APIを使用して、指定されたチャンネルのスレッド内のメッセージを取得します。
成功時にはメッセージの配列を返し、失敗時にはエラーを投げます。
fetchSlackMsgsAskedToBot関数
トリガーメッセージがBotに対する直接の問い合わせか、またはBotが関与するスレッド内のメッセージかを判定します。
Botに対する問い合わせが含まれるメッセージのみをフィルタリングして返します。
trimMentionText関数
Slackメッセージからメンションの部分を除去し、テキストの内容のみを抽出します。
メッセージの前処理に役立ち、ChatGPTへのクエリ作成を容易にします。
parseSlackMsgsToChatGPTQuesryMsgs関数
SlackメッセージをChatGPTへの問い合わせに適した形式に変換します。
メッセージ送信者がBotかユーザーかに応じて、それぞれ「assistant」または「user」という役割を割り当てます。
fetchAIAnswerText関数
Slackからのトリガーメッセージに基づいてChatGPTからの応答を取得し、適切なアクションを実行します。
ChatGPTへの問い合わせには、システムメッセージとして日付とロケール情報を含め、会話のコンテキストを提供します。
handleAIResponse関数
ChatGPTからの応答を処理し、必要に応じてGoogleカレンダーにイベントを追加したり、Slackに応答メッセージを投稿します。
応答に含まれる関数呼び出し、対応するアクションを実行します。
addEventToGoogleCalendar関数
Googleカレンダーに新しいイベントを追加します。
イベントのタイトル、開始時間、終了時間、招待者のメールアドレスを受け取り、カレンダーにイベントを作成します。
slackPostMessage関数
Slackの指定されたチャンネルにメッセージを投稿します。
doPost関数
SlackからのイベントWebhookを処理するためのエントリポイントです。
受け取ったイベントがメッセージタイプの場合、処理を行い、それ以外の場合は「OK」を返して処理を終了します。
fetchUserEmail関数
特定のユーザーIDに関連付けられたSlackユーザーのメールアドレスを取得します。
Slack APIを利用してユーザー情報を取得し、その中からメールアドレスを抽出します。
processMentionsAndGetEmails関数
メッセージテキスト内のメンションからユーザーIDを抽出し、それに関連するメールアドレスを取得します。
メンションされた各ユーザーのメールアドレスを配列として返します。
全体のフロー
Slackイベントの受信: Slackからのイベント(ユーザーからのメッセージ)がGoogle Apps ScriptにWebhookを通じて送信されます。
メッセージの抽出: 受信したイベントからBotへの問い合わせが含まれているメッセージを特定し、抽出します。
ChatGPTへ連携: 抽出したメッセージをChatGPTが理解できる形式に変換し、ChatGPTに送られます。
ChatGPTからの応答の処理: ChatGPTからの応答を受け取り、応答に含まれる指示に基づいて適切なアクション(例えば、Googleカレンダーにイベントを追加)を実行します。
Slackへの応答の投稿: 行ったアクションの結果をSlackの適切なチャンネルやスレッドに投稿します。
終わりに
この記事を参考にご自身でOpenAIのAPIを使用したSlack Botの開発する際の一助になれば、幸いです。
最後までご精読いただき、ありがとうございました。
お仕事の相談・案件などはX(ツイッター)のDMからお願いします。
X:https://twitter.com/junichikawaAI
参照:
https://github.com/toono-f/chatgpt-bot/blob/main/chat-bot.js
Image Credit: Open AI Inc., Google LLC, and Slack Technologies, LLC
この記事が気に入ったらサポートをしてみませんか?