Δώστε σε έναν agent του LangChain έναν αριθμό WhatsApp
Ένας agent του LangChain αποκτά WhatsApp σε δύο μέρη. Τα εισερχόμενα μηνύματα φτάνουν στη διαδρομή web σας μέσω του webhook του αριθμού, και η διαδρομή καλεί τον agent. Για να ενεργήσει, ο agent φορτώνει τα εργαλεία MCP του EasyCoexistence μέσω του MCPAdapter του LangChain με OAuth, ή καλεί απευθείας το Cloud API με το token του αριθμού και το phone number id.
Ελάχιστη έκδοση του langchain[mcp] για το namespace langchain.mcp, το οποίο είναι σε beta.
Εκτελεί ολόκληρη τη ροή OAuth 2.1: ανακάλυψη, δυναμική εγγραφή client, ανακατεύθυνση στον browser και ανταλλαγή token.
Το σφάλμα της Meta όταν έχουν περάσει περισσότερες από 24 ώρες από την τελευταία απάντηση του παραλήπτη.
Πώς φορτώνει ένας agent του LangChain τα εργαλεία του WhatsApp;
Μέσω του MCPAdapter, του client MCP του LangChain, που παραδίδει τα εργαλεία ενός server MCP στο create_agent ως συνηθισμένα εργαλεία LangChain. Απαιτεί το langchain[mcp] στην έκδοση 1.4.0 ή νεότερη και θεωρείται beta.
Η πιστοποίηση ανατίθεται στο FastMCP. Αν περάσετε auth="oauth" στον client, εκτελείται ολόκληρη η ροή OAuth 2.1: ανακάλυψη, δυναμική εγγραφή client, ανακατεύθυνση στον browser και ανταλλαγή token. Αυτό ακριβώς περιμένει ο server MCP του EasyCoexistence, οπότε δεν χρειάζεται να δημιουργήσετε ή να επικολλήσετε κάποιο κλειδί. Από προεπιλογή τα tokens μένουν στη μνήμη και κάθε εκτέλεση επαναλαμβάνει το βήμα του browser. Ένας πάροχος OAuth του FastMCP με αποθήκη tokens τα διατηρεί ανάμεσα στις εκτελέσεις.
Μόλις φορτωθούν, ο agent βλέπει τα εργαλεία με τις περιγραφές τους: πρώτα το 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 στον agent;
Μέσω του webhook, επειδή το MCP δεν μπορεί να το κάνει. Το πρωτόκολλο λειτουργεί με αίτημα και απόκριση, άρα τίποτα σε αυτό δεν επιτρέπει σε έναν server να ξυπνήσει έναν client όταν γράφει ένας πελάτης.
Ορίστε ως προορισμό του webhook του αριθμού μια διαδρομή στη δική σας εφαρμογή, με ένα μακρύ τυχαίο μυστικό στο path του URL. Η διαδρομή απαντά στο GET επαλήθευσης της Meta με το challenge ως έχει, δέχεται κάθε POST, επιστρέφει αμέσως 200 και βάζει την εργασία σε ουρά. Ένας worker παίρνει τον αποστολέα και το κείμενο από το payload και καλεί με αυτά τον agent, με τον αριθμό του αποστολέα ως thread id, ώστε η μνήμη να μένει χωριστή για κάθε πελάτη.
Ελέγξτε το μυστικό στο URL και όχι την κεφαλίδα X-Hub-Signature-256. Η Meta υπογράφει με το app secret του Tech Provider, το οποίο δεν κοινοποιείται ποτέ, επομένως ο πελάτης δεν μπορεί να επικυρώσει αυτή την κεφαλίδα.
Να στέλνει ο agent μέσω MCP ή μέσω του Cloud API;
Και τα δύο λειτουργούν, και η διαφορά είναι ποιος κρατά τους κανόνες. Τα εργαλεία MCP περιέχουν τους κανόνες του WhatsApp στις περιγραφές τους, όπως ότι το send_message δουλεύει μόνο μέσα στο παράθυρο των 24 ωρών και ότι το send_template είναι ο τρόπος να προσεγγίσετε κάποιον που δεν έχει γράψει. Ένα μοντέλο που διαβάζει αυτές τις περιγραφές διαλέγει τις περισσότερες φορές το σωστό, και αυτό βοηθά όταν ο agent αποφασίζει ελεύθερα.
Ένα απλό δικό σας εργαλείο που στέλνει στο endpoint μηνυμάτων του Cloud API με το token του αριθμού είναι απλούστερο όταν η δουλειά του agent είναι στενή, όπως το να απαντά πάντα σε αυτόν που μόλις έγραψε. Τότε ο έλεγχος του παραθύρου βρίσκεται στον δικό σας κώδικα, εκεί που ανήκει ένας κανόνας που δεν επιτρέπεται να παραβιαστεί. Το ελεύθερο κείμενο εκτός παραθύρου επιστρέφει σφάλμα 131047, και ο πελάτης δεν βλέπει τίποτα.
Συνηθισμένα λάθη
- Να περιμένετε από το MCP να παραδώσει τα εισερχόμενα μηνύματα. Χωρίς διαδρομή webhook, ο agent δεν ακούει ποτέ έναν πελάτη.
- Να αφήνετε τα tokens OAuth στη μνήμη ενός server. Κάθε επανεκκίνηση ζητά σύνδεση μέσω browser, γι' αυτό αποθηκεύστε τα με μια αποθήκη tokens.
- Να χρησιμοποιείτε ένα thread για όλους τους πελάτες. Δέστε τη μνήμη του agent με τον αριθμό του αποστολέα.
Συνδέστε τον αριθμό στο easycoexistence.com, ορίστε τη διαδρομή σας ως προορισμό του webhook και φορτώστε τα εργαλεία MCP στον agent με μία σύνδεση OAuth. Από US$ 9 ανά συνδεδεμένο αριθμό τον μήνα, με πτώση έως τα US$ 1 όσο προσθέτετε αριθμούς, και οι πρώτες 3 ημέρες είναι δωρεάν.
Συχνές ερωτήσεις
Ισχύει μόνο για Python;
Το παράδειγμα με το MCPAdapter είναι σε Python. Το webhook και το Cloud API είναι απλό HTTP, οπότε κάθε γλώσσα στην οποία τρέχει το LangChain μπορεί να κάνει τη λήψη και την αποστολή.
Χρειάζεται ο agent το list_numbers κάθε φορά;
Χρειάζεται ένα connection_id, και το list_numbers είναι το μόνο σημείο από το οποίο προέρχεται. Με έναν μόνο αριθμό, ο agent το καλεί μία φορά στην αρχή.
Μπορεί η ομάδα να απαντά ακόμη από το κινητό;
Ναι. Το Coexistence διατηρεί την εφαρμογή WhatsApp Business σε λειτουργία, και οι απαντήσεις από το κινητό φτάνουν στη διαδρομή σας ως γεγονότα echo, τα οποία ο agent μπορεί να λάβει υπόψη.
Διαβάζει το EasyCoexistence τη συνομιλία;
Όχι. Η Meta παραδίδει απευθείας στη διαδρομή σας και το περιεχόμενο των μηνυμάτων δεν αποθηκεύεται ποτέ από εμάς. Τα εργαλεία MCP διαβάζουν την κατάσταση του λογαριασμού και του αριθμού.
Συνεχίστε την ανάγνωση
Έτοιμοι να ξεκινήσετε;
Ρυθμίστε το WhatsApp Coexistence σε λίγα λεπτά, όχι σε μήνες. Η εφαρμογή συνεχίζει να λειτουργεί στο τηλέφωνο.
Ξεκινήστε δωρεάν δοκιμήΕπαληθεύτηκε στις