備忘録/にわかエンジニアが好きなように書く

個人的にとりあえず仕組みを知るためにとりあえず動くまで構築や動作をみただけの単なる操作ログです。個人用の備忘録となり、最新の導入手順は個別に確認してください。 ※変な内容や間違いを書いているなどありましたらコメントやご指摘いただけると幸いです。

Dify(1.10)でWebhookトリガーを外部から利用する手順

Dify 1.10.0で Webhook トリガーを外部から利用する手順

1. 前提条件

  • Dify バージョン:1.10.0 系(1.10.0-rc1)
  • 公式 docker-compose.yaml によるオンプレ環境
  • Dify ホスト IP:192.168.10.20
  • Dify コンソールへはブラウザから http://192.168.10.20 でアクセス可能
  • Webhook を送る側(外部/リモート)からも `192.168.10.20 へ到達できること

2. Dify 側の URL 設定

2-1. .env の修正

Dify の docker ディレクトリへ移動します。

cd ~/dify/docker

.env に以下 2 行に対して、ホストIPアドレス or FQDNを追記または修正します。

APP_WEB_URL=http://192.168.10.20
TRIGGER_URL=http://192.168.10.20 ←追加

ポイント:

  • ブラウザからアクセスするときの URL と同じものを指定する (https/ポート番号を変えている場合はそこに合わせる)
  • ここで localhost のままだと、Webhook の URL が http://localhost/triggers/webhook/... になり、外部ホストからは到達できない

2-2. docker-compose.yaml の確認(参考)

docker-compose.yamlTRIGGER_URL が渡っているため env にTRIGGER_URLの追記を行う

grep -n "TRIGGER_URL" docker-compose.yaml

例:

environment:
  TRIGGER_URL: ${TRIGGER_URL:-http://localhost}

.env に値を入れてあるので、デフォルトの http://localhost は上書きされます。

2-3. コンテナの再起動

設定を反映させるため、Dify を再起動させます。 停止中なら起動させます 

docker compose down
docker compose up -d

3. Dify で Webhook トリガー付きワークフローを作成

3-1. 新規ワークフローアプリを作成

  1. ブラウザで http://192.168.10.20 にアクセス

  2. 「アプリを作成する」→「最初から作成」

  3. 「ワークフロー」→適当な名前(例:Webhook テスト)を付けて作成
  4. 「トリガー」
  5. 「Webhookトリガ」

    3-2. 「WEBHOOK トリガー」追加

  6. 確認

※細かい設定やWEBHOOKトリガーノードは後でも追加可)

3-3. 動作確認用の出力ノードを追加  ※試験用でjsonの "foo" : "var"を抜き出せるように設定

1.「Webhook」のコンテンツ設定

  1. 「出力」ノードを追加し、Webhook トリガーと線で接続
  2. 出力ノードのコンテンツを次のように設定

  3. ここではテスト用に、受信した JSON の foo フィールドをそのまま返すようにしている


4. Webhook URL の確認

Webhook トリガーノードを選択すると、右側の設定ペインに URL が表示されます。

例:

http://192.168.10.20/triggers/webhook/???????????
  • ここが http://localhost/... ではなく http://192.168.10.20/... になっていれば設定成功
  • 下に「デバッグ用 URL」として
http://192.168.10.20/triggers/webhook-debug/???????????

も表示されます(どちらも外部から呼び出し可能)


5. 外部サーバからの呼び出しテスト

右上にある「テスト開始」か「アプリ公開」を行った後に実施する。

5-1. curl でのテスト

外部サーバ(例:zabbix)から、次のように POST します。アドレスは環境に合わせて修正

curl -X POST -H "Content-Type: application/json" -d '{"foo":"bar"}'  http://192.168.10.20/triggers/webhook/yt7cdw65-42GTqnDOkroitP2

期待されるレスポンス:

{"status":"success","message":"Webhook processed successfully"}

同様にデバッグ URL に対しても送信できます。

curl -X POST -H "Content-Type: application/json"  -d '{"foo":"bar"}'  http://192.168.10.20/triggers/webhook-debug/yt7cdw65-42GTqnDOkroitP2
$ curl -X POST -H "Content-Type: application/json" -d '{"foo":"bar"}' http://192.168.10.20/triggers/webhook-debug/yt7cdw65-42GTqnDOkroitP2
{"status":"success","message":"Webhook processed successfully"}
$
$ curl -X POST -H "Content-Type: application/json" -d '{"foo":"bar"}' http://192.168.10.20/triggers/webhook/yt7cdw65-42GTqnDOkroitP2
{"status":"success","message":"Webhook processed successfully"}
$

5-2. Dify 側での実行結果確認

  1. ワークフロー画面右上の「テスト実行」または「実行履歴」を開く
  2. Webhook トリガー → 出力ノードまでの実行トレースが表示される
  3. 出力ノードの結果が
{
  "foo": "bar"
}

となっていれば、外部からの Webhook 呼び出しが正常に処理されている

6. Webhook ペイロードからの値の取り出し

Webhook トリガーで受信したデータは、_webhook_raw というオブジェクトに格納されます。

典型的な構造(イメージ):

_webhook_raw = {
  "body": {           // POST された JSON 本体
    "foo": "bar"
  },
  "headers": {
    "X-Forwarded-For": "192.168.xx.xx",          ←リクエストを送ったホスト/中継した装置のIPが表示
    ...
  },
    "query_params": {
    ...
  }
}

ex. Webhook ペイロードからの値をLLMを経由させ応答結果出力