Agent iz OpenAI Agents SDK-a na WhatsAppu
Postavite odredište webhooka broja na rutu u svojoj Python aplikaciji. Za svaku dolaznu poruku pokrenite agenta s Runner.run i sesijom čiji je ključ broj pošiljatelja, a zatim result.final_output pošaljite natrag preko Cloud API-ja s tokenom broja i phone number id. Aplikacija WhatsApp Business nastavlja raditi na istom broju.
Ugrađena sesija SDK-a, u datoteci ili u memoriji, pamti prethodne korake pod ID-jem sesije.
MCPServerStreamableHttp ovdje prihvaća httpx.Auth ili zaglavlje Authorization za autentifikaciju na poslužitelju.
Verzija Graph API-ja iz Metinih aktualnih primjera slanja poruke.
Kako WhatsApp poruka postaje pokretanje agenta?
Preko rute u vašoj aplikaciji koju poziva Meta. Postavite odredište webhooka broja na tu rutu, s dugom nasumičnom tajnom u putanji. Ruta odgovara na Metin verifikacijski GET vraćanjem hub.challenge kao običnog teksta, prihvaća svaki POST, odmah odgovara s 200 i stavlja posao u red, jer Meta ponavlja spore odgovore pa biste agenta pokrenuli dvaput.
Zatim radnik iz payloada čita pošiljatelja i tekst te poziva Runner.run. Proslijedite sesiju čiji je ID broj pošiljatelja: SDK pohranjuje razgovor pod tim ID-jem, pa sljedeća poruka istog kupca nastavlja ondje gdje je prethodna stala, a dva kupca nikad ne dijele povijest. Za početak je dovoljan SQLiteSession; SDK dolazi i sa sesijama za Redis i SQLAlchemy za više radnika.
Tajna u URL-u ovdje služi kao autentifikacija. Meta potpisuje isporuke tajnom aplikacije davatelja Tech Provider, pa kupac ne može provjeriti zaglavlje s potpisom.
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 slati vaš kôd, a ne agent?
Zato što je jedino pravilo koje se nikad ne smije prekršiti vremensko, a kôd ga provodi bolje od prompta. Meta otvara 24-satni prozor korisničke podrške kad kupac napiše poruku. Unutar njega prolazi slobodan tekst. Izvan njega prolazi samo odobreni predložak, a slobodan tekst vraća se kao pogreška 131047.
Radnik koji odgovara na upravo stiglu poruku uvijek je unutar prozora, pa je slanje result.final_output kao teksta sigurno po konstrukciji. Posao koji se odvija poslije, primjerice naknadni kontakt idući dan ili podsjetnik, treba ići zasebnim putem koji šalje predložak, nikad slobodan tekst.
Agent i dalje može imati alate. Dajte mu function tools za traženje podataka, primjerice o narudžbi ili rezervaciji, a slanje preko WhatsAppa ostavite u radniku. Tako i pristupni token ostaje izvan svega što model može pozvati s proizvoljnim argumentima.
Može li agent koristiti EasyCoexistence MCP poslužitelj?
Može, preko MCPServerStreamableHttp, uz nešto više postavljanja nego što je zaglavlje. SDK prihvaća zaglavlje Authorization ili httpx.Auth u params["auth"]. EasyCoexistence MCP poslužitelj izdaje vlastite OAuth tokene nakon prijave u pregledniku, s dinamičkom registracijom klijenta i PKCE-om, pa statični ključ ne postoji. MCP Python SDK sadrži OAuthClientProvider, HTTP rukovatelja autentifikacijom koji provodi taj tijek s PKCE-om i osvježavanjem tokena, a upravo on ide u params["auth"].
Isplati se kad agent sam treba odlučivati: provjeriti stanje broja, pročitati status predloška ili birati između send_message i send_template prema pravilima u opisima alata. Za recepciju koja samo odgovara kraći je radnik opisan gore i ima manje stvari koje mogu poći po zlu.
U oba slučaja webhook ostaje. MCP je zahtjev i odgovor, a poruka kupca do agenta može stići samo preko rute koju poziva Meta.
Uobičajene pogreške
- Pokretanje agenta prije vraćanja 200 Meti. Spor odgovor se ponavlja, pa kupac dobije dva odgovora.
- Jedna sesija za sve kupce. Kao ključ uzmite broj pošiljatelja, inače se povijesti miješaju.
- Odgođeni naknadni kontakt koji šalje slobodan tekst. Nakon 24 sata pada s pogreškom 131047; umjesto toga pošaljite predložak.
Povežite broj na easycoexistence.com, postavite odredište webhooka na svoju rutu te token i phone number id pročitajte u nadzornoj ploči. Od US$ 9 po broju mjesečno, uz pad na US$ 1 kako dodajete brojeve, a prva 3 dana su besplatna.
Često postavljana pitanja
Treba li za ovo OpenAI Responses API hosted MCP tool?
Ne. Radnik pokreće agenta lokalno preko Runner.run, a WhatsApp strana je običan HTTPS poziv koji upućuje vaš kôd.
Koju verziju Graph API-ja trebam koristiti?
Metini aktualni primjeri koriste v25.0. Verziju zapišite na jednom mjestu u kôdu, pa je nadogradnja izmjena jedne linije.
Može li osoba preuzeti razgovor s telefona?
Da. Coexistence održava aplikaciju WhatsApp Business u radu, a odgovor s telefona stiže na vašu rutu kao echo događaj koji radnik može iskoristiti za pauziranje agenta.
Pohranjuje li EasyCoexistence razgovor?
Ne. Meta isporučuje izravno na vašu rutu. Što god sesija pohrani, nalazi se u vašoj bazi podataka.
Nastavite čitati
Spremni za početak?
Postavite WhatsApp Coexistence u nekoliko minuta, a ne mjeseci. Aplikacija i dalje radi na telefonu.
Započnite besplatno probno razdobljeProvjereno na