OpenAI Agents SDK ایجنٹ کو WhatsApp پر چلائیں
نمبر کی ویب ہک منزل اپنے Python ایپ کے ایک روٹ پر سیٹ کریں۔ ہر آنے والے میسج پر Runner.run کے ساتھ ایجنٹ چلائیں، سیشن کی کلید بھیجنے والے کا نمبر رکھیں، پھر result.final_output کو نمبر کے ٹوکن اور phone_number_id کے ساتھ Cloud API سے واپس بھیجیں۔ WhatsApp Business ایپ اسی نمبر پر چلتی رہتی ہے۔
SDK کا اپنا سیشن، فائل یا میموری میں، جو سیشن آئی ڈی کے تحت پچھلے مراحل یاد رکھتا ہے۔
یہاں MCPServerStreamableHttp سرور کی تصدیق کے لیے httpx.Auth یا Authorization ہیڈر قبول کرتا ہے۔
Meta کی موجودہ send message مثالوں میں استعمال ہونے والا Graph API ورژن۔
WhatsApp میسج ایجنٹ کی کارروائی کیسے بنتا ہے؟
آپ کی اپنی ایپلیکیشن کے ایک روٹ کے ذریعے، جسے Meta کال کرتا ہے۔ نمبر کی ویب ہک منزل اسی پر سیٹ کریں اور پاتھ میں ایک لمبا بے ترتیب خفیہ حصہ رکھیں۔ روٹ Meta کی تصدیق والی GET کا جواب hub.challenge کو سادہ متن میں لوٹا کر دیتا ہے، ہر POST قبول کرتا ہے، فوراً 200 واپس کرتا ہے اور کام قطار میں لگا دیتا ہے، کیونکہ سست جواب پر Meta دوبارہ کوشش کرتا ہے اور ایجنٹ دو بار چل جائے گا۔
پھر ایک ورکر پے لوڈ سے بھیجنے والے کا نمبر اور متن پڑھتا ہے اور Runner.run کو کال کرتا ہے۔ ایسا سیشن دیں جس کی آئی ڈی بھیجنے والے کا نمبر ہو: SDK گفتگو اسی آئی ڈی کے تحت محفوظ کرتا ہے، اس لیے اسی کسٹمر کا اگلا میسج وہیں سے جاری رہتا ہے جہاں پچھلا رکا تھا، اور دو کسٹمرز کی ہسٹری کبھی نہیں ملتی۔ شروع کرنے کے لیے SQLiteSession کافی ہے؛ کئی ورکرز کے لیے SDK میں Redis اور SQLAlchemy سیشنز بھی موجود ہیں۔
یہاں URL میں رکھا خفیہ حصہ ہی تصدیق ہے۔ Meta ڈیلیوریز پر Tech Provider کے ایپ سیکرٹ سے دستخط کرتا ہے، اس لیے کسٹمر سگنیچر ہیڈر کی توثیق نہیں کر سکتا۔
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}},
)جواب آپ کا کوڈ کیوں بھیجے، ایجنٹ کیوں نہیں؟
کیونکہ جو ایک اصول کبھی نہیں ٹوٹنا چاہیے وہ وقت کا اصول ہے، اور اسے پرامپٹ کے مقابلے میں کوڈ بہتر نافذ کرتا ہے۔ جب کسٹمر لکھتا ہے تو Meta 24 گھنٹے کی کسٹمر سروس ونڈو کھول دیتا ہے۔ اس کے اندر آزاد متن جا سکتا ہے۔ اس کے باہر صرف منظور شدہ ٹیمپلیٹ جاتا ہے، اور آزاد متن پر ایرر کوڈ 131047 آتا ہے۔
جو ورکر ابھی آنے والے میسج کا جواب دیتا ہے وہ ہمیشہ ونڈو کے اندر ہوتا ہے، اس لیے result.final_output کو متن کے طور پر بھیجنا ڈیزائن ہی سے محفوظ ہے۔ بعد میں ہونے والا کام، جیسے اگلی صبح کا فالو اپ یا ریمائنڈر، الگ راستے سے جانا چاہیے جو ٹیمپلیٹ بھیجے اور آزاد متن کبھی نہ بھیجے۔
ایجنٹ کے پاس ٹولز پھر بھی ہو سکتے ہیں۔ چیزیں تلاش کرنے کے لیے اسے فنکشن ٹولز دیں، جیسے آرڈر یا بکنگ، اور WhatsApp بھیجنے کا کام ورکر میں رکھیں۔ اس سے رسائی کا ٹوکن بھی ان چیزوں سے باہر رہتا ہے جنہیں ماڈل من مانی دلائل کے ساتھ کال کر سکتا ہے۔
کیا ایجنٹ EasyCoexistence کا MCP سرور استعمال کر سکتا ہے؟
جی ہاں، MCPServerStreamableHttp کے ذریعے، لیکن سیٹ اپ ایک ہیڈر سے زیادہ ہے۔ SDK params["auth"] میں Authorization ہیڈر یا httpx.Auth قبول کرتا ہے۔ EasyCoexistence کا MCP سرور براؤزر سائن اِن کے بعد اپنے OAuth ٹوکن جاری کرتا ہے، ڈائنامک کلائنٹ رجسٹریشن اور PKCE کے ساتھ، اس لیے مستقل کلید موجود نہیں۔ MCP Python SDK میں OAuthClientProvider ہے، جو ایک HTTP auth ہینڈلر ہے اور PKCE اور ٹوکن ری فریش کے ساتھ یہی عمل چلاتا ہے، اور وہی params["auth"] میں جاتا ہے۔
یہ تب فائدہ مند ہے جب ایجنٹ خود فیصلہ کرے: کسی نمبر کی صحت جانچنا، ٹیمپلیٹ کا اسٹیٹس پڑھنا، یا ٹولز کی تفصیل میں لکھے اصولوں کے مطابق send_message اور send_template میں سے انتخاب کرنا۔ جو فرنٹ ڈیسک صرف جواب دیتا ہے اس کے لیے اوپر والا ورکر مختصر ہے اور اس میں بگڑنے کی گنجائش کم ہے۔
دونوں صورتوں میں ویب ہک رہتا ہے۔ MCP درخواست اور جواب کا نظام ہے، اور کسٹمر کا میسج ایجنٹ تک صرف اسی روٹ سے پہنچ سکتا ہے جسے Meta کال کرتا ہے۔
عام غلطیاں
- Meta کو 200 واپس کرنے سے پہلے ایجنٹ چلانا۔ سست جواب پر دوبارہ کوشش ہوتی ہے اور کسٹمر کو دو جواب مل جاتے ہیں۔
- سب کسٹمرز کے لیے ایک ہی سیشن استعمال کرنا۔ کلید بھیجنے والے کا نمبر رکھیں، ورنہ ہسٹری آپس میں مل جاتی ہے۔
- تاخیر سے ہونے والے فالو اپ میں آزاد متن بھیجنا۔ 24 گھنٹے بعد یہ ایرر کوڈ 131047 کے ساتھ ناکام ہوتا ہے؛ اس کی جگہ ٹیمپلیٹ بھیجیں۔
easycoexistence.com پر نمبر جوڑیں، ویب ہک منزل اپنے روٹ پر سیٹ کریں، اور ٹوکن اور phone_number_id ڈیش بورڈ سے پڑھ لیں۔ قیمت فی نمبر ماہانہ US$ 9 سے شروع ہوتی ہے اور نمبرز بڑھنے پر US$ 1 تک آ جاتی ہے، پہلے 3 دن مفت۔
اکثر پوچھے جانے والے سوالات
کیا اس کے لیے OpenAI Responses API کا hosted MCP ٹول درکار ہے؟
نہیں۔ ورکر ایجنٹ کو Runner.run سے مقامی طور پر چلاتا ہے، اور WhatsApp والا حصہ ایک سادہ HTTPS کال ہے جو آپ کا کوڈ کرتا ہے۔
مجھے کون سا Graph API ورژن استعمال کرنا چاہیے؟
Meta کی موجودہ مثالیں v25.0 استعمال کرتی ہیں۔ ورژن اپنے کوڈ میں ایک ہی جگہ طے کریں تاکہ اپ گریڈ ایک لائن کی تبدیلی رہے۔
کیا کوئی شخص فون سے کنٹرول سنبھال سکتا ہے؟
جی ہاں۔ Coexistence میں WhatsApp Business ایپ چلتی رہتی ہے، اور فون سے دیا گیا جواب آپ کے روٹ پر echo ایونٹ کے طور پر پہنچتا ہے جسے ورکر ایجنٹ کو روکنے کے لیے استعمال کر سکتا ہے۔
کیا EasyCoexistence گفتگو محفوظ کرتا ہے؟
نہیں۔ Meta براہِ راست آپ کے روٹ پر ڈیلیور کرتا ہے۔ سیشن جو کچھ محفوظ کرتا ہے وہ آپ کے اپنے ڈیٹا بیس میں رہتا ہے۔
مزید پڑھیں
شروع کرنے کے لیے تیار ہیں؟
WhatsApp Coexistence چند منٹ میں سیٹ اپ کریں، مہینوں میں نہیں۔ ایپ فون پر کام کرتی رہتی ہے۔
فری ٹرائل شروع کریںتصدیق شدہ تاریخ