← 返回首頁 部落格 English version

飛書機器人 + 自部署 AI 服務 30 分鐘復現

從建立企業自建應用到收到第一條 AI 訊息(含 4 個報錯修法)

2026-07-14 · Leo · 教程 · 15 分鐘閱讀
TL;DR — 這不是教程,是一份 30 分鐘復現清單:飛書開放平臺 → 建立自建應用 → 配 Webhook → 跑通 AI 服務 → 在 IM 裡收到第一條訊息。文末 4 個常見 5xx 報錯和修法,每一條都來自我自己踩過的坑。

第 1 步:飛書開放平臺建立應用

📌 建立企業自建應用 5 分鐘
  1. 訪問 open.feishu.cn → 用企業管理員掃碼登入
  2. 開發者後臺 → 建立企業自建應用 → 填名稱/icon/簡介
  3. 記錄:App IDApp Secret(關頁面後再看不到)
  4. 許可權管理 → 勾選:im:message(收發訊息)、im:message.group_at_msg(群 @ 機器人)、im:message.p2p_msg(私聊)
  5. 事件訂閱 → 新增事件 im.message.receive_v1(使用者發訊息觸發)

第 2 步:跑一個能 echo 的最小 Webhook

🐍 Python Flask 30 行 echo 服務 5 分鐘

先跑通 Webhook 連通性驗證,再接 AI:

from flask import Flask, request, jsonify
import lark_oapi as lark

app = Flask(__name__)

@app.route("/webhook", methods=["POST"])
def webhook():
    # 1) 驗證 URL(首次會帶 challenge 欄位,原樣返回)
    data = request.json
    if data.get("type") == "url_verification":
        return jsonify({"challenge": data["challenge"]})

    # 2) 處理訊息事件
    event = data.get("header", {}).get("event_type")
    if event == "im.message.receive_v1":
        msg = data["event"]["message"]
        sender = msg["sender"]["sender_id"]["open_id"]
        text = msg["content"]["text"]

        # 這裡先 echo,正式版本替換為 AI 呼叫
        reply_text = f"你剛說了:{text}"

        send_message(sender, reply_text)

    return jsonify({"code": 0})

def send_message(receive_id, text):
    # 調 lark SDK 發訊息(省略,你有自己的實現即可)
    pass

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=8080)

第 3 步:用 ngrok 把本地服務暴露給飛書

🌐 公網回撥 URL2 分鐘
  1. 下載 ngrok(或 bore/cloudflared 等)
  2. 執行:ngrok http 8080
  3. 複製 https://xxx.ngrok.io 類似 URL,填到飛書"事件訂閱 → 請求網址"
  4. 點飛書"測試連線" → 看到 {"code": 0} 即通

第 4 步:把 echo 替換成 AI 呼叫

🤖 接 AI 服務 10 分鐘

替換 webhook() 函式里的 echo 邏輯:

import requests

def ask_ai(prompt):
    """呼叫自部署 AI 服務(你的服務地址)"""
    resp = requests.post(
        "https://your-ai-service/api/chat",
        json={"message": prompt, "max_tokens": 1000},
        timeout=30
    )
    return resp.json()["reply"]

# 在 webhook() 裡:
reply_text = ask_ai(text)

第一次跑通後,再加:

第 5 步:釋出版本、上線

🚀 上線5 分鐘
  1. 飛書開發者後臺 → 版本管理 → 建立版本(v1.0.0)
  2. 說明文字:"AI 助手內測版,僅對指定使用者可見"
  3. 提交稽核 → 企業管理員審批
  4. 稽核透過後 → 在 IM 找機器人私聊 / 群 @,問一個問題 → 收到 AI 回覆

踩過的 4 個報錯(30 分鐘夠踩完)

報錯 1:飛書"測試連線"返回校驗失敗

Webhook 驗證時飛書會發 {type: "url_verification", challenge: "..."},必須 原樣返回 challenge 欄位。漏掉就失敗,且沒有任何錯誤提示。

✅ 修法:永遠先處理 type == "url_verification" 分支,再處理業務邏輯。
報錯 2:App Secret 錯誤(230001)

飛書的 tenant_access_token 透過 App ID + App Secret 換取。App Secret 輸錯 → 230001 報錯。但頁面只顯示"呼叫失敗",看不出具體原因。

✅ 修法:把 App Secret 存環境變數,別硬編碼。每次更新時同步更新程式碼。
報錯 3:訊息發出去了,但 IM 裡看不到

最常見:發的 receive_id_type 錯了。飛書區分 open_id / user_id / email / chat_id 四種 ID 型別,混用就"成功但收不到"。

✅ 修法:訊息事件 payload 裡 sender_id 物件裡有各種 ID,按傳送目標選對型別。私聊用 open_id,群用 chat_id
報錯 4:頻繁呼叫撞限頻(230020)

飛書按租戶限頻 100 QPS。客服群裡 20 個人同時 @ 機器人問問題,瞬間超出。

✅ 修法:你的 AI 服務前面加令牌桶 / 滑動視窗(按租戶或機器人),削峰到 80 QPS。超限後給使用者回"稍等我查一下"——比直接掛掉強。

30 分鐘後你會有...

下一步(按重要性排):

  1. 加知識庫(最重要,能解決 80% 業務問題)
  2. 加記憶(使用者上次問過什麼)
  3. 接其他 IM(企微 / 釘釘)
🤝 整過了一遍,仍然想找現成的?
📧 278946228@qq.com(一般 24 小時內回)