Zinn Digital® মডিউলটি WHMCS-এর নিজস্ব বাটনগুলোকে আমাদের প্ল্যাটফর্মের বাস্তব পদক্ষেপে রূপান্তরিত করে। একটি অর্ডার আপনার ক্লায়েন্টের হোস্টিং প্রভিশন করে। WHMCS-এর বকেয়া-ইনভয়েস অটোমেশন এটিকে সাসপেন্ড করে। ইনভয়েসটি পরিশোধিত হিসেবে চিহ্নিত করলে এটি আবার সচল হয়। বাতিল করলে ডিলিট করার প্রক্রিয়া নির্ধারিত হয়। এবং আপনার ক্লায়েন্ট তাদের ক্লায়েন্ট এরিয়াতে একটি Log in to hosting panel বাটন পান যা তাদের সরাসরি সাইন ইন করিয়ে দেয়।
এটি বিনামূল্যে ব্যবহারের জন্য উপলব্ধ, GPL-2.0-or-later লাইসেন্সপ্রাপ্ত, এবং আমাদের প্ল্যাটফর্মে এর কোনো বিশেষ সুবিধাপ্রাপ্ত পাথ নেই: এটি যে প্রতিটি কল করে তা একটি ডকুমেন্টেড এন্ডপয়েন্ট, যা আপনি আপনার নিজস্ব API কী দিয়ে নিজেই তৈরি করতে পারেন।
শুরু করার আগে
আপনার দুটি জিনিসের প্রয়োজন হবে, এবং দ্বিতীয় বিষয়টি অনেকেই খেয়াল করেন না।
- একটি সক্রিয় প্রোগ্রামসহ একটি Zinn® রিসেলার অ্যাকাউন্ট। zinndigital.com-এ সাইন আপ করুন এবং রিসেলিং চালু করুন।
- সাইট বরাদ্দ (site allowance) সহ একটি রিসেলার প্ল্যান। আপনার ক্লায়েন্টদের অর্ডার করা সাইটগুলো আপনার প্ল্যানের বরাদ্দের বিপরীতে গণনা করা হয়, তাই আপনার এমন একটি প্ল্যান প্রয়োজন যাতে পর্যাপ্ত জায়গা রয়েছে।
⚠️ Test Connection আপনাকে বলতে পারে না যে কোনো অর্ডার সফল হবে কি না। এটি আপনার প্রোগ্রামটি পড়ে এবং কিছুই প্রভিশন করে না, তাই এটি একটি কার্যকর active অ্যাকাউন্ট রিপোর্ট করে যা এখনও কোনো কিছু বিক্রি করতে পারে না। আপনার প্রথম অর্ডারটি যদি "This organization has no hosting plan, so it cannot host a site yet" বার্তা দিয়ে ব্যর্থ হয়, তবে বুঝতে হবে এটিই ঘটেছে — আপনার রিসেলার প্ল্যান কিনুন বা বাড়ান এবং পুনরায় অর্ডার দিন। মডিউলে কোনো ত্রুটি নেই।
১. API কী তৈরি করুন
আপনার Zinn® ড্যাশবোর্ডে, API keys খুলুন এবং ঠিক এই এগারোটি পারমিশনসহ একটি কী তৈরি করুন:
| পারমিশন | কেন এটি প্রয়োজন |
|---|
org.create | আপনার ক্লায়েন্টের প্রথম অর্ডারে তাদের Zinn® অ্যাকাউন্ট খুলতে। |
org.read | আপনার ক্লায়েন্ট অ্যাকাউন্টগুলো পড়তে। |
sites.create | সাইট প্রভিশন করতে। |
sites.view | একটি সার্ভিস এবং এর ব্যবহার সম্পর্কিত তথ্য পড়তে। |
sites.delete | টার্মিনেট করতে। |
reseller.view | আপনি কী বিক্রি করেছেন তা তালিকাভুক্ত করতে এবং ডিস্ক ও ব্যান্ডউইথ দেখতে। |
reseller.provision | সাসপেন্ড করতে, অবমুক্ত করতে, ক্লায়েন্টকে সাইন ইন করাতে, তাদের প্ল্যান সেট করতে এবং তাদের প্যাকেজ পরিবর্তন করতে। |
billing.view | আপগ্রেড করার আগে সেটির খরচ কত হবে তা দেখতে। |
sites.manage | বাটনগুলো থেকে ক্যাশ মুছে ফেলতে (purge) এবং ব্যাকআপ নিতে। |
sites.panel_access | WordPress অ্যাডমিনিস্ট্রেটরের পাসওয়ার্ড পরিবর্তন করতে। |
hosting.php.manage | আপগ্রেড বা ডাউনগ্রেডের সময় PHP ভার্সন পরিবর্তন করতে। |
⛔ reseller.manage পারমিশন দেবেন না। একটি বিলিং প্যানেলে পেস্ট করা কী-এর কেবল অর্থ পরিশোধ না করার কারণে কোনো ক্লায়েন্টকে আটকে রাখা এবং তাদের সাইন ইন করানোর ক্ষমতা থাকা উচিত। আপনার নিজস্ব পেমেন্ট-গেটওয়ে ক্রেডেনশিয়াল পড়ার এবং পুনরায় লেখার ক্ষমতা এটির থাকা উচিত নয়। reseller.provision তৈরিই করা হয়েছে যাতে আপনাকে বৃহত্তর পারমিশনটি দিতে না হয়। ⛔ org.create ঐচ্ছিক নয়। এটি ছাড়া মডিউলটি আপনার অ্যাকাউন্টগুলো পড়তে পারলেও নতুন কোনো অ্যাকাউন্ট খুলতে পারে না, যার ফলে Test Connection সফল হলেও প্রথম অর্ডারটিতে 403 উত্তর আসে। ⛔⛔ পুরো টেবিলটির পারমিশন প্রদান করুন, এবং মনে রাখবেন যে আপনি তা না করলে Test Connection তা আপনাকে জানাতে পারবে না। এটি আপনার রিসেলার প্রোগ্রাম পড়ে এবং কিছুই প্রভিশন করে না, তাই এর যেকোনো একটি পারমিশন বাদ গেলেও এটি সফল (green) দেখায়। এর পরিবর্তে আপনি যা পাবেন তা হলো, কয়েক মাস পরে একজন গ্রাহকের কাছ থেকে সেই নির্দিষ্ট অপারেশনে একটি 403 ত্রুটি, যা ওই অনুপস্থিত পারমিশনের আওতাভুক্ত ছিল।
২. মডিউল ইনস্টল করুন
১. মডিউলটি ডাউনলোড করুন এবং এটি আনজিপ করুন। ২. zinn ডিরেক্টরিটি আপনার WHMCS ইনস্টলেশনে আপলোড করুন যাতে মডিউল ফাইলটি modules/servers/zinn/zinn.php-তে অবস্থান করে।
⛔ ডিরেক্টরিটির নাম অবশ্যই zinn হতে হবে। WHMCS কোনো প্রভিশনিং মডিউলের ফাংশন নামগুলো তার ডিরেক্টরির নাম থেকে গ্রহণ করে, তাই এর নাম পরিবর্তন করে zinn-whmcs বা zinndigital রাখলে এমন একটি মডিউল তৈরি হয় যা WHMCS তালিকাভুক্ত করে, আপনাকে নির্বাচন করতে দেয়, কিন্তু পরে আর কখনো কল করে না — এবং কোথাও কোনো ত্রুটিও দেখায় না। জিপ ফাইলটি আগে থেকেই সঠিক নামে আনপ্যাক হয়; কেবল এটির নাম পরিবর্তন করবেন না।
৩. সার্ভার যুক্ত করুন
WHMCS-এ: Configuration → System Settings → Servers → Add New Server।
- Name: যেকোনো কিছু, যেমন
Zinn Digital®
- Hostname:
api.zinndigital.com
- Type:
Zinn Digital®
- Password: ধাপ ১ থেকে প্রাপ্ত আপনার API কী
⛔ কী-টি Password ফিল্ডে প্রবেশ করাতে হবে, যা WHMCS এনক্রিপ্ট করে সংরক্ষণ করে। এটিকে কোনো প্রোডাক্ট কনফিগারেশন অপশনে রাখবেন না — সেগুলো ডেটাবেসে প্লেইন টেক্সট হিসেবে থাকে এবং প্রতিটি অ্যাডমিনের কাছে দৃশ্যমান হয়, অথচ এই ক্রেডেনশিয়ালটি আপনার ক্লায়েন্টদের হোস্টিং তৈরি ও ধ্বংস করতে সক্ষম।
Test Connection চাপুন। ফিল্ডগুলো পূরণ করা হয়েছে কি না কেবল তা যাচাই করার পরিবর্তে এটি একটি বাস্তব কল করে এবং আমাদের প্ল্যাটফর্ম কী উত্তর দিয়েছে তা রিপোর্ট করে।
৪. প্রোডাক্ট তৈরি করুন
Configuration → System Settings → Products/Services, এরপর Module Settings-কে আপনার এইমাত্র যুক্ত করা সার্ভারে সেট করুন। ফিল্ডগুলো হলো:
| ফিল্ড | আবশ্যক | এটি কী |
|---|
| Product line | হ্যাঁ | আপনি যে Zinn® লাইনটি বিক্রি করছেন — mainstream (ম্যানেজড WordPress), footprint_free, wordpress, linux, cloud, agency, app_hosting, ai_hosting, lms_hosting, managed_database, vector_hosting, zinn_compute, fleet_linux, fleet_enterprise, mail অথবা reseller। |
| Stack | হ্যাঁ | যা তৈরি করা হবে: wordpress (ডিফল্ট), woocommerce, php, static, node, one_click, headless_cms, nextcloud অথবা owncloud। |
| Application | না | কেবল one_click এবং headless_cms স্ট্যাকের জন্য — কোন অ্যাপ্লিকেশনটি ইনস্টল করতে হবে। অন্য যেকোনো স্ট্যাকে কোনো নাম উল্লেখ করা হলে তা প্রত্যাখ্যান করা হয়, কারণ সেই স্ট্যাকটি ইতিমধ্যেই নির্ধারণ করে দেয় কী ইনস্টল করা হবে। |
| PHP version | না | যেমন 8.3। লাইনের ডিফল্ট মানের জন্য খালি রাখুন। লাইনটিতে নেই এমন কোনো ভার্সন উল্লেখ করা হলে তা প্রত্যাখ্যান করা হয় এবং যেসব ভার্সন সমর্থিত তার তালিকা দেওয়া হয়। |
| Plan code | হ্যাঁ | এই প্রোডাক্টটি যে Zinn® প্ল্যান বিক্রি করে। GET /v1/reseller/prices আপনার প্ল্যানগুলো তালিকাভুক্ত করে। এটি ছাড়া কোনো অর্ডার প্রত্যাখ্যান করা হয় — নিচের সতর্কতা দেখুন। |
| Billing interval | না | monthly (ডিফল্ট) অথবা annual — এই ক্লায়েন্টের জন্য আপনার পাইকারি (wholesale) লাইন যে ব্যবধানে তৈরি হয়। আপনি আপনার নিজস্ব ক্লায়েন্টের কাছ থেকে যা চার্জ করেন তা WHMCS প্রোডাক্টে সেট করা থাকে এবং তা অপরিবর্তিত থাকে। |
⛔⛔ Plan code আবশ্যক, এবং এটি ছাড়া কোনো অর্ডার উদ্দেশ্যমূলকভাবেই প্রত্যাখ্যান করা হয়। 2026-09-01 পর্যন্ত এই ফিল্ডটি কেবল দেখানোর জন্য ছিল এবং কোনো কিছুই এটি পড়ত না, যার ফলে মডিউলটি এমন হোস্টিং অর্ডার করত যাতে কোনো প্ল্যানই থাকত না — এবং এর প্রতিটি পরিণতিই ছিল নীরবে ঘটা। আপনার পাইকারি স্টেটমেন্ট আপনার ক্লায়েন্টদের লাইভ সাবস্ক্রিপশন থেকে তৈরি হয়, তাই এই সার্ভিসের জন্য কোনো লাইন ছিল না এবং এটি যতক্ষণ চলেছে ততক্ষণ আপনাকে কোনো বিল করা হয়নি; আপনার ক্লায়েন্ট কোনো বরাদ্দ পায়নি, তাই তাদের সাইটে কোনো ডিস্ক বা ফাইল কোটা প্রয়োগ করা হয়নি; এবং Change Package-এর পরিবর্তন করার মতো কিছুই ছিল না, ফলে আপনার বিক্রি করা আপগ্রেড কার্যকর করা সম্ভব হয়নি। এই পুরো সময় জুড়ে সাইটটি নিখুঁতভাবে প্রভিশন হয়েছে এবং সার্ভিস প্রদান করেছে।
মডিউলটি এখন এর পরিবর্তে অর্ডারটি প্রত্যাখ্যান করে, কারণ অনুমান করার মতো কোনো নিরাপদ প্ল্যান এর কাছে নেই: অনুমানের ভিত্তিতে এমন একটি প্ল্যানে হোস্টিং প্রভিশন হতে পারে যা আপনি নির্বাচন করেননি এবং যার মূল্যও আপনি নির্ধারণ করেননি, এবং — একটি প্রত্যাখ্যানের মতো তাৎক্ষণিকভাবে দেখার বদলে — এটি কেবল তখনই প্রকাশ্যে আসত যখন কোনো স্টেটমেন্ট আসত, যদি আদৌ আসত।
Auto Setup আপনার পছন্দ অনুযায়ী সেট করুন — মডিউলটি WHMCS সার্ভিস আইডির ওপর আইডেমপোটেন্ট (idempotent), তাই পুনরায় প্রভিশনের চেষ্টা করলে দ্বিতীয় কোনো বিল করার পরিবর্তে একই সাইট ফেরত দেওয়া হয়।
প্রতিটি WHMCS অ্যাকশন যা করে
| WHMCS অ্যাকশন | আমাদের প্রান্তে যা ঘটে |
|---|
| Create | ক্লায়েন্টের Zinn® অ্যাকাউন্ট তৈরি করে (অথবা তাদের ইতিমধ্যেই থাকা অ্যাকাউন্টটি পুনরায় ব্যবহার করে) এবং তাদের সাইট প্রভিশন করে। |
| Suspend | অর্থ পরিশোধ না করার কারণে সাইটটি আটকে রাখে (hold)। বিষয়বস্তু সংরক্ষিত থাকে; কিছুই ডিলিট করা হয় না। |
| Unsuspend | আপনার স্থগিতাদেশ অবমুক্ত করে। |
| Terminate | একটি গ্রেস পিরিয়ডসহ সাইটটির ডিলিট করার প্রক্রিয়া নির্ধারণ করে। তারিখটি ক্লায়েন্ট এরিয়াতে প্রদর্শিত হয়। |
| Usage update | দিনে একবার, প্রতিটি সার্ভিসের ডিস্ক এবং ব্যান্ডউইথ রিফ্রেশ করে। |
| Log in to hosting panel | সরাসরি আপনার ক্লায়েন্টের প্যানেলে প্রবেশের জন্য একটি এককালীন, একক-ব্যবহারযোগ্য সাইন-ইন লিংক খোলে। |
| Change Package | সার্ভিসটি আপগ্রেড বা ডাউনগ্রেড করে। প্যাকেজ পরিবর্তন করে, এবং নতুন প্রোডাক্টে কোনো PHP ভার্সন উল্লেখ থাকলে তাও পরিবর্তন করে। |
| Change Password | WordPress অ্যাডমিনিস্ট্রেটরের পাসওয়ার্ড সেট করে। এমন কোনো স্ট্যাকে এই বক্সটি প্রদর্শিত হয় না যেটিতে এ ধরনের কোনো অ্যাকাউন্ট নেই। |
| Renew | সার্ভিসটি এখনও বিদ্যমান রয়েছে তা নিশ্চিত করে। Zinn® হোস্টিং অবিচ্ছিন্ন, তাই বাড়ানোর মতো কোনো দূরবর্তী মেয়াদ নেই। |
| Sync Usage / Purge Cache / Take Backup | অ্যাডমিন সার্ভিস পেজের বাটনগুলো। আপনার ক্লায়েন্ট তাদের ক্লায়েন্ট এরিয়াতে Purge Cache এবং Take Backup সুবিধা পান। |
| Service tab | স্ট্যাটাস, প্ল্যান, ডিস্ক, ব্যান্ডউইথ, নির্ধারিত যেকোনো ডিলিটের সময়সূচি এবং কে সাসপেনশন প্রয়োগ করেছে তা দেখায়। |
| Import | ListAccounts প্রতিটি পেজ পড়ে, তাই কোনো ইমপোর্ট নীরবে প্রথম পেজেই থেমে যেতে পারে না। |
আপগ্রেড: কে কার কাছ থেকে চার্জ করে
কোনো অর্ডার বা আপগ্রেডের ক্ষেত্রে আপনার ক্লায়েন্টকে কখনোই Zinn® ইনভয়েস পাঠায় না। আপনি WHMCS-এর মাধ্যমে তাদের বিল করেন; আমরা আপনার পাইকারি স্টেটমেন্টে আপনাকে বিল করি। সুতরাং Change Package আপনার ক্লায়েন্টের এনটাইটেলমেন্ট এবং আপনার পরবর্তী স্টেটমেন্টের লাইনটি পরিবর্তন করে, এবং কোনো কার্ড স্পর্শ করে না — WHMCS ইতিমধ্যেই আপনার ক্লায়েন্টের অর্থ গ্রহণ করেছে এবং নিজস্ব প্রোরেশন (proration) গণনা করেছে।
একজন ক্লায়েন্টের দ্বিতীয় সার্ভিস। একই প্ল্যানে এটি সেই প্ল্যানের নিজস্ব সাইট বরাদ্দের অধীনে আরেকটি সাইট হিসেবে গণ্য হয়, এবং অতিরিক্ত কিছুই প্রদান করা হয় না। একটি ভিন্ন প্ল্যানে এটি প্রত্যাখ্যান করা হয়: সক্রিয় প্ল্যানটি প্রতিস্থাপন করলে দুটি সার্ভিসের একটি আনবিল্ড (unbilled) থেকে যাবে। হয় উভয় সার্ভিস একই প্ল্যানে বিক্রি করুন, অথবা WHMCS-এ ক্লায়েন্টকে একটি পৃথক ক্লায়েন্ট রেকর্ড হিসেবে সেট আপ করুন।
Change Password কেবল WordPress-এর জন্যই বিদ্যমান। Zinn® হোস্টিংয়ের কোনো একক "সার্ভিস পাসওয়ার্ড" নেই — আপনার ক্লায়েন্ট সাইন-ইন বাটনের মাধ্যমে তাদের প্যানেলে পৌঁছান — এবং একটি php বা static সাইটে পরিবর্তন করার মতো কোনো অ্যাপ্লিকেশন অ্যাকাউন্ট থাকে না। কাজ করতে পারে না এমন একটি বক্স প্রদর্শনের পরিবর্তে WHMCS এটি সম্পূর্ণরূপে লুকিয়ে রাখে।
তিনটি উত্তর যা আপনার কখনোই দুটি উত্তরে মিলিয়ে ফেলা উচিত নয়
- Unsuspend একটি প্রত্যাখ্যান বার্তা দিয়ে উত্তর দিতে পারে। এর অর্থ হলো সাইটটি আমাদের অ্যাবিউজ টিমের দ্বারা সাসপেন্ড করা হয়েছে, আপনার দ্বারা নয়, এবং কোনো বিলিং প্যানেল এটি অবমুক্ত করতে পারবে না। বার্তায় তা উল্লেখ থাকে; পুনরায় চেষ্টা করার বদলে এটি আপনার অ্যাডমিনকে দেখান।
- Terminate একটি ডিলিট করার প্রক্রিয়া নির্ধারণ করে, এটি তাৎক্ষণিকভাবে সম্পন্ন করে না। তারিখটি
pending_deletion_at হিসেবে ফেরত আসে এবং ক্লায়েন্ট এরিয়া তা প্রদর্শন করে। কোনো ডেটা এখনও মুছে না যাওয়া সত্ত্বেও গ্রাহককে তা মুছে গেছে বলা, কিছু না বলার চেয়েও খারাপ।
- ডিস্ক এবং ব্যান্ডউইথ অজানা (unknown) হতে পারে, এবং অজানা মানে শূন্য নয়। যখন আমরা কোনো পরিমাপ নিতে পারি না তখন মডিউলটি
0 লেখার পরিবর্তে সংখ্যাটিকে অপরিবর্তিত রাখে — অন্যথায় WHMCS আপনার গ্রাহককে এমন একটি সাইটের জন্য একটি আশ্বস্তকারী ফাঁকা ব্যবহার বার দেখাত যার কোনো পরিমাপ আমাদের কাছে নেই।
ট্রাবলশুটিং
Test Connection সফল হয় এবং প্রথম অর্ডারটি পারমিশন ত্রুটি সহ ব্যর্থ হয়। API কী-তে org.create অনুপস্থিত রয়েছে। ক্লায়েন্টের সাইট তৈরি করার আগে মডিউলটিকে তাদের অ্যাকাউন্ট খুলতে হবে।
একটি অর্ডার ব্যর্থ হয় এবং জানায় যে প্রতিষ্ঠানের কোনো হোস্টিং প্ল্যান নেই। আপনার রিসেলার প্ল্যানে কোনো সাইট বরাদ্দ অবশিষ্ট নেই, অথবা আপনার এখনও কোনো প্ল্যান নেই। উপরে শুরু করার আগে অংশটি দেখুন।
একটি অর্ডার একটি স্ট্যাক উল্লেখ করে ব্যর্থ হয়। প্রোডাক্টের Stack ফিল্ডটি খালি অথবা এমন কিছু উল্লেখ করছে যা আমরা তৈরি করি না। আপনি অন্য কিছু বিক্রি না করে থাকলে এটিকে wordpress-এ সেট করুন।
বাতিলকরণ ব্যর্থ হচ্ছে। নিশ্চিত করুন যে আপনি মডিউল ভার্সন 1.0.0 বা তার পরবর্তী ভার্সন ব্যবহার করছেন। পূর্ববর্তী বিল্ডগুলো কোনো ডিলিট নিশ্চিতকরণ পাঠাত না এবং প্রতিটি টার্মিনেশন প্রত্যাখ্যান করা হতো, যার ফলে সার্ভিসটি সচল থাকত এবং বিলিং চলত।
একটি প্রত্যাখ্যান বার্তা যা কোনো ফিল্ডের নাম উল্লেখ করে। আমাদের ভ্যালিডেশন ত্রুটিগুলো বার্তার পরে বন্ধনীর মধ্যে ফিল্ডের নাম এবং কারণ উল্লেখ করে, যেমন (php_version: 7.2 is not offered on this product line)। এটিই হলো সমাধানযোগ্য অংশ — এর সামনের বাক্যটি উদ্দেশ্যমূলকভাবেই সাধারণ রাখা হয়েছে।
আপনার ডাউনলোড যাচাই করুন
প্রতিটি আর্কাইভ আমাদের নিজস্ব হোস্টনেম থেকে TLS-এর মাধ্যমে সরবরাহ করা হয় এবং কখনোই কোনো তৃতীয় পক্ষের হোস্টে রিডাইরেক্ট করা হয় না। এর SHA-256 চেকসাম ডাউনলোড পেজে ডাউনলোড লিংকের পাশে মুদ্রিত রয়েছে। ডাউনলোড করার পর এটি মিলিয়ে নিন:
- macOS বা Linux:
shasum -a 256 zinn-whmcs-1.0.0.zip
- Windows:
certutil -hashfile zinn-whmcs-1.0.0.zip SHA256
WHMCS ব্যবহার করছেন না?
অন্য যেকোনো কিছুর জন্য একটি HostBill মডিউল এবং একটি সিঙ্গেল-ফাইল PHP ক্লায়েন্ট রয়েছে, উভয়ই বিনামূল্যে এবং উভয়ই একই ডাউনলোড পেজে রয়েছে। মডিউলগুলো যে প্রতিটি এন্ডপয়েন্ট ব্যবহার করে তা API রেফারেন্সে রয়েছে।