登入開始免費試用
Meta Tech Provider

為 LangChain 代理接上 WhatsApp 號碼

LangChain 代理要使用 WhatsApp,需要兩個部分。收到的訊息經由號碼的 Webhook 送到您的網頁路由,再由路由呼叫代理。代理要執行操作時,可透過 LangChain 的 MCPAdapter 以 OAuth 載入 EasyCoexistence MCP 工具,也可以用該號碼的存取權杖和 phone number id 直接呼叫 Cloud API。

1.4.0

使用 langchain.mcp 命名空間所需的 langchain[mcp] 最低版本,該命名空間目前為 beta。

auth="oauth"

執行完整的 OAuth 2.1 流程:探索、動態客戶端註冊、瀏覽器重新導向及權杖交換。

131047

收件人上次回覆已超過 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 等。

Load the tools into an agent, from LangChain's documented pattern
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 完成這項設定

在 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,而非幾個月。應用程式在手機上仍可繼續運作。

開始免費試用

驗證日期

LangChain 代理接入 WhatsApp,Cloud API