Python থেকে WhatsApp মেসেজ পাঠান ও নিন
মেসেজ নেওয়ার জন্য আপনার ওয়েব ফ্রেমওয়ার্কে একটি রুট Meta-র যাচাইকরণ GET-এর উত্তর দেয় এবং POST গ্রহণ করে। পাঠানোর জন্য ফোন নম্বরের `phone_number_id` ও টোকেনসহ Cloud API-তে HTTPS রিকোয়েস্ট পাঠান। আমাদের কোনো SDK বা ইনস্টল করার কিছু নেই।
Meta-র যাচাইকরণের জন্য একটি GET এবং ইভেন্টের জন্য একটি POST। এটাই মেসেজ নেওয়ার অংশ।
গ্রাহকের মেসেজের পর যে সময়ের মধ্যে ফ্রি টেক্সট পাঠানো যায়।
ওই সময়ের বাইরে ফ্রি টেক্সট পাঠালে যে ত্রুটি ফেরত আসে।
Python-এ মেসেজ কীভাবে নেবেন?
আপনি আগে থেকেই যে ফ্রেমওয়ার্ক ব্যবহার করেন, তাতে একটি রুটে দুটি হ্যান্ডলার রাখুন।
GET হ্যান্ডলার Meta-র যাচাইকরণের উত্তর দেয়। এটি কোয়েরি স্ট্রিং থেকে `hub.mode`, `hub.verify_token` এবং `hub.challenge` পড়ে, টোকেনটি আপনার নিজের টোকেনের সঙ্গে মিলিয়ে দেখে, তারপর raw body হিসেবে challenge ফেরত দেয়। এখানে JSON ফেরত দেওয়া সবচেয়ে সাধারণ ভুল, এবং এটি নীরবে ব্যর্থ হয়।
POST হ্যান্ডলার ইভেন্ট গ্রহণ করে। দ্রুত 200 ফেরত দিন এবং পরে কাজ করুন, কারণ ধীর প্রতিক্রিয়াকে Meta ব্যর্থতা হিসেবে ধরে আবার চেষ্টা করবে। এতে একই মেসেজ দুবার সামলাতে হতে পারে। মেসেজটি কিউতে রাখুন বা ব্যাকগ্রাউন্ড টাস্কে দিন, সরাসরি হ্যান্ডলারের মধ্যে প্রক্রিয়া করবেন না।
মেসেজের সঙ্গে `wamid` মেসেজ আইডি আসে। শুরু থেকেই এটি দিয়ে ডুপ্লিকেট বাদ দেওয়া ভালো, কারণ পুনরায় চেষ্টা হওয়া স্বাভাবিক, ব্যতিক্রম নয়।
কীভাবে পাঠাবেন?
ফোন নম্বরের `phone_number_id`-এর জন্য Cloud API-র `messages` এন্ডপয়েন্টে bearer টোকেনসহ একটি POST পাঠান।
দুটি মানই সংযোগ থেকে আসে: ড্যাশবোর্ডে সেগুলো দেখা যায়, আর আপনি চাইলে সহকারীকে আনতে দিলে `get_api_credentials` সেগুলো ফেরত দেয়। কলটির কোনো অংশই আমাদের জন্য নির্দিষ্ট নয়, তাই যেকোনো HTTP লাইব্রেরি কাজ করবে এবং রিকোয়েস্টটি Meta-র নিজস্ব ডকুমেন্টেশনের মতোই হবে।
সময়ের সঙ্গে পেলোড বদলে যায়। গ্রাহকের শেষ মেসেজের 24 ঘণ্টার মধ্যে `text` অবজেক্ট পাঠাবেন। এর বাইরে অনুমোদিত টেমপ্লেট ও তার ভাষা উল্লেখ করে `template` অবজেক্ট পাঠাবেন। যে ক্লায়েন্ট শুধু প্রথম গঠনটি জানে, সেটি পরীক্ষায় ঠিক কাজ করবে, কিন্তু রাত পেরোনোর পর প্রথম মেসেজেই ব্যর্থ হয়ে `131047` ত্রুটি ফেরত দেবে।
প্রোডাকশন হ্যান্ডলারে এর বাইরে কী দরকার?
এমন তিনটি বিষয় আছে, যা বাদ দেওয়া সহজ কিন্তু পরে যোগ করা ব্যয়বহুল।
মেসেজ আইডি দিয়ে ডুপ্লিকেট বাদ দিন, কারণ Meta আবার চেষ্টা করে। আপনি যদি প্রকাশ্যে উন্মুক্ত থাকেন, রিকোয়েস্টের স্বাক্ষর যাচাই করুন, নইলে আপনার URL জানা যে কেউ সেখানে পোস্ট করতে পারবে। আর যোগাযোগটি শেষবার লেখার পর কত সময় পেরিয়েছে তা দেখে শাখা তৈরি করুন, যাতে পাঠানোর পথ নিজেই `text` বা `template` বেছে নেয়।
এর কোনোটির জন্য ফ্রেমওয়ার্ক বা লাইব্রেরি দরকার নেই। এগুলো একটি সেট, একটি যাচাই এবং একটি তুলনা। প্রথম ক্লায়েন্ট আসার আগেই এগুলো বসিয়ে নিলে সংযোগটি নীরবে চলবে, আর না করলে বারবার আপনাকে সতর্ক করতে হবে।
সাধারণ ভুলগুলো
- যাচাইকরণের GET থেকে raw challenge value-এর বদলে JSON ফেরত দেওয়া।
- 200 ফেরত দেওয়ার আগে সরাসরি প্রক্রিয়া করা। Meta ধীর প্রতিক্রিয়ায় আবার চেষ্টা করে, ফলে মেসেজটি দুবার সামলাতে হয়।
- সময়ের সীমা যাচাই না করে ফ্রি টেক্সট পাঠানো। এতে `131047` ফেরত আসে এবং মনে হয় কিছুই ঘটেনি।
easycoexistence.com-এ নম্বরটি সংযুক্ত করুন, আপনার রুটকে ওয়েবহুকের গন্তব্য হিসেবে সেট করুন, তারপর ড্যাশবোর্ড থেকে `phone_number_id` ও টোকেন নিন। প্রতি নম্বরে মাসে US$ 9 থেকে, বেশি পরিমাণে US$ 2 পর্যন্ত কমে, প্রথম 7 দিন ফ্রি।
প্রায়শই জিজ্ঞাসিত প্রশ্ন
Python SDK আছে কি?
আমাদের কাছ থেকে নেই, এবং আপনার সেটি দরকারও নেই। APIটি Meta-র, ডকুমেন্টেশনও Meta-র, আর যেকোনো HTTP লাইব্রেরি দিয়ে এতে পৌঁছানো যায়।
কোন ফ্রেমওয়ার্ক ব্যবহার করা উচিত?
যেকোনোটি। দরকার এমন একটি রুট, যা GET-এর উত্তর দেয় এবং POST গ্রহণ করে। প্রতিটি Python ওয়েব ফ্রেমওয়ার্কই তা পারে।
একটি মেসেজ দুবার সামলানো কীভাবে এড়াব?
পেলোডের `wamid` মেসেজ আইডি দিয়ে ডুপ্লিকেট বাদ দিন। Meta পরিকল্পনা অনুযায়ী আবার চেষ্টা করে, তাই এটি অস্বাভাবিক ঘটনা নয়।
টিম কি এখনও ফোন ব্যবহার করতে পারবে?
হ্যাঁ। Coexistence একই নম্বরে WhatsApp Business অ্যাপ চালু রাখে, আর আপনার হ্যান্ডলার তারা যা পাঠায় তা echo ইভেন্ট হিসেবে দেখতে পায়।
আরও পড়ুন
শুরু করতে প্রস্তুত?
মাস নয়, কয়েক মিনিটেই WhatsApp Coexistence সেট আপ করুন। ফোনে অ্যাপটি কাজ করতে থাকে।
ফ্রি ট্রায়াল শুরু করুনযাচাই করা হয়েছে