import requests
import json
import os
from dotenv import load_dotenv
load_dotenv()
API_KEY = os.environ.get("DIFY_API_KEY")
APP_ID = os.environ.get("APP_ID")
BASE_URL = "https://api.dify.ai/v1"
CHAT_ENDPOINT = f"{BASE_URL}/chat-messages"
user_input = "おはようございます。"
payload = {
# ユーザーからのメインの質問(ワークフローの {{query}} に対応)
"query": user_input,
# ワークフロー内の他の入力ノードに渡す変数(オプション)
"inputs": {
# 例: ワークフロー内の変数名が 'context' の場合、ここで値を渡せる
"context": "Null"
},
# ユーザーIDは必須(セッション管理用)。適当なUUIDなどを指定
"user": "user_python_script_001",
# ストリーミングを無効にする
"response_mode": "blocking",
}
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
try:
# --- API呼び出し ---
response = requests.post(
CHAT_ENDPOINT,
headers=headers,
data=json.dumps(payload)
)
response.raise_for_status() # HTTPエラーが発生した場合に例外を発生させる
data = response.json()
# --- 出力の取得 ---
if data and 'answer' in data:
print("✅ ワークフローの出力 (回答):")
print(data['answer'])
else:
print("⚠️ ワークフローからの回答が見つかりません。")
print(data)
except requests.exceptions.HTTPError as errh:
print(f"HTTP エラーが発生しました: {errh}")
print(response.text)
except requests.exceptions.RequestException as err:
print(f"リクエスト中にエラーが発生しました: {err}")
$ python3 dify-llm.py
✅ ワークフローの出力 (回答):
おはようございます。今日は何のお手伝いができますか?
アプリ(iOS/Android)から直接Difyを呼び出すのではなく、バックエンドサーバー(Python)を経由させて、そのサーバーでTTS(Text-to-Speech、音声合成)処理を行ってからアプリに返す構成の方が、より一般的で推奨されている。
なるほど、Dify APIの理解度が一気に高まった。


