WhatsApp-Agent mit dem Vercel AI SDK bauen
Eingehende Nachrichten erreichen einen Route Handler, der als Webhook-Ziel der Nummer gesetzt ist. Der Handler ruft generateText auf und sendet die Antwort über die Cloud API. Für Tools, die auf die Nummer wirken, verbindet sich createMCPClient aus @ai-sdk/mcp per HTTP mit dem EasyCoexistence MCP-Server und meldet sich über einen authProvider mit OAuth an.
Das Paket, das createMCPClient bereitstellt, den MCP-Client des AI SDK.
OAuth wird vom MCP-HTTP-Transport des AI SDK unterstützt, indem man einen authProvider übergibt.
Feste Durchsatzrate für eine Nummer, die sowohl mit der WhatsApp Business App als auch mit der Cloud API genutzt wird.
Wie empfängt der Route Handler WhatsApp-Nachrichten?
Mit zwei Methoden auf einer Route, die als Webhook-Ziel der Nummer gesetzt wird, mit einem langen zufälligen Secret im Pfad.
Das GET beantwortet die Verifizierung von Meta. Lesen Sie hub.mode, hub.verify_token und hub.challenge aus der Query, vergleichen Sie das Token und geben Sie die Challenge als reinen Text zurück. Sie über einen JSON-Helper auszugeben, ist der klassische Fehler: Der Body kommt mit Anführungszeichen an, und Meta beginnt nie mit der Zustellung.
Das POST empfängt die Events. Geben Sie schnell 200 zurück und rufen Sie das Modell erst danach auf, denn Meta wiederholt langsame Antworten, und ein Kaltstart, der das Modell inline ausführt, kann dieselbe Nachricht doppelt beantworten. Auf Plattformen, die die Funktion mit dem Senden der Antwort beenden, übergeben Sie die Arbeit an eine Warteschlange oder an den Mechanismus der Plattform für Arbeit nach der Antwort.
Das Pfad-Secret ist die Authentifizierung. Meta signiert jede Zustellung mit dem App Secret des Tech Providers, daher lässt sich der Header X-Hub-Signature-256 auf Ihrer Seite nicht prüfen.
Wie lädt das AI SDK die WhatsApp-Tools?
Mit createMCPClient aus @ai-sdk/mcp und dem HTTP-Transport, den die Dokumentation des AI SDK für den Produktivbetrieb empfiehlt. Der Transport nimmt die Server-URL und einen authProvider entgegen. OAuth über einen authProvider ist der Weg, auf dem der EasyCoexistence MCP-Server autorisiert wird: Er veröffentlicht OAuth-Metadaten, unterstützt Dynamic Client Registration und PKCE und stellt nach der Anmeldung eigene Tokens aus. Es gibt keinen API-Schlüssel, den Sie in einen Header legen müssten.
Die Tools des Clients gehen direkt in generateText oder streamText. Das Modell sieht dann list_numbers, send_message, send_template, get_number_health und die übrigen, mit Beschreibungen, die das 24-Stunden-Fenster nennen. Schließen Sie den Client, wenn der Aufruf beendet ist: bei einem Stream im onEnd-Callback, sonst in einem finally-Block, wie es die Dokumentation des AI SDK verlangt.
Nutzen Sie ihn dort, wo das Modell entscheiden soll. Um auf die gerade eingetroffene Nachricht zu antworten, ist ein direkter Cloud-API-Aufruf aus dem Handler kürzer.
import { createMCPClient } from "@ai-sdk/mcp";
const mcp = await createMCPClient({
transport: {
type: "http",
url: "https://easycoexistence.com/api/mcp",
authProvider, // your OAuthClientProvider implementation
},
});
try {
const tools = await mcp.tools();
// pass tools to generateText({ model, tools, prompt })
} finally {
await mcp.close();
}Was ändert sich, weil die Nummer auf Coexistence läuft?
Zwei Dinge, die der Code kennen sollte. Erstens kann bereits ein Mensch im Gespräch sein. Die WhatsApp Business App funktioniert auf der Nummer weiter, und jede am Telefon getippte Antwort erreicht die Route als Echo-Event. Ein Handler, der das Modell nach einem Echo für diesen Kontakt pausiert, verhindert, dass es einer Person ins Wort fällt.
Zweitens ist das Senden auf feste 20 Nachrichten pro Sekunde für die Nummer begrenzt. Ein Gesprächs-Agent kommt dem nie nahe, eine Broadcast-Schleife mit Promise.all über eine Kontaktliste dagegen schon, also verarbeiten Sie sie in Batches.
Alles andere ist die gewöhnliche Cloud API. Innerhalb von 24 Stunden nach der letzten Nachricht des Kunden ist Freitext erlaubt. Danach geht nur ein genehmigtes Template durch, und Freitext liefert den Fehler 131047, ohne dass der Kunde etwas davon sieht.
Häufige Fehler
- Die Challenge mit einem JSON-Response-Helper zurückgeben. Die Anführungszeichen darum lassen die Prüfung von Meta scheitern.
- generateText ausführen, bevor Meta eine Antwort erhält. Bei einem Kaltstart erzeugt die Wiederholung eine zweite Antwort.
- Den MCP-Client nicht schließen. Jede Anfrage lässt eine Verbindung offen, bis die Plattform sie beendet.
Verbinden Sie die Nummer auf easycoexistence.com, setzen Sie das Webhook-Ziel auf Ihren Route Handler und fügen Sie den MCP-Client mit einer einzigen OAuth-Anmeldung hinzu. Ab US$ 9 pro Nummer und Monat, bei wachsender Nummernanzahl bis US$ 1, die ersten 3 Tage kostenlos.
Häufig gestellte Fragen
Funktioniert das nur auf Vercel?
Nein. Das AI SDK ist eine TypeScript-Bibliothek, und die Route kann auf jedem Host laufen, der HTTPS ausliefert und ein GET und ein POST beantwortet.
Brauche ich den MCP-Client überhaupt?
Nicht zum Antworten. Das erledigt ein fetch auf den Messages-Endpoint der Cloud API mit dem Token der Nummer. MCP lohnt sich, wenn das Modell entscheidet, was zu tun ist.
Welcher Anbieter kann das Modell sein?
Jeder, den das AI SDK unterstützt. Die WhatsApp-Seite ist unabhängig vom Modell, ein Wechsel des Anbieters berührt also weder die Route noch den Cloud-API-Aufruf.
Sieht EasyCoexistence die Nachrichten?
Nein. Meta liefert direkt an Ihre Route, und der Inhalt der Nachrichten wird bei uns nie gespeichert.
Weiterlesen
Bereit für den Start?
Richten Sie WhatsApp Coexistence in wenigen Minuten statt Monaten ein. Die App funktioniert weiterhin auf dem Telefon.
Kostenlose Testphase startenVerifiziert am