লগ ইনফ্রি ট্রায়াল শুরু করুন
Meta Tech Provider

WhatsApp-এ একটি OpenAI Agents SDK এজেন্ট চালু করুন

নম্বরের ওয়েবহুক গন্তব্য হিসেবে আপনার Python অ্যাপের একটি রুট সেট করুন। প্রতিটি আসা মেসেজের জন্য Runner.run দিয়ে এজেন্ট চালান, প্রেরকের নম্বরকে কী ধরে একটি সেশন ব্যবহার করুন, তারপর নম্বরের টোকেন ও phone_number_id দিয়ে result.final_output Cloud API-র মাধ্যমে ফেরত পাঠান। একই নম্বরে WhatsApp Business অ্যাপ আগের মতোই কাজ করে।

SQLiteSession

SDK-র বিল্ট-ইন সেশন, ফাইল-ভিত্তিক বা ইন-মেমরি, যা একটি সেশন আইডির অধীনে আগের টার্নগুলো মনে রাখে।

params["auth"]

এখানে সার্ভার অথেনটিকেশনের জন্য MCPServerStreamableHttp একটি httpx.Auth বা Authorization হেডার গ্রহণ করে।

v25.0

Meta-র বর্তমান মেসেজ পাঠানোর উদাহরণে যে Graph API সংস্করণ ব্যবহার হয়।

একটি WhatsApp মেসেজ কীভাবে এজেন্ট রান হয়ে ওঠে?

আপনার নিজের অ্যাপের একটি রুটের মাধ্যমে, যেটিকে Meta কল করে। নম্বরের ওয়েবহুক গন্তব্য হিসেবে সেটি সেট করুন এবং পাথে একটি দীর্ঘ র‍্যান্ডম সিক্রেট রাখুন। রুটটি Meta-র যাচাইকরণ GET-এর উত্তরে hub.challenge প্লেইন টেক্সট হিসেবে ফেরত দেয়, প্রতিটি POST গ্রহণ করে, সঙ্গে সঙ্গে 200 দিয়ে সাড়া দেয় এবং কাজটি কিউতে রাখে। কারণ ধীর সাড়া পেলে Meta আবার চেষ্টা করে, আর তখন আপনার এজেন্ট দুইবার চলবে।

এরপর একটি ওয়ার্কার পেলোড থেকে প্রেরক ও টেক্সট পড়ে Runner.run কল করে। এমন একটি সেশন দিন যার আইডি প্রেরকের নম্বর: SDK কথোপকথনটি সেই আইডির অধীনে রাখে, তাই একই গ্রাহকের পরের মেসেজ আগের জায়গা থেকেই চলতে থাকে এবং দুইজন গ্রাহকের ইতিহাস কখনও মিশে যায় না। শুরুর জন্য SQLiteSession যথেষ্ট। একাধিক ওয়ার্কার চালালে SDK-র Redis ও SQLAlchemy সেশনও আছে।

এখানে URL-এর সিক্রেটই অথেনটিকেশন। Meta ডেলিভারি সাইন করে Tech Provider-এর অ্যাপ সিক্রেট দিয়ে, তাই গ্রাহক নিজে সিগনেচার হেডার যাচাই করতে পারেন না।

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}},
        )

উত্তর পাঠানোর কাজ এজেন্টের না হয়ে আপনার কোডের হওয়া উচিত কেন?

কারণ যে নিয়মটি কখনও ভাঙা চলবে না সেটি সময়ের নিয়ম, আর প্রম্পটের চেয়ে কোড সেটি ভালোভাবে মানাতে পারে। গ্রাহক লিখলে 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 অথ হ্যান্ডলার এবং PKCE ও টোকেন রিফ্রেশ সহ সেই ফ্লো চালায়। params["auth"]-এ সেটিই বসে।

এটি কাজের যখন এজেন্টকে নিজে সিদ্ধান্ত নিতে হয়: কোনো নম্বরের হেলথ দেখা, টেমপ্লেটের স্ট্যাটাস পড়া, বা টুলের বিবরণের নিয়ম অনুযায়ী send_message ও send_template-এর মধ্যে বেছে নেওয়া। যে ফ্রন্ট ডেস্ক শুধু উত্তর দেয়, তার জন্য উপরের ওয়ার্কারই ছোট এবং ভুলের সুযোগ কম।

যেটাই করুন, ওয়েবহুক থাকবে। MCP হলো রিকোয়েস্ট ও প্রতিক্রিয়া, আর গ্রাহকের মেসেজ এজেন্টের কাছে পৌঁছাতে পারে কেবল Meta যে রুটে কল করে সেটির মাধ্যমে।

সাধারণ ভুলগুলো

  • Meta-কে 200 ফেরত দেওয়ার আগে এজেন্ট চালানো। ধীর সাড়ায় Meta আবার চেষ্টা করে, আর গ্রাহক দুটি উত্তর পান।
  • সব গ্রাহকের জন্য একটিই সেশন ব্যবহার করা। প্রেরকের নম্বরকে কী ধরুন, নইলে ইতিহাস মিশে যায়।
  • দেরিতে পাঠানো ফলো-আপে ফ্রি টেক্সট যেতে দেওয়া। 24 ঘণ্টা পর এটি 131047 দিয়ে ব্যর্থ হয়, তাই টেমপ্লেট পাঠান।
EasyCoexistence দিয়ে এটি করা

easycoexistence.com-এ নম্বরটি সংযুক্ত করুন, ওয়েবহুক গন্তব্য হিসেবে আপনার রুট সেট করুন, এবং ড্যাশবোর্ড থেকে টোকেন ও phone_number_id নিন। প্রতি নম্বরে মাসে US$ 9 থেকে শুরু, নম্বর বাড়লে US$ 1 পর্যন্ত কমে, প্রথম 3 দিন ফ্রি।

প্রায়শই জিজ্ঞাসিত প্রশ্ন

এর জন্য কি OpenAI Responses API-র হোস্টেড MCP টুল লাগে?

না। ওয়ার্কার Runner.run দিয়ে এজেন্টটি লোকালি চালায়, আর WhatsApp-এর দিকটি আপনার কোডের করা একটি সাধারণ HTTPS কল।

কোন Graph API সংস্করণ ব্যবহার করব?

Meta-র বর্তমান উদাহরণে v25.0 ব্যবহার হয়। সংস্করণটি আপনার কোডের একটি জায়গায় ঠিক করে রাখুন, যাতে আপগ্রেড এক লাইনের পরিবর্তনে হয়ে যায়।

কেউ কি ফোন থেকে দায়িত্ব নিতে পারেন?

হ্যাঁ। Coexistence-এ WhatsApp Business অ্যাপ কাজ করতে থাকে, আর ফোন থেকে দেওয়া উত্তর আপনার রুটে ইকো ইভেন্ট হিসেবে আসে, যা ব্যবহার করে ওয়ার্কার এজেন্টকে থামিয়ে দিতে পারে।

EasyCoexistence কি কথোপকথন সংরক্ষণ করে?

না। Meta সরাসরি আপনার রুটে ডেলিভার করে। সেশন যা কিছু সংরক্ষণ করে তা আপনার নিজের ডেটাবেসে থাকে।

আরও পড়ুন

শুরু করতে প্রস্তুত?

মাস নয়, কয়েক মিনিটেই WhatsApp Coexistence সেট আপ করুন। ফোনে অ্যাপটি কাজ করতে থাকে।

ফ্রি ট্রায়াল শুরু করুন

যাচাই করা হয়েছে

WhatsApp-এ OpenAI Agents SDK এজেন্ট, Cloud API