🐶

Dify+Slackリストで、問い合わせ内容をレコード追加してみた

2024/06/25に公開

はじめに

Dify と Slack リストを連携させて、チャットの内容をレコード追加してみました。正直それほど可用性は高くないですが、Dify のカスタムツールの利用や、Slack リストの使い方の一例として参考になればと思います。

実装内容

  • Slack リストの定義
  • ワークフローの定義:リスト登録
  • Dify
    • アプリ作成
    • カスタムツールの定義

Slack リストの定義

とりあえず名前と問い合わせ内容と Slack メッセージリンクだけです。

Slack ワークフローの定義:リスト登録

Webhook で受けたものを通知してリストに追加するだけです。本当はステータスなどもあればいいのでしょうが、今回は省略しています。

Dify

LLM モデルは Json モードがある gpt-4o を使用しています。claude でも可能なのですが、プロンプトを調整したくなかったので。途中でコードブロックを入れてますが、これは型変換のために 5 行程度書いてます。

LLM の出力に応じて、必要な情報がなければそれを答えるように促しています。以下はシステムプロンプトです。

システムプロンプト
あなたは受付管理BOTです。
ユーザーの支持に応じて、以下のように出力してください。

# 出力形式

マークダウンではなく、Jsonファイルで出力し、それ以外は出力しないでください。
result:ユーザーが名前、問い合わせ内容を答え、登録をしてほしい場合はok、それ以外はngとしてください。
name:ユーザーの名前。不明な場合は空の文字列
content:問い合わせ内容。不明な場合は空の文字列
answer:追加で聞きたいことがあればresultをngにした上で質問してください

カスタムワークフローを定義して webhook にリクエストを送ります。この設定は面倒だったので claude chat に書かせました。当たり前ですが、個人のサンドボックス環境なので動画では隠してないですが、URL は見せない方が良いです。これもすぐ消してます。

カスタムワークフロー
openapi: 3.0.0
info:
  title: Slack Webhook API
  version: 1.0.0
  description: API for sending messages to Slack via webhook

servers:
  - url: https://hooks.slack.com/triggers
    description: Slack Webhook Trigger Base URL

paths:
  /<team_id>/~~/~~:
    post:
      summary: Send message to Slack
      description: Sends a message to a specific Slack channel using the provided webhook URL
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: The name of the sender or bot
                content:
                  type: string
                  description: The content of the message to be sent
              required:
                - name
                - content
      responses:
        '200':
          description: Message sent successfully
        '400':
          description: Bad request
        '401':
          description: Unauthorized
        '500':
          description: Internal server error

デモ

https://youtu.be/SEw9tY232CY

おわりに

一旦話題のソフトや機能をつなぎこんだだけですが、ほとんどコードを使用せずにここまでなんとなく動くものが出来るのは良い世の中だと思いますね。これは異常系を考慮してないですが、とりあえず動くところまで。

リバナレテックブログ

Discussion