第 23 期:应用发布全攻略

Updated on 4/6/2026

[Translation Pending]\n\n## 三种发布方式

graph TB
    App[Dify App] --> Pub{发布方式}
    Pub --> WebApp[🌐 Web App]
    Pub --> Embed[📦 嵌入式]
    Pub --> API[⚡ RESTful API]
    
    WebApp --> W1[独立网页访问]
    WebApp --> W2[自定义域名]
    
    Embed --> E1[iframe 嵌入]
    Embed --> E2[JS Widget 浮窗]
    
    API --> A1[后端集成]
    API --> A2[移动 App]
    API --> A3[微信/钉钉机器人]

Web App 发布

在 App → Publish → Web App 中启用后,用户可通过链接直接访问:

https://your-dify-domain.com/chat/app-token-here

自定义配置

webapp_config:
  title: "AI 智能助手"
  description: "24/7 在线技术支持"
  copyright: "© 2026 Company"
  theme:
    primary_color: "#6366F1"
    chat_bubble_color: "#EEF2FF"
  features:
    text_to_speech: true
    speech_to_text: true
    file_upload: true
    suggested_questions:
      - "如何重置密码?"
      - "产品有哪些定价方案?"
      - "如何联系技术支持?"

嵌入式部署

iframe 嵌入

<iframe
  src="https://dify.your-company.com/chatbot/TOKEN"
  style="width: 100%; height: 700px; border: none; border-radius: 12px; 
         box-shadow: 0 4px 24px rgba(0,0,0,0.1);"
  allow="microphone"
></iframe>

JS Widget 浮窗

<!-- 在页面底部添加浮动聊天按钮 -->
<script>
  window.difyChatbotConfig = {
    token: 'YOUR_APP_TOKEN',
    baseUrl: 'https://dify.your-company.com',
    systemVariables: {
      user_id: getCurrentUserId()  // 传递当前登录用户
    }
  };
</script>
<script src="https://dify.your-company.com/embed.min.js" defer></script>

API 集成

# 完整的后端集成示例 (FastAPI)
from fastapi import FastAPI, Request
from fastapi.responses import StreamingResponse
import httpx

app = FastAPI()
DIFY_API_KEY = "app-xxxxxxxx"
DIFY_BASE_URL = "http://localhost/api"

@app.post("/api/chat")
async def chat(request: Request):
    body = await request.json()
    
    async def stream_response():
        async with httpx.AsyncClient() as client:
            async with client.stream(
                "POST",
                f"{DIFY_BASE_URL}/chat-messages",
                headers={
                    "Authorization": f"Bearer {DIFY_API_KEY}",
                    "Content-Type": "application/json"
                },
                json={
                    "inputs": {},
                    "query": body["message"],
                    "response_mode": "streaming",
                    "user": body.get("user_id", "anonymous"),
                    "conversation_id": body.get("conversation_id", "")
                }
            ) as response:
                async for chunk in response.aiter_bytes():
                    yield chunk
    
    return StreamingResponse(stream_response(), media_type="text/event-stream")