🐶
Dify+Slackリストで、問い合わせ内容をレコード追加してみた
はじめに
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
デモ
おわりに
一旦話題のソフトや機能をつなぎこんだだけですが、ほとんどコードを使用せずにここまでなんとなく動くものが出来るのは良い世の中だと思いますね。これは異常系を考慮してないですが、とりあえず動くところまで。
Discussion