התחברותהתחילו תקופת ניסיון
Meta Tech Provider

סוכן LangChain עם מספר WhatsApp משלו

סוכן LangChain מקבל WhatsApp בשני חלקים. הודעות נכנסות מגיעות לנתיב באתר שלכם דרך וובהוק (Webhook) של המספר, והנתיב מפעיל את הסוכן. כדי לפעול, הסוכן טוען את כלי ה-MCP של EasyCoexistence דרך MCPAdapter של LangChain עם OAuth, או קורא ישירות ל-Cloud API עם אסימון המספר ומזהה המספר.

1.4.0

גרסת langchain[mcp] המינימלית למרחב השמות langchain.mcp, שנמצא בבטא.

auth="oauth"

מריץ את זרימת OAuth 2.1 המלאה: גילוי, רישום דינמי של לקוח, הפניה בדפדפן והחלפת אסימון.

131047

השגיאה של Meta כשעברו יותר מ-24 שעות מאז שהנמען ענה לאחרונה.

איך סוכן LangChain טוען את כלי WhatsApp?

דרך MCPAdapter, לקוח ה-MCP של LangChain, שמעביר את הכלים של שרת MCP אל create_agent ככלי LangChain רגילים. נדרשת הגרסה 1.4.0 ומעלה של langchain[mcp], והיא מסומנת כבטא.

האימות מועבר ל-FastMCP. כשמעבירים auth="oauth" ללקוח, מתבצעת זרימת OAuth 2.1 המלאה: גילוי, רישום דינמי של לקוח, הפניה בדפדפן והחלפת אסימון. זה בדיוק מה ששרת MCP של EasyCoexistence מצפה לו, ולכן אין מפתח ליצור או להדביק. כברירת מחדל האסימונים נשמרים בזיכרון וכל הרצה חוזרת על שלב הדפדפן. ספק OAuth של FastMCP עם אחסון אסימונים שומר אותם בין הרצות.

אחרי הטעינה הסוכן רואה את הכלים עם התיאורים שלהם: קודם 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 נכנסת מגיעה לסוכן?

דרך הוובהוק, כי MCP לא יכול לעשות זאת. הפרוטוקול בנוי על בקשה ותגובה, ולכן אין בו דרך לשרת להעיר לקוח כשלקוח כותב הודעה.

מגדירים את יעד הוובהוק של המספר לנתיב באפליקציה שלכם, עם סוד אקראי וארוך בכתובת ה-URL. הנתיב עונה על בקשת GET של אימות מ-Meta עם ה-challenge כמו שהוא, מקבל כל בקשת POST, מחזיר 200 מיד ומכניס את העבודה לתור. עובד ברקע לוקח מה-payload את השולח ואת הטקסט ומפעיל איתם את הסוכן, כשמספר השולח משמש כמזהה השיחה, כך שהזיכרון נשמר לכל לקוח בנפרד.

בודקים את הסוד שבכתובת ה-URL ולא את הכותרת X-Hub-Signature-256. Meta חותמת עם הסוד של האפליקציה של ה-Tech Provider, והוא אף פעם לא משותף, ולכן הלקוח לא יכול לאמת את הכותרת הזאת.

האם הסוכן צריך לשלוח דרך MCP או דרך Cloud API?

שתי הדרכים עובדות, וההבדל הוא מי מחזיק את הכללים. כלי ה-MCP נושאים את כללי WhatsApp בתיאורים שלהם, למשל ש-send_message עובד רק בתוך חלון 24 השעות ושההודעה ל-send_template היא הדרך לפנות למי שלא כתב. מודל שקורא את התיאורים בוחר נכון ברוב המקרים, וזה עוזר כשהסוכן מחליט בחופשיות.

כלי פשוט משלכם ששולח לנקודת הקצה של ההודעות ב-Cloud API עם אסימון המספר הוא פתרון פשוט יותר כשהתפקיד של הסוכן צר, למשל תמיד לענות למי שכתב הרגע. אז בדיקת החלון יושבת בקוד שלכם, וזה המקום לכלל שאסור לשבור. טקסט חופשי מחוץ לחלון חוזר עם קוד שגיאה 131047, והלקוח לא רואה שום דבר.

טעויות נפוצות

  • לצפות ש-MCP ימסור הודעות נכנסות. בלי נתיב לוובהוק, הסוכן אף פעם לא שומע מלקוח.
  • להשאיר אסימוני OAuth בזיכרון בשרת. כל הפעלה מחדש דורשת התחברות בדפדפן, ולכן שומרים אותם באחסון אסימונים.
  • להשתמש בשיחה אחת לכל הלקוחות. מפתחים את הזיכרון של הסוכן לפי מספר השולח.
עושים את זה עם EasyCoexistence

מחברים את המספר באתר easycoexistence.com, מגדירים את יעד הוובהוק לנתיב שלכם וטוענים את כלי ה-MCP לסוכן עם התחברות OAuth אחת. החל מ-US$ 9 למספר בחודש, ויורד עד US$ 1 ככל שמוסיפים מספרים, עם תקופת ניסיון של 3 ימים.

שאלות נפוצות

זה רק ב-Python?

הדוגמה של MCPAdapter כתובה ב-Python. הוובהוק וה-Cloud API הם HTTP רגיל, ולכן כל שפה ש-LangChain רץ בה יכולה לקבל ולשלוח הודעות.

האם הסוכן צריך להפעיל את list_numbers בכל פעם?

הוא צריך connection_id, ו-list_numbers הוא המקום היחיד שממנו מקבלים אותו. כשיש מספר אחד, הסוכן קורא לכלי הזה פעם אחת בתחילת העבודה.

האם הצוות עדיין יכול לענות מהטלפון?

כן. Coexistence משאיר את אפליקציית WhatsApp Business פעילה, ותשובות מהטלפון מגיעות לנתיב שלכם כאירועי echo שהסוכן יכול לקחת בחשבון.

האם EasyCoexistence קוראת את השיחה?

לא. Meta מוסרת ישירות לנתיב שלכם, ותוכן ההודעות אף פעם לא נשמר אצלנו. כלי ה-MCP קוראים את מצב החשבון והמספר.

המשיכו לקרוא

מוכנים להתחיל?

מגדירים WhatsApp Coexistence בתוך דקות, לא חודשים. האפליקציה ממשיכה לעבוד בטלפון.

התחילו תקופת ניסיון בחינם

נבדק ב-

סוכן LangChain ב-WhatsApp עם Cloud API