こんにちは!
久しぶりの投稿です。
日々Chat GPTを使っている中で、単純な実装方法などの情報はあまり価値がないのではと思い、記事投稿をストップしてました。
今回は「チャットGPTを用いて、スラック通知のスクリプトを最速で作成する方法」を共有します。
メインはチャットGPTを開発プロセスにどう組み込んだら良いかという、初心者向けの内容です。
Contents
Chat GPTで使ってGASで一つのスレッドに対するslack通知を実装
まずは大雑把にChat GPTに質問してみる
何回でもやり直せるので、とりあえずChat GPTに質問して期待する回答が得られるか確認してみる。
※GPT4.0で検証してます。
質問①
slack APIで複数回送信する。
1回目の投稿に対して、2回目以降はスレッドに対してメッセージを送信したい
回答①
Slack APIを使用して、最初のメッセージに対してスレッド内で複数回メッセージを送信するには、以下のステップに従います。
最初のメッセージの送信:
最初に、通常通りSlack API(通常はchat.postMessageエンドポイント)を使用してメッセージを送信します。最初のメッセージのts(timestamp)の取得:
最初のメッセージが正常に送信されると、Slack APIのレスポンスにはそのメッセージのタイムスタンプ(tsフィールド)が含まれます。このタイムスタンプは、後続のメッセージをスレッドに投稿する際に必要です。スレッドへのメッセージの送信:
2回目以降のメッセージを最初のメッセージのスレッドに投稿するには、そのメッセージのペイロードにthread_tsパラメータを含め、その値として最初のメッセージのタイムスタンプを設定します。以下にJavaScriptの例を示します。
Google Apps Script (GAS) で Slack API を使用してメッセージを送信し、そのレスポンスを UrlFetchApp.fetch を使って取得するには、以下の手順に従います。ES2016以降のJavaScriptの構文を使用します。メッセージ送信関数の定義:
Slack API の chat.postMessage エンドポイントを使用してメッセージを送信する関数を定義します。UrlFetchApp.fetch を使用して HTTP リクエストを行います。レスポンスの処理:
fetch メソッドのレスポンスから JSON を取得し、必要なデータ(例えばスレッドのタイムスタンプ)を抽出します。以下は GAS での実装例です:
// Slack APIを使用してメッセージを送信する関数 async function sendMessageToSlack(token, channel, text, thread_ts = null) { const payload = { token: token, channel: channel, text: text, thread_ts: thread_ts }; // Slack APIへのリクエストを送信 const response = await fetch('https://slack.com/api/chat.postMessage', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${token}` }, body: JSON.stringify(payload) }); return response.json(); }
この例では、最初のメッセージの送信後にそのtsを取得し、それを使用して後続のメッセージを同じスレッドに投稿しています。この方法で、一連のメッセージを同じスレッド内に整理して投稿することができます。
質問①
slack APIで複数回送信する。
1回目の投稿に対して、2回目以降はスレッドに対してメッセージを送信したい
期待する回答が得られたら追加質問することで調整する
ある程度は期待する回答が得られたのですが、GAS用の関数を使ったほうが楽だったので、追加の質問をしてみます。
最初の質問で「GASで」という一言が入れられたら、一回のやり取りで済んだかもしれません。
※回答には確率の概念があるので、毎回同じ回答が得られるとは限りません。
質問②
response.json()ではなく、UrlFetchApp.fetchで取得したい。
ES2016以降の書き方で。
回答②
Slack APIを使用して、最初のメッセージに対してスレッド内で複数回メッセージを送信するには、以下のステップに従います。
最初のメッセージの送信:
最初に、通常通りSlack API(通常はchat.postMessageエンドポイント)を使用してメッセージを送信します。最初のメッセージのts(timestamp)の取得:
最初のメッセージが正常に送信されると、Slack APIのレスポンスにはそのメッセージのタイムスタンプ(tsフィールド)が含まれます。このタイムスタンプは、後続のメッセージをスレッドに投稿する際に必要です。スレッドへのメッセージの送信:
2回目以降のメッセージを最初のメッセージのスレッドに投稿するには、そのメッセージのペイロードにthread_tsパラメータを含め、その値として最初のメッセージのタイムスタンプを設定します。以下にJavaScriptの例を示します。
function sendMessageToSlack(token, channel, text, thread_ts = null) { const payload = { token: token, channel: channel, text: text, thread_ts: thread_ts }; const options = { method: 'post', contentType: 'application/json', headers: {'Authorization': `Bearer ${token}`}, payload: JSON.stringify(payload) }; const response = UrlFetchApp.fetch('https://slack.com/api/chat.postMessage', options); const jsonResponse = JSON.parse(response.getContentText()); return jsonResponse; } // トークンとチャンネルIDを設定 const token = 'YOUR_SLACK_TOKEN'; const channel = 'CHANNEL_ID'; // 最初のメッセージを送信 const firstMessageResponse = sendMessageToSlack(token, channel, '最初のメッセージ'); const thread_ts = firstMessageResponse.ts; // 最初のメッセージのタイムスタンプを取得 // スレッドに追加のメッセージを送信 sendMessageToSlack(token, channel, 'スレッド内の2回目のメッセージ', thread_ts); sendMessageToSlack(token, channel, 'スレッド内の3回目のメッセージ', thread_ts);
分からない点があったら、「〇〇についてわかりやすく教えて。」と質問すれば、詳しく解説してくれます。
不明点の質問例
slackのチャンネルIDの確認方法についてわかりやすく教えて。
こんな感じでChat GPTを利用すると、簡単に実装することができます。
ただ、Chat GPTのいう事が全て正しいわけではないので、必要に応じて裏取りすることをおすすめいたします。
以上、お疲れさまでした〜🍵