Postavite agenta OpenAI Agents SDK na WhatsApp
Podesite odredište webhooka za broj na rutu u vašoj Python aplikaciji. Za svaku dolaznu poruku pokrenite agenta preko Runner.run sa sesijom čiji je ključ broj pošiljaoca, pa result.final_output pošaljite nazad preko Cloud API-ja, sa tokenom broja i ID-jem broja telefona. Aplikacija WhatsApp Business nastavlja da radi na istom broju.
Ugrađena sesija SDK-a, u fajlu ili u memoriji, pamti prethodne razmene pod ID-jem sesije.
MCPServerStreamableHttp ovde prihvata httpx.Auth ili zaglavlje Authorization za autentifikaciju servera.
Verzija Graph API-ja iz aktuelnih Metinih primera slanja poruke.
Kako poruka sa WhatsAppa postaje pokretanje agenta?
Preko rute u vašoj aplikaciji koju Meta poziva. Podesite odredište webhooka broja na nju, sa dugom nasumičnom tajnom u putanji. Ruta odgovara na Metin verifikacioni GET tako što vraća hub.challenge kao običan tekst, prihvata svaki POST, odmah odgovara sa 200 i stavlja posao u red, jer Meta ponavlja spore odgovore i agent bi bio pokrenut dvaput.
Zatim radnik iz payloada čita pošiljaoca i tekst i poziva Runner.run. Prosledite sesiju čiji je ID broj pošiljaoca: SDK čuva razgovor pod tim ID-jem, pa sledeća poruka istog kupca nastavlja tamo gde se prethodna završila, a dva kupca nikada ne dele istoriju. SQLiteSession je dovoljna za početak, a SDK uključuje i Redis i SQLAlchemy sesije za više radnika.
Tajna u URL-u je ovde autentifikacija. Meta potpisuje isporuke app secretom Tech Providera, pa kupac ne može da proveri potpis iz zaglavlja.
import os, httpx
from agents import Agent, Runner, SQLiteSession
agent = Agent(name="Front desk", instructions="Answer briefly and politely.")
URL = f"https://graph.facebook.com/v25.0/{os.environ['PHONE_NUMBER_ID']}/messages"
async def handle(sender: str, text: str) -> None:
session = SQLiteSession(sender, "whatsapp.db")
result = await Runner.run(agent, text, session=session)
async with httpx.AsyncClient() as http:
await http.post(
URL,
headers={"Authorization": f"Bearer {os.environ['WA_TOKEN']}"},
json={"messaging_product": "whatsapp", "to": sender,
"type": "text", "text": {"body": result.final_output}},
)Zašto odgovor treba da šalje vaš kod, a ne agent?
Zato što je jedino pravilo koje se nikada ne sme prekršiti pravilo o vremenu, a kod ga sprovodi bolje od prompta. Meta otvara prozor korisničke podrške od 24 sata kada kupac napiše poruku. Unutar njega prolazi slobodan tekst. Van njega prolazi samo odobren šablon, a slobodan tekst vraća grešku 131047.
Radnik koji odgovara na poruku koja je upravo stigla uvek je unutar prozora, pa je slanje result.final_output kao teksta bezbedno po konstrukciji. Posao koji se dešava kasnije, poput nastavka sutradan ujutru ili podsetnika, treba da ide posebnom putanjom koja šalje šablon, nikada slobodan tekst.
Agent i dalje može da ima alate. Dajte mu function tools za pretragu, na primer porudžbine ili rezervacije, a slanje na WhatsApp ostavite radniku. Tako token za pristup ostaje van svega što model može da pozove sa proizvoljnim argumentima.
Može li agent da koristi EasyCoexistence MCP server?
Može, preko MCPServerStreamableHttp, ali uz više podešavanja nego što je zaglavlje. SDK prihvata ili zaglavlje Authorization ili httpx.Auth u params["auth"]. EasyCoexistence MCP server izdaje sopstvene OAuth tokene posle prijave u pregledaču, sa dinamičkom registracijom klijenta i PKCE-om, pa statički ključ ne postoji. MCP Python SDK uključuje OAuthClientProvider, HTTP auth handler koji sprovodi taj tok sa PKCE-om i osvežavanjem tokena, i to ide u params["auth"].
Isplati se kada agent treba sam da odlučuje: da proveri zdravlje broja, pročita status šablona ili izabere između send_message i send_template po pravilima iz opisa alata. Za recepciju koja samo odgovara, gore opisani radnik je kraći i ima manje mesta za grešku.
U oba slučaja webhook ostaje. MCP je zahtev i odgovor, a poruka kupca može do agenta da stigne samo preko rute koju Meta poziva.
Česte greške
- Pokretanje agenta pre vraćanja 200 Meti. Spor odgovor se ponavlja, pa kupac dobija dva odgovora.
- Jedna sesija za sve kupce. Ključ mora biti broj pošiljaoca, inače se istorije mešaju.
- Kasni nastavak koji šalje slobodan tekst. Posle 24 sata puca sa greškom 131047; pošaljite šablon.
Povežite broj na easycoexistence.com, podesite odredište webhooka na vašu rutu i pročitajte token i ID broja telefona iz kontrolne table. Od US$ 9 po broju mesečno, do US$ 1 kako dodajete brojeve, prva 3 dana besplatno.
Često postavljana pitanja
Da li je za ovo potreban hostovani MCP alat iz OpenAI Responses API-ja?
Ne. Radnik pokreće agenta lokalno preko Runner.run, a strana WhatsAppa je običan HTTPS poziv koji pravi vaš kod.
Koju verziju Graph API-ja da koristim?
Metini aktuelni primeri koriste v25.0. Zapišite verziju na jednom mestu u kodu, da nadogradnja bude izmena od jedne linije.
Može li osoba da preuzme sa telefona?
Može. Coexistence održava aplikaciju WhatsApp Business u radu, a odgovor sa telefona stiže na vašu rutu kao echo događaj koji radnik može da iskoristi da pauzira agenta.
Da li EasyCoexistence čuva razgovor?
Ne. Meta isporučuje direktno na vašu rutu. Šta god sesija čuva, nalazi se u vašoj bazi.
Nastavite sa čitanjem
Spremni da počnete?
Podesite WhatsApp Coexistence za nekoliko minuta, a ne meseci. Aplikacija nastavlja da radi na telefonu.
Započnite besplatni probni periodProvereno na