Log masukMulakan percubaan percuma
Meta Tech Provider

Letakkan ejen OpenAI Agents SDK pada WhatsApp

Tetapkan destinasi webhook nombor itu kepada satu route dalam aplikasi Python anda. Bagi setiap mesej masuk, jalankan ejen dengan Runner.run dan satu sesi yang berkunci pada nombor penghantar, kemudian hantar result.final_output kembali melalui Cloud API dengan token nombor itu dan phone number id. Aplikasi WhatsApp Business terus berfungsi pada nombor yang sama.

SQLiteSession

Sesi terbina dalam SDK, berasaskan fail atau dalam memori, yang mengingati giliran terdahulu di bawah satu id sesi.

params["auth"]

MCPServerStreamableHttp menerima httpx.Auth di sini, atau pengepala Authorization, untuk pengesahan pelayan.

v25.0

Versi Graph API yang digunakan dalam contoh penghantaran mesej terkini Meta.

Bagaimanakah mesej WhatsApp menjadi satu larian ejen?

Melalui satu route dalam aplikasi anda sendiri yang dipanggil oleh Meta. Tetapkan destinasi webhook nombor itu kepadanya, dengan rahsia rawak yang panjang dalam laluan. Route itu menjawab GET pengesahan Meta dengan memulangkan hub.challenge sebagai teks biasa, menerima setiap POST, membalas 200 serta-merta dan meletakkan kerja dalam baris gilir, kerana Meta mencuba semula respons yang lambat dan anda akan menjalankan ejen dua kali.

Seorang pekerja kemudian membaca penghantar dan teks daripada payload lalu memanggil Runner.run. Hantar satu sesi yang id-nya ialah nombor penghantar: SDK menyimpan perbualan di bawah id itu, jadi mesej seterusnya daripada pelanggan yang sama menyambung dari tempat yang terakhir, dan dua pelanggan tidak pernah berkongsi sejarah. SQLiteSession mencukupi untuk bermula; SDK juga menyediakan sesi Redis dan SQLAlchemy untuk beberapa pekerja.

Rahsia dalam URL ialah pengesahan di sini. Meta menandatangani penghantaran dengan app secret milik Tech Provider, jadi pengepala tandatangan tidak dapat disahkan oleh pelanggan.

Worker: run the agent for one message and send the answer
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}},
        )

Mengapakah kod anda yang patut menghantar balasan, bukan ejen?

Kerana satu peraturan yang tidak boleh dilanggar ialah peraturan masa, dan kod menguatkuasakannya lebih baik daripada prompt. Meta membuka tetingkap khidmat pelanggan 24 jam apabila pelanggan menulis. Di dalamnya, teks bebas diterima. Di luarnya, hanya template yang diluluskan diterima, dan teks bebas akan dipulangkan dengan ralat 131047.

Pekerja yang menjawab mesej yang baru tiba sentiasa berada dalam tetingkap, jadi menghantar result.final_output sebagai teks adalah selamat secara reka bentuk. Kerja yang berlaku kemudian, seperti susulan pagi esok atau peringatan, patut melalui laluan berasingan yang menghantar template dan tidak pernah teks bebas.

Ejen masih boleh mempunyai alat. Berikan function tool untuk mencari maklumat, seperti pesanan atau tempahan, dan biarkan penghantaran WhatsApp dalam pekerja. Dengan cara itu token akses juga jauh daripada apa-apa yang boleh dipanggil oleh model dengan argumen sewenang-wenangnya.

Bolehkah ejen menggunakan pelayan MCP EasyCoexistence?

Boleh, melalui MCPServerStreamableHttp, tetapi penyediaannya lebih daripada sekadar pengepala. SDK menerima sama ada pengepala Authorization atau httpx.Auth dalam params["auth"]. Pelayan MCP EasyCoexistence mengeluarkan token OAuth sendiri selepas log masuk melalui pelayar, dengan pendaftaran klien dinamik dan PKCE, jadi kunci statik tidak wujud. SDK Python MCP menyediakan OAuthClientProvider, pengendali pengesahan HTTP yang menjalankan aliran itu dengan PKCE dan pembaharuan token, dan itulah yang diletakkan dalam params["auth"].

Ia berbaloi apabila ejen patut membuat keputusan sendiri: menyemak kesihatan nombor, membaca status template, atau memilih antara send_message dan send_template berdasarkan peraturan dalam huraian alat. Untuk kaunter hadapan yang hanya menjawab, pekerja di atas lebih ringkas dan kurang berisiko rosak.

Dalam kedua-dua keadaan, webhook tetap diperlukan. MCP ialah permintaan dan respons, dan mesej pelanggan hanya boleh sampai kepada ejen melalui route yang dipanggil oleh Meta.

Kesilapan biasa

  • Menjalankan ejen sebelum memulangkan 200 kepada Meta. Respons yang lambat dicuba semula, dan pelanggan menerima dua jawapan.
  • Menggunakan satu sesi untuk semua pelanggan. Kuncikan pada nombor penghantar, jika tidak sejarah akan bercampur.
  • Membenarkan susulan yang tertunda menghantar teks bebas. Selepas 24 jam ia gagal dengan 131047; hantar template sebaliknya.
Menggunakan EasyCoexistence untuk ini

Sambungkan nombor di easycoexistence.com, tetapkan destinasi webhook kepada route anda, dan baca token serta phone number id daripada dashboard. Daripada US$ 9 sebulan bagi setiap nombor, jatuh kepada US$ 1 apabila nombor ditambah, dengan 3 hari pertama percuma.

Soalan lazim

Adakah ini memerlukan alat MCP yang dihoskan dalam OpenAI Responses API?

Tidak. Pekerja menjalankan ejen secara setempat dengan Runner.run, dan bahagian WhatsApp ialah panggilan HTTPS biasa yang dibuat oleh kod anda.

Versi Graph API manakah yang patut saya gunakan?

Contoh terkini Meta menggunakan v25.0. Tetapkan satu versi di satu tempat dalam kod anda supaya naik taraf hanya perubahan satu baris.

Bolehkah seseorang mengambil alih daripada telefon?

Boleh. Coexistence mengekalkan aplikasi WhatsApp Business berfungsi, dan balasan daripada telefon tiba di route anda sebagai peristiwa echo yang boleh digunakan oleh pekerja untuk menjeda ejen.

Adakah EasyCoexistence menyimpan perbualan?

Tidak. Meta menghantar terus ke route anda. Apa-apa yang disimpan oleh sesi berada dalam pangkalan data anda sendiri.

Teruskan membaca

Sedia untuk bermula?

Sediakan WhatsApp Coexistence dalam beberapa minit, bukan berbulan-bulan. Aplikasi terus berfungsi pada telefon.

Mulakan Percubaan Percuma

Disahkan pada

OpenAI Agents SDK di WhatsApp, Cloud API