Zaloguj sięRozpocznij bezpłatny okres próbny
Meta Tech Provider

Daj agentowi LangChain numer WhatsApp

Agent LangChain dostaje WhatsApp w dwóch częściach. Przychodzące wiadomości trafiają na Twoją trasę w aplikacji przez webhook numeru, a trasa uruchamia agenta. Aby działać, agent ładuje narzędzia MCP EasyCoexistence przez MCPAdapter z LangChain z użyciem OAuth albo wywołuje Cloud API bezpośrednio, z tokenem numeru i identyfikatorem numeru telefonu (phone number id).

1.4.0

Minimalna wersja langchain[mcp] dla przestrzeni nazw langchain.mcp, która jest w wersji beta.

auth="oauth"

Przeprowadza pełny przepływ OAuth 2.1: wykrywanie, dynamiczną rejestrację klienta, przekierowanie w przeglądarce i wymianę tokenu.

131047

Błąd zwracany przez Meta, gdy od ostatniej odpowiedzi odbiorcy minęło więcej niż 24 godziny.

Jak agent LangChain ładuje narzędzia WhatsApp?

Przez MCPAdapter, klienta MCP w LangChain, który przekazuje narzędzia serwera MCP do create_agent jako zwykłe narzędzia LangChain. Wymaga langchain[mcp] w wersji 1.4.0 lub nowszej i jest oznaczony jako beta.

Uwierzytelnianie przejmuje FastMCP. Przekazanie auth="oauth" w kliencie uruchamia pełny przepływ OAuth 2.1: wykrywanie, dynamiczną rejestrację klienta, przekierowanie w przeglądarce i wymianę tokenu. Tego oczekuje serwer MCP EasyCoexistence, więc nie trzeba tworzyć ani wklejać żadnego klucza. Domyślnie tokeny są trzymane w pamięci i każde uruchomienie powtarza krok w przeglądarce. Dostawca OAuth z FastMCP z magazynem tokenów zachowuje je między uruchomieniami.

Po załadowaniu agent widzi narzędzia wraz z opisami: najpierw list_numbers, bo każde inne narzędzie przyjmuje z niego connection_id, potem send_message, send_template, list_templates, get_number_health i resztę.

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)

Jak przychodząca wiadomość WhatsApp trafia do agenta?

Przez webhook, ponieważ MCP tego nie potrafi. Protokół opiera się na żądaniu i odpowiedzi, więc nic w nim nie pozwala serwerowi obudzić klienta, gdy napisze klient.

Ustaw adres docelowy webhooka numeru na trasę w Twojej aplikacji, z długim losowym sekretem w ścieżce URL. Trasa odpowiada na weryfikacyjne żądanie GET od Meta, zwracając surową wartość challenge, przyjmuje każde żądanie POST, od razu zwraca 200 i kolejkuje pracę. Proces roboczy bierze z payloadu nadawcę i tekst, po czym wywołuje agenta, używając numeru nadawcy jako identyfikatora wątku, dzięki czemu pamięć jest osobna dla każdego klienta.

Sprawdzaj sekret w adresie URL, a nie nagłówek X-Hub-Signature-256. Meta podpisuje sekretem aplikacji Tech Provider, który nigdy nie jest udostępniany, więc klient nie może zweryfikować tego nagłówka.

Czy agent powinien wysyłać przez MCP, czy przez Cloud API?

Działają oba sposoby, a różnica polega na tym, kto trzyma reguły. Narzędzia MCP niosą reguły WhatsApp w swoich opisach, na przykład że send_message działa tylko w oknie 24 godzin, a send_template służy do kontaktu z kimś, kto nie napisał. Model czytający te opisy w większości przypadków wybiera właściwe narzędzie, a przy agencie decydującym swobodnie to się przydaje.

Prostsze jest własne narzędzie, które wysyła żądanie na endpoint wiadomości Cloud API z tokenem numeru, gdy zadanie agenta jest wąskie, na przykład zawsze odpowiada osobie, która właśnie napisała. Wtedy kontrola okna jest w Twoim kodzie, a tam powinna leżeć reguła, której nigdy nie wolno złamać. Dowolny tekst poza oknem kończy się błędem 131047, a klient nie widzi niczego.

Typowe błędy

  • Oczekiwanie, że MCP dostarczy przychodzące wiadomości. Bez trasy webhooka agent nigdy nie usłyszy klienta.
  • Trzymanie tokenów OAuth w pamięci na serwerze. Każdy restart wymaga logowania w przeglądarce, więc zapisuj je w magazynie tokenów.
  • Jeden wątek dla wszystkich klientów. Powiąż pamięć agenta z numerem nadawcy.
Z EasyCoexistence zrobisz to

Połącz numer na easycoexistence.com, ustaw adres docelowy webhooka na swoją trasę i załaduj narzędzia MCP do agenta jednym logowaniem OAuth. Od US$ 9 za numer miesięcznie, przy większej liczbie numerów do US$ 1, a pierwsze 3 dni są bezpłatne.

Najczęściej zadawane pytania

Czy to działa tylko w Pythonie?

Przykład z MCPAdapter jest w Pythonie. Webhook i Cloud API to zwykłe HTTP, więc odbierać i wysyłać można w każdym języku, w którym działa LangChain.

Czy agent potrzebuje list_numbers za każdym razem?

Potrzebuje connection_id, a list_numbers to jedyne miejsce, skąd można go wziąć. Przy jednym numerze agent wywołuje je raz na początku.

Czy zespół nadal może odpowiadać z telefonu?

Tak. Coexistence sprawia, że aplikacja WhatsApp Business nadal działa, a odpowiedzi z telefonu trafiają na Twoją trasę jako zdarzenia echo, które agent może uwzględnić.

Czy EasyCoexistence czyta rozmowę?

Nie. Meta dostarcza wiadomości prosto na Twoją trasę, a treść wiadomości nigdy nie jest u nas przechowywana. Narzędzia MCP odczytują stan konta i numeru.

Czytaj dalej

Gotowy, aby zacząć?

Skonfiguruj WhatsApp Coexistence w kilka minut, nie miesięcy. Aplikacja nadal działa na telefonie.

Rozpocznij bezpłatny okres próbny

Zweryfikowano w

Agent LangChain w WhatsApp przez Cloud API