為 LangChain 代理接上 WhatsApp 號碼
LangChain 代理要使用 WhatsApp,需要兩個部分。收到的訊息經由號碼的 Webhook 送到您的網頁路由,再由路由呼叫代理。代理要執行操作時,可透過 LangChain 的 MCPAdapter 以 OAuth 載入 EasyCoexistence MCP 工具,也可以用該號碼的存取權杖和 phone number id 直接呼叫 Cloud API。
使用 langchain.mcp 命名空間所需的 langchain[mcp] 最低版本,該命名空間目前為 beta。
執行完整的 OAuth 2.1 流程:探索、動態客戶端註冊、瀏覽器重新導向及權杖交換。
收件人上次回覆已超過 24 小時時,Meta 傳回的錯誤。
LangChain 代理如何載入 WhatsApp 工具?
透過 MCPAdapter,即 LangChain 的 MCP 用戶端。它會把 MCP 伺服器的工具,以一般 LangChain 工具的形式交給 create_agent。這需要 langchain[mcp] 1.4.0 或以上版本,而且目前仍屬 beta。
驗證工作交由 FastMCP 處理。在用戶端傳入 auth="oauth",就會執行完整的 OAuth 2.1 流程:探索、動態客戶端註冊、瀏覽器重新導向及權杖交換。EasyCoexistence MCP 伺服器正是採用這種方式,因此不用建立或貼上任何金鑰。預設情況下,權杖只存放在記憶體中,每次執行都要重複瀏覽器步驟;若使用附有權杖儲存庫的 FastMCP OAuth 提供者,就能在多次執行之間保留權杖。
載入後,代理會看到各工具及其說明:首先是 list_numbers,因為其他所有工具都需要它提供的 connection_id,然後是 send_message、send_template、list_templates、get_number_health 等。
from fastmcp.client import Client
from langchain.agents import create_agent
from langchain.mcp import MCPAdapter
URL = "https://easycoexistence.com/api/mcp"
async def build_agent(model: str):
async with MCPAdapter(Client(URL, auth="oauth")) as adapter:
tools = await adapter.list_tools()
return create_agent(model, tools)收到的 WhatsApp 訊息如何傳到代理?
要靠 Webhook,因為 MCP 做不到。該協定只有請求和回應,伺服器無法在客戶來訊時主動喚醒用戶端。
請把號碼的 Webhook 目的地設為您自己應用程式中的一條路由,並在 URL 路徑中加入一段很長的隨機密鑰。路由會以原始 challenge 回應 Meta 的驗證 GET 請求,接收每個 POST、立即傳回 200,並把工作排入隊列。之後由背景工作程式從負載中取出寄件者和文字,連同它們呼叫代理,並以寄件者的號碼作為對話 ID,讓記憶按客戶分開保存。
請檢查 URL 中的密鑰,而不是 X-Hub-Signature-256 標頭。Meta 使用 Tech Provider 的應用程式密鑰簽署,而該密鑰不會與人分享,所以客戶無法驗證這個標頭。
代理應該經 MCP 還是 Cloud API 傳送訊息?
兩者皆可,分別在於規則由誰掌握。MCP 工具把 WhatsApp 的規則寫在說明中,例如 send_message 只能在 24 小時窗口內使用,而 send_template 用於聯絡未曾來訊的人。模型讀過這些說明,大多數時候都能選對工具,當代理可以自由決定時,這一點很有幫助。
如果代理的工作範圍很窄,例如一律回覆剛來訊的人,那麼自行寫一個簡單工具,以該號碼的存取權杖向 Cloud API 的訊息端點發送請求會更簡單。這樣窗口檢查就放在您的程式碼中,而絕不能違反的規則本來就應該放在這裡。窗口外傳送自由格式訊息會傳回錯誤 131047,客戶完全看不到任何內容。
常見錯誤
- 期望 MCP 傳送收到的訊息。沒有 Webhook 路由,代理永遠收不到客戶的來訊。
- 把 OAuth 權杖留在伺服器記憶體中。每次重啟都要重新以瀏覽器登入,請用權杖儲存庫保存。
- 所有客戶共用同一個對話。請以寄件者的號碼作為代理記憶的鍵。
在 easycoexistence.com 連接號碼,把 Webhook 目的地設為您的路由,再以一次 OAuth 登入把 MCP 工具載入代理。每個號碼每月 US$ 9 起,隨號碼增加降至 US$ 1,首 3 天免費。
常見問題
只限 Python 嗎?
MCPAdapter 的範例是 Python。Webhook 和 Cloud API 都是普通 HTTP,所以 LangChain 支援的任何語言都可以負責接收和傳送。
代理每次都需要 list_numbers 嗎?
它需要 connection_id,而 list_numbers 是取得 connection_id 的唯一途徑。只有一個號碼時,代理在開始時呼叫一次即可。
團隊仍然可以用手機回覆嗎?
可以。Coexistence 讓 WhatsApp Business 應用程式繼續運作,手機上的回覆會以 echo 事件送到您的路由,代理可以將其納入考慮。
EasyCoexistence 會讀取對話嗎?
不會。Meta 直接把訊息送到您的路由,訊息內容絕不會儲存在我們這邊。MCP 工具只讀取帳戶和號碼的狀態。
繼續閱讀
準備開始嗎?
幾分鐘內設定 WhatsApp Coexistence,而非幾個月。應用程式在手機上仍可繼續運作。
開始免費試用驗證日期