LangChain एजेंट को WhatsApp नंबर दें
LangChain एजेंट को WhatsApp दो हिस्सों में मिलता है। आने वाले मैसेज नंबर के वेबहुक के ज़रिए आपके वेब रूट पर पहुँचते हैं, और वह रूट एजेंट को चलाता है। कुछ करने के लिए एजेंट LangChain के MCPAdapter से OAuth के साथ EasyCoexistence MCP टूल लोड करता है, या नंबर के टोकन और phone_number_id के साथ सीधे Cloud API को कॉल करता है।
langchain.mcp नेमस्पेस के लिए langchain[mcp] का न्यूनतम वर्शन, जो अभी बीटा में है।
पूरा OAuth 2.1 फ़्लो चलाता है: discovery, dynamic client registration, ब्राउज़र रीडायरेक्ट और टोकन एक्सचेंज।
प्राप्तकर्ता के पिछले जवाब को 24 घंटे से ज़्यादा हो जाने पर Meta की ओर से आने वाली गड़बड़ी।
LangChain एजेंट WhatsApp टूल कैसे लोड करता है?
MCPAdapter के ज़रिए, जो LangChain का MCP क्लाइंट है और किसी MCP सर्वर के टूल को सामान्य LangChain टूल की तरह create_agent को सौंप देता है। इसके लिए langchain[mcp] का वर्शन 1.4.0 या उससे नया चाहिए, और यह बीटा के रूप में चिह्नित है।
ऑथेंटिकेशन FastMCP को सौंपा जाता है। क्लाइंट पर auth="oauth" देने से पूरा OAuth 2.1 फ़्लो चलता है: discovery, dynamic client registration, ब्राउज़र रीडायरेक्ट और टोकन एक्सचेंज। 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 यह नहीं कर सकता। प्रोटोकॉल अनुरोध और जवाब पर चलता है, इसलिए उसमें ऐसा कुछ नहीं है जिससे ग्राहक के लिखने पर सर्वर क्लाइंट को जगा सके।
नंबर का वेबहुक डेस्टिनेशन अपने ही ऐप्लिकेशन के किसी रूट पर रखें, और यूआरएल के पाथ में एक लंबा रैंडम सीक्रेट जोड़ें। यह रूट Meta के पुष्टि वाले GET का जवाब कच्चे challenge से देता है, हर POST स्वीकार करता है, तुरंत 200 लौटाता है और काम को कतार में डाल देता है। फिर एक वर्कर पेलोड से भेजने वाले का नंबर और टेक्स्ट निकालकर एजेंट को चलाता है। भेजने वाले का नंबर ही थ्रेड आईडी बनता है, ताकि मेमोरी हर ग्राहक की अलग रहे।
सीक्रेट की जाँच यूआरएल में करें, 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 को महीनों में नहीं, मिनटों में कॉन्फ़िगर करें। ऐप्लिकेशन मोबाइल पर काम करता रहता है।
मुफ़्त ट्रायल शुरू करेंइस तारीख को सत्यापित