未分類

【GAS】チャットGPTを用いて、slackで一つのスレッドに連続通知するスクリプトを最速実装してみた

スポンサーリンク

こんにちは!

久しぶりの投稿です。
日々Chat GPTを使っている中で、単純な実装方法などの情報はあまり価値がないのではと思い、記事投稿をストップしてました。

今回は「チャットGPTを用いて、スラック通知のスクリプトを最速で作成する方法」を共有します。
メインはチャットGPTを開発プロセスにどう組み込んだら良いかという、初心者向けの内容です。

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のいう事が全て正しいわけではないので、必要に応じて裏取りすることをおすすめいたします。

以上、お疲れさまでした〜🍵

スポンサーリンク

-未分類
-,

© 2024 エンジニア×ライフハック Powered by AFFINGER5