LangChain এজেন্টকে একটি WhatsApp নম্বর দিন
LangChain এজেন্টের জন্য WhatsApp দুই ভাগে কাজ করে। আসা মেসেজ নম্বরের ওয়েবহুকের মাধ্যমে আপনার ওয়েব রুটে পৌঁছায়, আর রুটটি এজেন্টকে চালু করে। কাজ করতে এজেন্ট LangChain-এর MCPAdapter দিয়ে OAuth-সহ EasyCoexistence MCP টুল লোড করে, অথবা নম্বরের টোকেন ও ফোন নম্বর আইডি দিয়ে সরাসরি Cloud API কল করে।
langchain.mcp নেমস্পেসের জন্য langchain[mcp]-এর সর্বনিম্ন ভার্সন, যা এখনো বেটা।
পুরো OAuth 2.1 ফ্লো চালায়: ডিসকভারি, ডাইনামিক ক্লায়েন্ট রেজিস্ট্রেশন, ব্রাউজার রিডাইরেক্ট এবং টোকেন এক্সচেঞ্জ।
প্রাপক সর্বশেষ উত্তর দেওয়ার পর 24 ঘণ্টার বেশি পার হয়ে গেলে Meta-র দেওয়া ত্রুটি।
LangChain এজেন্ট কীভাবে WhatsApp টুল লোড করে?
MCPAdapter-এর মাধ্যমে। এটি LangChain-এর MCP ক্লায়েন্ট, যা MCP সার্ভারের টুলগুলোকে সাধারণ LangChain টুল হিসেবে create_agent-এ তুলে দেয়। এর জন্য langchain[mcp] ভার্সন 1.4.0 বা তার পরের হতে হবে, আর এটি বেটা হিসেবে চিহ্নিত।
অথেনটিকেশনের দায়িত্ব FastMCP-র। ক্লায়েন্টে auth="oauth" দিলে পুরো OAuth 2.1 ফ্লো চলে: ডিসকভারি, ডাইনামিক ক্লায়েন্ট রেজিস্ট্রেশন, ব্রাউজার রিডাইরেক্ট এবং টোকেন এক্সচেঞ্জ। EasyCoexistence MCP সার্ভার ঠিক এটাই আশা করে, তাই কোনো কী তৈরি বা পেস্ট করতে হয় না। ডিফল্টে টোকেন মেমরিতে থাকে এবং প্রতিটি রানে ব্রাউজারের ধাপ আবার করতে হয়। টোকেন স্টোরসহ FastMCP OAuth প্রোভাইডার ব্যবহার করলে টোকেন এক রান থেকে আরেক রানে থেকে যায়।
লোড হওয়ার পর এজেন্ট টুলগুলোকে বর্ণনাসহ দেখতে পায়: প্রথমে list_numbers, কারণ বাকি সব টুল এর থেকে পাওয়া connection_id নেয়, তারপর send_message, send_template, list_templates, get_number_health এবং বাকিগুলো।
from fastmcp.client import Client
from langchain.agents import create_agent
from langchain.mcp import MCPAdapter
URL = "https://easycoexistence.com/api/mcp"
async def build_agent(model: str):
async with MCPAdapter(Client(URL, auth="oauth")) as adapter:
tools = await adapter.list_tools()
return create_agent(model, tools)আসা WhatsApp মেসেজ কীভাবে এজেন্টের কাছে পৌঁছায়?
ওয়েবহুকের মাধ্যমে, কারণ MCP এটা করতে পারে না। প্রোটোকলটি রিকোয়েস্ট ও প্রতিক্রিয়ার ভিত্তিতে চলে, তাই গ্রাহক মেসেজ লিখলে সার্ভার ক্লায়েন্টকে জাগিয়ে তোলার কোনো উপায় এতে নেই।
নম্বরের ওয়েবহুক গন্তব্য আপনার নিজের অ্যাপ্লিকেশনের একটি রুটে সেট করুন, URL পাথে একটি লম্বা র্যান্ডম সিক্রেট রেখে। রুটটি Meta-র যাচাইকরণ GET-এর উত্তরে চ্যালেঞ্জ হুবহু ফেরত দেয়, প্রতিটি POST গ্রহণ করে, সঙ্গে সঙ্গে 200 ফেরত দেয় এবং কাজটি কিউতে রাখে। এরপর একটি ওয়ার্কার পেলোড থেকে প্রেরকের নম্বর ও টেক্সট নিয়ে এজেন্টকে চালু করে। থ্রেড আইডি হিসেবে প্রেরকের নম্বর দিলে মেমরি প্রতিটি গ্রাহকের জন্য আলাদা থাকে।
সিক্রেট যাচাই করুন URL-এ, X-Hub-Signature-256 হেডারে নয়। Meta স্বাক্ষর করে Tech Provider-এর অ্যাপ সিক্রেট দিয়ে, যা কখনো শেয়ার করা হয় না, তাই গ্রাহক সেই হেডার যাচাই করতে পারেন না।
এজেন্ট কি MCP দিয়ে পাঠাবে, নাকি Cloud API দিয়ে?
দুটোই চলে, পার্থক্য হলো নিয়মগুলো কার কাছে থাকে। MCP টুলগুলো নিজেদের বর্ণনায় WhatsApp-এর নিয়ম বহন করে, যেমন send_message শুধু 24 ঘণ্টার উইন্ডোর ভেতরে কাজ করে, আর যিনি মেসেজ লেখেননি তাঁর কাছে পৌঁছাতে send_template ব্যবহার করতে হয়। মডেল সেই বর্ণনা পড়ে বেশির ভাগ সময় সঠিকটি বেছে নেয়, আর এজেন্ট যেখানে নিজে সিদ্ধান্ত নেয় সেখানে এটাই কাজে আসে।
এজেন্টের কাজ সীমিত হলে, যেমন যিনি এইমাত্র লিখলেন সবসময় তাঁকেই উত্তর দেওয়া, তখন নম্বরের টোকেন দিয়ে Cloud API মেসেজ এন্ডপয়েন্টে পোস্ট করা আপনার নিজের একটি সাধারণ টুল বেশি সহজ। তখন উইন্ডোর পরীক্ষা থাকে আপনার কোডে, আর যে নিয়ম কখনো ভাঙা চলবে না তার জায়গা সেখানেই। উইন্ডোর বাইরে ফ্রি টেক্সট পাঠালে ত্রুটি 131047 ফেরত আসে, আর গ্রাহক কিছুই দেখতে পান না।
সাধারণ ভুলগুলো
- MCP আসা মেসেজ পৌঁছে দেবে বলে ধরে নেওয়া। ওয়েবহুক রুট না থাকলে এজেন্ট গ্রাহকের কোনো খবরই পায় না।
- সার্ভারে OAuth টোকেন মেমরিতে রেখে দেওয়া। প্রতিবার রিস্টার্টে ব্রাউজার সাইন-ইন লাগে, তাই টোকেন স্টোরে সংরক্ষণ করুন।
- সব গ্রাহকের জন্য একটিই থ্রেড ব্যবহার করা। এজেন্টের মেমরির কী হিসেবে প্রেরকের নম্বর দিন।
easycoexistence.com-এ নম্বরটি সংযুক্ত করুন, ওয়েবহুক গন্তব্য আপনার রুটে সেট করুন, তারপর একবার OAuth সাইন-ইন করে MCP টুলগুলো এজেন্টে লোড করুন। মূল্য প্রতি নম্বরে মাসে US$ 9 থেকে শুরু, নম্বর বাড়লে US$ 1 পর্যন্ত নামে, আর প্রথম 3 দিন ফ্রি।
প্রায়শই জিজ্ঞাসিত প্রশ্ন
এটা কি শুধু Python-এর জন্য?
MCPAdapter-এর উদাহরণটি Python-এ। ওয়েবহুক ও Cloud API সাধারণ HTTP, তাই LangChain যে ভাষাতেই চলুক, গ্রহণ ও পাঠানোর কাজ সেই ভাষায় করা যায়।
এজেন্টের কি প্রতিবার list_numbers লাগে?
এজেন্টের একটি connection_id দরকার, আর তা পাওয়ার একমাত্র জায়গা list_numbers। একটিমাত্র নম্বর থাকলে এজেন্ট শুরুতে একবারই এটি কল করে।
টিম কি ফোন থেকে এখনও উত্তর দিতে পারবে?
হ্যাঁ। Coexistence-এর কারণে WhatsApp Business অ্যাপ কাজ করতে থাকে, আর ফোন থেকে দেওয়া উত্তর echo ইভেন্ট হিসেবে আপনার রুটে পৌঁছায়, যা এজেন্ট বিবেচনায় নিতে পারে।
EasyCoexistence কি কথোপকথন পড়ে?
না। Meta সরাসরি আপনার রুটে ডেলিভার করে, আর মেসেজের কনটেন্ট আমাদের দিকে কখনো সংরক্ষিত হয় না। MCP টুলগুলো অ্যাকাউন্ট ও নম্বরের স্ট্যাটাস পড়ে।
আরও পড়ুন
শুরু করতে প্রস্তুত?
মাস নয়, কয়েক মিনিটেই WhatsApp Coexistence সেট আপ করুন। ফোনে অ্যাপটি কাজ করতে থাকে।
ফ্রি ট্রায়াল শুরু করুনযাচাই করা হয়েছে