nikkie-ftnextの日記

イベントレポートや読書メモを発信

Actionを設定して、GPTsからSlackに投稿する

はじめに

紗代子ちゃん、誕生日おめでとうございます! nikkieです。

GPTsからSlackへ投稿できることを知り、どう設定しているのか気になりました。
設定方法が分かったのでアウトプットします。

目次

もしかして、GPTsからSlackに投稿、できちゃう?

生成AI忘年会1のスライドを見ていて気づいたのです。

ActionでSlack投稿してない、これ!?

以前の素振り2から、ActionはGPTsが外部のAPIを呼び出す機構と理解していました。

なので、SlackのAPIを叩いて投稿するのはAction使えば当然できるよねという感想なのですが、どう設定したのかがめちゃめちゃ気になりました。
私のGPTにもSlack投稿させたい!

YouTubeより「GPTs Slack Message Sender」

ズバリな動画が見つかりました。

動画の概要欄にはActionの設定に使うYAML定義があります
これはそのままで使えるものでした。
公開に感謝です。

検証:GPTsからSlackに投稿

Slack Appの設定

Python Slack SDK」のチュートリアルが画像が多くて分かりやすいです。
Slack Appを作るところまで進めます3

  • https://api.slack.com/apps?new_granular_bot_app=1 から「Create a Slack App」
  • サイドメニューの「OAuth & Permissions」から「Scopes」>「Bot Token Scopes」に「Add an OAuth Scope」
    • chat:write scopeのみ追加(権限は最小限)
  • サイドメニュー「OAuth & Permissions」で「Install to Workspace」
    • Bot User OAuth Token」が表示される

curlでSlack投稿できる!

Bot User OAuth Token」を使って、curlコマンドで投稿できます。

% curl -X POST -H 'Authorization: Bearer xoxb-bot-user-oauth-token' \
-H 'Content-type: application/json' \
--data '{"channel":"experiments","text":"こんにちは from curl"}' \
https://slack.com/api/chat.postMessage

GPTsのActionを設定

OpenAPI仕様を記載して、上のcurlに相当するHTTPリクエストをGPTsが送れるようにしています。

Authenticationは「API Key」を選択。
curlでBearerのAuthorizationヘッダーを使っているので、Auth TypeにBearerを選択し、「Bot User OAuth Token」を入力しました。

SchemaはYouTubeから持ってきます。
スケジュール投稿は今はいらないので、投稿だけに削りました。
またblocksも今後追加できればいいので、いったん削っています。

Available actionsがこんな感じになります

これで設定完了。

Slack投稿の設定の検証目的なので、Instructionsは雑にこんな感じです(ブラッシュアップの余地大いにあり)

普通に会話します。

「Slackに投稿して」と言われたら直前の会話をSlackのexperimentsチャンネルに投稿します。
チャンネルの指定があった場合はそのチャンネルに投稿してください

これでGPTがSlackに投稿するようにできました!

OpenAPI仕様について、教えてGPT-4!

別のチャットセッションで聞いています。

以下のOpenAPI仕様について、どんな設定をしているのか、Web開発の経験はあるがOpenAPIには入門したばかりのエンジニア向けに説明してください

このOpenAPI仕様は、SlackのようなメッセージングシステムのAPIを定義しています。OpenAPIは、RESTful APIのための仕様言語であり、APIの構造を記述するために使用されます。ここでの設定を、Web開発経験はあるがOpenAPIに初めて触れる方向けに説明します。

1. **基本情報 (`info`)**:
   - `title`: APIの名前。ここでは"Slack-like Messaging API"。
   - `version`: APIのバージョン。ここでは"1.2.0"。
   - `description`: APIの簡単な説明。このAPIはチャットチャンネルでメッセージを送るためのものです。

2. **サーバー情報 (`servers`)**:
   - APIがホストされているサーバーのURLと説明。この例では、`https://slack.com/api`がメインサーバーとして設定されています。

3. **パス (`paths`)**:
   - APIで利用可能なエンドポイント(パス)とその操作。ここでは、`/chat.postMessage`エンドポイントが定義されています。
   - `post`: このエンドポイントはHTTP POSTメソッドを使用します。
   - `summary`: エンドポイントの簡単な説明。
   - `operationId`: この操作の一意なID。ここでは"sendMessage"。
   - `tags`: APIの機能を分類するためのタグ。この操作は"Messages"タグに分類されます。

4. **リクエストボディ (`requestBody`)**:
   - このエンドポイントではリクエストボディが必須です。
   - `application/json`: JSON形式のデータを受け入れます。
   - `schema`: リクエストボディの構造。ここでは、`channel`(送信先チャンネルのID)と`text`(送信するテキストメッセージ)の2つのプロパティが必要です。

5. **レスポンス (`responses`)**:
   - 異なるHTTPステータスコードに対するレスポンスの定義。
   - `200`: 成功時。送信されたメッセージのID(`message_id`)を含むJSONオブジェクトを返します。
   - `400`: 不正なリクエスト。
   - `500`: サーバー内部のエラー。

この仕様は、クライアント側の開発者がAPIの使用方法を理解しやすくするために設計されています。APIの機能、リクエストとレスポンスのフォーマット、エラーハンドリングなどが明確に記述されています。これにより、APIの利用者は、エンドポイントの目的、必要なパラメータ、期待されるレスポンスの種類を正確に知ることができます。

いまはGPT-4の助けを借りまくりですが、少しずつ読み書きできるようになっていきたいな〜

無茶振りして、SlackのようなメッセージングAPIのOpenAPI仕様を表現してもらいました!

終わりに

GPTsのActionの設定で、Slackに投稿できました!
API呼び出せるわけですもんね、これくらいできても全然不思議じゃないです。

今回、Slackの設定とOpenAPIの仕様記載くらいしかしてないんですよね。
これがノーコードか〜


  1. 見つかった資料もまとめています。
  2. 素振りがお役に立ったようで嬉しく思います。
  3. 以前Qiitaに記事を書いていました