সহজ ডেটা মডেল, পরিষ্কার স্ট্যাটাস, অনুমতি ও সেটআপ প্রগ্রেস UI-র মাধ্যমে 3 থেকে 30 ইন্টিগ্রেশন পর্যন্ত স্কেল করে এমন ইন্টিগ্রেশন ডিরেক্টরি ডিজাইন করুন।

মানুষরা একটি ইন্টিগ্রেশন ডিরেক্টরি খুলে একটাই কারণে: টুলগুলোকে সংযুক্ত করতে এবং প্রতিদিন তাদের নিয়ে চিন্তা না করে তাতে চলতে রাখতে। যদি স্ক্রিন ব্যবহারকারীদের বুঝতে না দেয় কি সংযুক্ত আছে, কি ভাঙা আছে, বা পরবর্তী কি ক্লিক করতে হবে, তাহলে বিশ্বাস দ্রুত কমে যায়।
৩টি ইন্টিগ্রেশনের সঙ্গে একটি সরল লোগোর গ্রিড কাজ করতে পারে। ৩০টি হলে সেটা ভেঙে পড়ে: মানুষ স্ক্যান করা বন্ধ করে দেয়, সাপোর্ট টিকিট বাড়ে, এবং “Connect” বাটন ফাঁদে পরিণত হতে পারে কারণ প্রতিটি ইন্টিগ্রেশন আলাদা স্টেটে থাকতে পারে।
প্রতি ইন্টিগ্রেশন কার্ড (অথবা রো) এক নজরে তিনটি প্রশ্নের উত্তর দিতে পারা উচিত:
বেশি জটিলতা আসে প্রান্তিক কেস থেকে যা আসলে দলগুলোতে নিয়মিত ঘটে। কেউ Google ব্যক্তিগত অ্যাকাউন্ট দিয়ে সংযুক্ত করে কোম্পানির নয়। একটি Stripe টোকেন মেয়াদোত্তীর্ণ হয়ে বিলিং সিঙ্ক বন্ধ হয়ে যায়। একটি Slack ওয়ার্কস্পেস সংযুক্ত আছে, কিন্তু প্রয়োজনীয় channel স্কোপ দেওয়া হয়নি, ফলে সেটআপ "আধা হয়ে গেছে" যদিও UI ঠিকঠাক দেখায়।
ভাল একটি স্ক্রিন এসব পরিস্থিতি স্পষ্ট করে তোলে। শুধু "Connected" দেখানোর বদলে কিছু এ রকম দেখান: "Connected (needs permission)" বা "Connected to: [email protected]," এবং কার্ডেই পরবর্তী ধাপ রাখুন। এতে মানুষ অনুমান করে কাজ করবে না এবং তালিকাটি বড় হলেও ম্যানেজেবল থাকবে।
ইন্টিগ্রেশন ডিরেক্টরিকে স্কেল করতে সবচেয়ে সহজ উপায় হল আলাদা করা:
এটি ৩টির জন্য পড়তে সহজ থাকে এবং ৩০টির জন্যও কাজ করে।
Integration হলো ক্যাটালগ এন্ট্রি। এটা গ্লোবাল, কোনো ওয়ার্কস্পেসের সাথে বাঁধা নয়।
Install একটি ওয়ার্কস্পেসে সেই Integration চালু থাকার প্রতিনিধিত্ব করে (উদাহরণ: “Workspace A-তে Slack চালু আছে”)।
Connection একটি বাস্তব বাহ্যিক অ্যাকাউন্ট বা ক্রেডেনশিয়াল বোঝায় (উদাহরণ: “OAuth মাধ্যমে Slack workspace X” বা “API কী দিয়ে Stripe account Y”)। একটি Install-এ অনেকগুলো Connection থাকতে পারে।
স্কেল করতে সাধারণত কাজ করে এমন একটি ন্যূনতম ফিল্ড সেট:
ব্যবহারকারী-দেখার উপযোগী কনফিগ (নির্বাচিত চ্যানেল, webhook URL উপনাম, enabled events) Install বা Connection-এ সাধারণ ডেটা হিসেবে রাখুন। সিক্রেটস (OAuth refresh tokens, API keys, signing secrets) কেবল সিক্রেট স্টোর বা এনক্রিপ্টেড ফিল্ডে রাখুন কঠোর এক্সেস কন্ট্রোল সহ।
কাঁচা সিক্রেট, পূর্ণ authorization কোড, বা কাঁচা webhook পে-লোড লগে রাখবেন না। যদি কিছু লগ করতে হয়, লগ করুন রেফারেন্স (connection_id) এবং নিরাপদ মেটাডাটা (HTTP স্ট্যাটাস, error code)।
OAuth, API key, এবং webhook-এর মধ্যে নমনীয় থাকতে auth-বিশেষ ফিল্ডগুলো Connection-এ রাখুন (টোকেন মেটাডাটা বনাম কী ফিঙ্গারপ্রিন্ট বনাম webhook ভেরিফিকেশন স্ট্যাটাস)। UI-ফেসিং স্টেট (enabled এবং setup progress) Install-এ রাখুন।
ব্যবহারকারীরা একটি ইন্টিগ্রেশন ডিরেক্টরি খুলে দ্রুত তিনটি জিনিস জানতে চায়: এটা কাজ করছে কি, সেটআপ কতদূর, আর আমাকে পরবর্তী কী করতে হবে। যদি আপনার স্ট্যাটাসের শব্দগুলো অনিশ্চিত হয়, সাপোর্ট টিকিট বাড়ে এবং বিশ্বাস কমে।
বছর ধরে ধরে রাখতে পারে এমন একটি ছোট স্ট্যাটাস সেট দিয়ে শুরু করুন:
স্টোরড লেবেলের বদলে ডেরাইভড স্ট্যাটাস পছন্দ করুন। স্টোরড লেবেল ঘুরে যায়: কেউ ত্রুটি ঠিক করে দিলো, কিন্তু ব্যাজ লাল থাকেই। ডেরাইভড স্ট্যাটাস তখনি হিসাব করুন যেসব বিষয়ে আপনি ইতিমধ্যেই ট্র্যাক করেন, যেমন টোকেন বৈধ কি না, প্রয়োজনীয় সেটআপ ধাপগুলি সম্পন্ন হয়েছে কি না, এবং কোনো অ্যাডমিন integration-টি pause করেছে কি না। যদি কিছু স্টোর করতে হয়, স্টোর করুন মূল সত্যগুলি (শেষ সফল সিঙ্ক, শেষ ত্রুটি কোড), চূড়ান্ত লেবেল নয়।
সেটআপ প্রগ্রেস সবচেয়ে ভালো কাজ করে সংক্ষিপ্ত চেকলিস্ট হিসেবে, এবং আবশ্যক বনাম ঐচ্ছিক ধাপের মধ্যে স্পষ্ট বিভাজন থাকে। এটি ধাপ সংজ্ঞা (স্ট্যাটিক, প্রতি ইন্টিগ্রেশনের জন্য) এবং ধাপের ফলাফল (প্রতি install) হিসেবে মডেল করুন।
উদাহরণ: Slack-এ “Authorize workspace” এবং “Select channels” আবশ্যক হতে পারে, এবং “Enable message previews” একটি ঐচ্ছিক ধাপ হতে পারে। UI দেখাতে পারে “3 required ধাপের মধ্যে 2টি সম্পন্ন” এবং ঐচ্ছিক আইটেমগুলো বন্ধ না করে দেখা যায়।
একাধিক connection এক ইন্টিগ্রেশনের অধীনে তালিকাকে এলোমেলো করে দিতে পারে যদি আপনি পরিকল্পনা না করেন। প্রতিটি integration-এর জন্য এক কার্ড রাখুন, connection count দেখান, এবং স্ট্যাটাস সৎভাবে roll up করুন। যদি কোনো connection ভাঙা থাকে, “Needs attention” দেখান সাথে একটি হিন্ট যেমন “4-টি ওয়ার্কস্পেসের মধ্যে 1-টিতে re-auth দরকার।” ওভারভিউ পরিষ্কার থাকে, তবু বাস্তবতা প্রতিফলিত হয়।
ইন্টিগ্রেশন অনুমতিগুলো তখনই জটিল হয় যখন সবকিছু একই সুইচ হিসেবে বিবেচিত হয়। এটা পরিষ্কার হয় আলাদা করলে:
প্রতিটি জায়গায় প্রযোজ্য একটি লাইটওয়েট রোল চেক দিয়ে শুরু করুন। বহু অ্যাপে তিনটি রোলই যথেষ্ট: Admin, Manager, এবং Member। Admins সব করতে পারে। Managers তাদের টিমের জন্য বেশিরভাগ ইন্টিগ্রেশন সেটআপ করতে পারে। Members-enabled integrations ব্যবহার করতে পারে, কিন্তু সেটিংস পরিবর্তন করতে পারবে না।
তারপর যেখানে দরকার সেখানে শুধু প্রতি-ইন্টিগ্রেশন পারমিশন ফ্ল্যাগ যোগ করুন। বেশিরভাগ ইন্টিগ্রেশন (calendar, chat) ডিফল্ট রোল নিয়ম অনুসরণ করতে পারে। সংবেদনশীলগুলো (payments, payroll, exports) একটি অতিরিক্ত চেক চাইতে পারে যেমন “Payments admin” বা “Billing manager।” এটাকে একটি সরল boolean হিসেবে Install-এ রাখুন, পুরো নতুন রোল সিস্টেম না বানিয়ে।
একটি পাঠযোগ্য ম্যাপিং:
অডিট ভারী হলে হবে না, কিন্তু অবশ্যই থাকা উচিত। উপযুক্ত ট্র্যাক রাখুন যাতে সাপোর্ট ও সিকিউরিটি প্রশ্নের দ্রুত উত্তর দেয়া যায়: কে এটি সংযুক্ত করেছে, কখন credentials বদলানো হয়েছিল, এবং কে এটি disabled করেছে। ডিটেইলস পেজে ৫ থেকে ২০টি সাম্প্রতিক ইভেন্ট দেখানো সাধারণত যথেষ্ট থাকে।
উদাহরণ: Stripe সবার কাছে দেখা যাবে, কিন্তু কেবল Admins (বা “Billing manager”-মার্ক করা ব্যবহারকারীরাই) connect করতে, কী rotate করতে বা payouts disable করতে পারবে। Slack Managers-কে connect করতে দেয়, Members সংযুক্ত হলে নোটিফিকেশন পেতে পারে কিন্তু reconnect নিয়ন্ত্রণ পাবে না।
৩টির ক্ষেত্রে আপনি সবকিছু দেখাতে পারেন। ৩০টির ক্ষেত্রে ডিরেক্টরিটিকে দ্রুত একটি প্রশ্নের উত্তর দিতে হবে: “কোনগুলো কাজ করছে, এবং পরবর্তী আমাকে কী করতে হবে?” সবচেয়ে পরিষ্কার উপায় স্ক্যানিংকে Doing থেকে আলাদা করা।
ডিরেক্টরি ভিউটিকে দ্রুত সিদ্ধান্ত নেওয়ার দিকে রাখুন। ভারী কন্ট্রোলগুলোকে পিছনের ডিটেইলস পেজে একটিমাত্র “Manage” বাটনের পিছনে ঠেলে দিন।
তালিকায় শুধুই সেইগুলো দেখান যা পরবর্তী ক্লিককে সমর্থন করে:
কার্ডের অ্যানাটমি গুরুত্বপূর্ণ কারণ এটি মাপস্মৃতি তৈরি করে। প্রধান অ্যাকশন সবসময় মানে হওয়া উচিত “পরের ধাপ”: নতুন হলে Connect, আংশিক হলে Continue setup, auth মেয়াদোত্তীর্ণ হলে Reconnect, এবং সব ঠিক থাকলে Manage। প্রতিটি কার্ডে দুটো সমান জোরের বাটন এড়িয়ে চলুন; এতে পেজ গোলমেলে মনে হয়।
উদাহরণ:
খালি স্টেটগুলো নির্দেশনা দিক কিন্তু ম্যানুয়াল ঢেলে না দিন:
এইভাবে ৩০টি ইন্টিগ্রেশনের সময় পেজ শান্ত থাকে কারণ প্রতিটি কার্ড উত্তর দেয়: এটা কী, এটা ঠিক আছে কি, এবং এখন আমি কী করব?
ডিরেক্টরি তালিকা মানুষকে সঠিক ইন্টিগ্রেশনে নিয়ে যায়। ডিটেইলস পেজে তারা সিদ্ধান্ত নেয়: সেটআপ চালিয়ে যাওয়া, ঠিক করা, বা বন্ধ করা। পেজ স্ট্রাকচার প্রতিটি ইন্টিগ্রেশনের জন্য স্থিতিশীল রাখুন, যদিও ব্যাকএন্ড কাজ ভিন্ন হতে পারে।
সংক্ষিপ্ত ওভerview দিয়ে শুরু করুন: ইন্টিগ্রেশন নাম, এক-লাইন বর্ণনা, এবং পরিষ্কার স্ট্যাটাস লেবেল (Connected, Needs attention, Disabled)। একটি ছোট “Setup progress” লাইন যোগ করুন যাতে ব্যবহারকারী জানে তারা এক ধাপ দূরে নাকি শুরুতেই আছে।
একটি সরল উইজার্ড ভালো কাজ করে: ৩–৬ ধাপ, এক স্ক্রিন প্রতি ধাপ, এবং সর্বদা “Back” থাকবে। ধাপগুলো সহজ ভাষায় নাম দিন (Connect account, Choose workspace, Pick data to sync, Confirm)। যদি কোনো ধাপে ঐচ্ছিক বিকল্প থাকে, সেগুলোকে খোলসা করে “optional” হিসেবে লেবেল করুন।
যদি সেটআপ বন্ধ রাখা যায়, তা স্পষ্টভাবে বলুন: “You can finish later. We’ll keep your choices.” এতে ব্যবহারকারী ক্লিক করে চলে আসার ভয় কমে।
Connections দেখান একটি ছোট টেবিল হিসেবে: account name, connected by (user), created date, এবং last sync।
"Next sync"-এর জন্য এমন প্রতিশ্রুতি এড়ান যা আপনি রাখতে পারবেন না (নির্দিষ্ট সময়)। এমন শব্দ ব্যবহার করুন যা আপনি নিশ্চিতভাবে বলতে পারবেন, যেমন “Next sync: scheduled soon” বা “Next sync: within the next hour,” আপনার সিস্টেম যা গ্যারান্টি দিতে পারে তার উপর ভিত্তি করে।
ঝুঁকিপূর্ণ অ্যাকশনগুলো মূল পথ থেকে দূরে রাখুন। প্রধান অ্যাকশনগুলো টপে রাখুন (Continue setup, Reconnect)। Disable এবং Disconnect আলাদা “Danger zone” সেকশনে রাখুন নীচে সংক্ষিপ্ত প্রভাব ব্যাখ্যার সঙ্গে। যদি রোলস সাপোর্ট করা হয়, এক বাক্যে বলুন (উদাহরণ: “Only admins can disconnect”).
একটি ছোট activity log যোগ করুন: সাম্প্রতিক ইভেন্ট (connected, token refreshed, sync failed), টাইমস্ট্যাম্প, এবং একটি সংক্ষিপ্ত ত্রুটি বার্তা যা ব্যবহারকারী কপি করে সাপোর্ট টিকেটে দিতে পারবে।
একটি ইন্টিগ্রেশন যোগ করা সহজ হয় যখন আপনি এটাকে একটি ছোট প্রোডাক্টের মতো চালাবেন। এটি একটি লিস্টিং, কানেক্ট করার উপায়, কানেকশন সংরক্ষণের জায়গা, এবং সফলতা বা ব্যর্থতার স্পষ্ট আউটকাম প্রয়োজন।
ইন্টিগ্রেশনটি আপনার ক্যাটালগে যোগ করুন যাতে কেউ এটি কানেক্ট না করলেও ডিরেক্টরিতে দেখা যায়। একটি স্পষ্ট নাম, সংক্ষিপ্ত বর্ণনা, আইকন, এবং ১–২টি ক্যাটাগরি (Messaging, Payments) দিন। সাধারণ ভাষায় সেটআপ প্রত্যাশা লিখুন, যেমন “একটি অ্যাকাউন্ট সংযুক্ত করুন” এবং “একটি ওয়ার্কস্পেস নির্বাচন করুন।” এখানে নির্ধারন করুন পরে ইন্টিগ্রেশনকে কী কী লাগবে (OAuth scopes, required fields, supported features)।
প্রোভাইডারের সাথে মিলে সবচেয়ে সহজ কানেকশন পদ্ধতি বেছে নিন:
ব্যবহারকারী ফ্লো সম্পন্ন করলে একটি Connection রেকর্ড তৈরি করুন যেটা তাদের ওয়ার্কস্পেস বা একাউন্টের সাথে টাই করা হবে, কেবল ব্যবহারকারীর সাথে নয়। ক্রেডেনশিয়াল নিরাপদে সংরক্ষণ করুন (at rest এনক্রিপ্ট করুন এবং পুরো সিক্রেট আর দেখাবেন না)। সাপোর্টের জন্য প্রয়োজনীয় মৌলিক তথ্য সংরক্ষণ করুন: প্রোভাইডার একাউন্ট আইডি, তৈরি সময়, কে সংযুক্ত করেছে, এবং কোন permissions দেওয়া হয়েছে।
তারপরই একটি সহজ পরীক্ষা চালান (Stripe-এর জন্য: account details fetch করুন)। সফল হলে Connected দেখান এবং প্রগ্রেস ready হিসেবে মার্ক করুন। আংশিকভাবে সফল হলে (সংযুক্ত কিন্তু permission নেই), Needs attention মার্ক করুন এবং নির্দিষ্ট সমাধানের দিকে নির্দেশ করুন।
একটি পরিষ্কার বার্তা দেখান, একটি প্রস্তাবিত অ্যাকশন, এবং একটি নিরাপদ fallback। উদাহরণ: “We couldn’t reach Stripe. Check the API key or try again.” একটি ইন্টিগ্রেশন ভাঙলে ডিরেক্টরিটি ব্যবহারযোগ্য থাকলে ভাল।
যদি আপনি Koder.ai (koder.ai) ব্যবহার করে তৈরি করে থাকেন, আপনি Planning Mode-এ প্রথমে ক্যাটালগ, সেটআপ ফ্লো, এবং স্ট্যাটাস নিয়ম খসড়া করে রাখতে পারবেন, তারপর সেই পরিকল্পনা থেকে UI ও ব্যাকএন্ড জেনারেট করতে পারেন।
ইন্টিগ্রেশনগুলো সাধারণত বিরক্তিকর কারণে ব্যর্থ হয়। যদি আপনার ডিরেক্টরি সেই কারণগুলো স্পষ্টভাবে ব্যাখ্যা করতে না পারে, ব্যবহারকারী আপনার অ্যাপকেই দোষ দেবে এবং সাপোর্টের কাছে কিছুই থাকবে না।
ব্যর্থতাগুলোকে এমন বাকেটে গুঁড়ো করুন যা বাস্তব ঠিক করার সঙ্গে মেলে: login expired, missing permission, provider outage, অথবা rate limit। ইন্টারনাল ত্রুটি কোডগুলো বিস্তারিত রাখুন, কিন্তু ব্যবহারকারীর জন্য একটি সংক্ষিপ্ত বোঝার মতো লেবেল দেখান।
কিছু ভাঙলে বার্তাটি তিনটি প্রশ্নের উত্তর দেয়া উচিত: কি ঘটেছে, ব্যবহারকারী কি করবে, এবং আপনার সিস্টেম পরবর্তী কী করবে। উদাহরণ: “Slack connection expired. Reconnect to continue syncing. We’ll retry automatically once you reconnect.” এটা কাঁচা API ত্রুটির চেয়েও শান্ত এবং কার্যকর।
অটো-রিট্রাই কেবল তখন করুন যখন ব্যবহারকারী নিজে ঠিক করতে পারবে না। একটি সরল নিয়ম সেটই যথেষ্ট:
স্ট্যাটাসগুলো পুরনো হয়ে যায় যদি আপনি সেগুলো রিফ্রেশ না করেন। একটি লাইটওয়েট health check job যোগ করুন যা সময়ে সময়ে টোকেন কাজ করছে কি না, শেষ সিঙ্ক হয়েছে কি না, এবং ডিরেক্টরি ব্যাজ বাস্তবতার সঙ্গে মেলে কি না যাচাই করে।
প্রতি install-এ একটি ছোট ইভেন্ট ইতিহাস রাখুন। পুরো লগ নয়, বরং পর্যাপ্ত ব্রেডক্রাম্বস: টাইমস্ট্যাম্প, ইভেন্ট (“token refreshed”, “sync failed”), সংক্ষিপ্ত কারণ, এবং কে ট্রিগার করেছে (user বা system)। একটি internal-only notes ফিল্ড রাখুন যাতে সাপোর্ট কি পরিবর্তন করেছে এবং কেন তা টিপতে পারে।
একবার আপনি কয়েকটি অ্যাপ পেরালে ডিরেক্টরি দ্রুত এলোমেলো হয়ে যায়। লক্ষ্য সহজ: মানুষেরা কয় সেকেন্ডে যা দরকার তা খুঁজে পাবে, এবং খারাপগুলোর খোঁজ দ্রুত করতে পারবে।
নাম ও ক্যাটাগরি উপর ভিত্তি করে বয়সী সার্চ দিয়ে শুরু করুন। বেশিরভাগ ব্যবহারকারী জানে কী টাইপ করবেন (“Slack”, “Stripe”), তাই নাম ম্যাচিং fancy ranking-এর চেয়েও বেশি গুরুত্বপূর্ণ। ক্যাটাগরি সার্চ তখন কাজে লাগে যখন তারা শুধু কাজ জানে (payments, messaging)।
ফিল্টারগুলো বাস্তব উদ্দেশ্য মিরর করবে। এই তিনটি সাধারণত বেশিরভাগ use case কভার করে:
তালিকাটি সংগঠিত করার জন্য একটি প্রাথমিক গ্রুপিং বেছে নিন এবং সেটিতেই থাকুন। উচ্চ সংখ্যায় category grouping ভাল কাজ করে (CRM, Payments, Messaging)। জনপ্রিয়তাও কাজে লাগতে পারে, কিন্তু সেটি আপনার ব্যবহারকারীর বেসকে প্রতিফলিত করবে, মার্কেটিংকে নয়। একটি ব্যবহারিক ডিফল্ট: সবচেয়ে ব্যবহৃতগুলো প্রথম দেখান, বাকিগুলো ক্যাটাগরি অনুসারে গ্রুপ করুন।
“সবাই সবকিছু দেখবে না” এর জন্য পরিষ্কার পরিকল্পনা দরকার। যদি কোনো ইন্টিগ্রেশন feature flag বা প্ল্যান স্তরের পিছনে থাকে, সেটাকে অধিকাংশ ব্যবহারকারীর জন্য লুকিয়ে দিন অথবা সংক্ষিপ্ত কারণসহ disabled দেখান যেমন “Business plan।” পুরো পেজটি ধূসর করে দেওয়া এড়ান — এটা স্ক্রিনটিকে ভাঙা মনে করায়।
পারফরম্যান্স সুপার দ্রুত রাখুন: লিস্ট ও ডিটেইলস আলাদা লোড হিসেবে বিবেচনা করুন। তালিকায় ৩০টি ভারী কার্ড একসাথে রেন্ডার করবেন না; পেজিনেশন বা ভিয়ার্চুয়ালাইজ করুন এবং ডিটেইলস তখনই লোড করুন যখন ব্যবহারকারী খোলে। ডিরেক্টরি সারাংশ ক্ষেত্র (Slack: Connected, Google: Needs attention, Stripe: Not set up) দেখাতে পারে, ডিটেইলস পেজ ফুল কানেকশন ইতিহাস আনবে।
কল্পনা করুন একটি টিম ওয়ার্কস্পেস অ্যাপ Pinework। এতে দুইটি ভূমিকা আছে: Admin এবং Member। Admins টুল কানেক্ট করতে ও সেটিংস বদলাতে পারে। Members কানেক্টেড টুলগুলো ব্যবহার করতে পারে কিন্তু যোগ বা অপসারণ করতে পারে না।
Pinework-এর ইন্টিগ্রেশন ডিরেক্টরিতে প্রতিটি কার্ডে একটি স্পষ্ট লেবেল (Connected, Needs setup, Error), এক লাইন “কি করে” বর্ণনা, এবং সেটআপ প্রগ্রেস যেমন “2 of 3 steps” দেখায়। মানুষ কি কাজ করে এবং কি অপেক্ষায় সেটি ক্লিক না করেও বুঝতে পারে।
Slack নোটিফিকেশনের জন্য ব্যবহৃত। এক Admin Slack খুললে দেখবে: Status: Connected, Setup: “3 of 3 steps.” Members Slack দেখতে পাবে, কিন্তু প্রধান অ্যাকশন disabled থাকবে এবং লেখা থাকবে “Ask an Admin to manage.” Slack disconnect হলে Members কী ভাঙেছে দেখবে, কিন্তু reconnect কন্ট্রোল দেখতে পাবে না।
Google ক্যালেন্ডারগুলোর জন্য ব্যবহৃত। Pinework দুইটি ডিপার্টমেন্ট সমর্থন করে, তাই একাধিক connections অনুমোদন করে। Google কার্ড দেখায়: Status: Connected (2 accounts). তার নীচে সংক্ষেপে “Marketing Calendar” এবং “Support Calendar” তালিকাভুক্ত থাকে। ডিটেইলস পেজে দুইটি আলাদা connection দেখায় যাতে Admin শুধু একটি প্রত্যাহার করতে পারে।
Stripe বিলিংয়ের জন্য ব্যবহৃত। একটি সাধারণ আংশিক সেটআপ হলো: অ্যাকাউন্ট সংযুক্ত আছে, কিন্তু webhooks শেষ করা হয়নি। কার্ড দেখায়: Status: Needs setup, Progress: “2 of 3 steps,” সাথে একটা সতর্কবার্তা “Payments may not sync।” ডিটেইলস ভিউ বাকি ধাপগুলো স্পষ্ট করে:
এতে এড়ানো যায় সেই কষ্টদায়ক পরিস্থিতি যেখানে “এটি সংযুক্ত মনে হয় কিন্তু কিছু কাজ করে না।”
ইন্টিগ্রেশন ডিরেক্টরি সাধারণত ভেঙে পড়ে যখন একটি অ্যাপ কয়েকটি ইন্টিগ্রেশন থেকে ডজনখানিক হলে। সমস্যাগুলি বিরাট টেক সমস্যার নয়; তারা ছোট লেবেলিং ও মডেলিং ভুল যা প্রতিদিন মানুষকে বিভ্রান্ত করে।
একটি সাধারণ সমস্যা হলো “installed” বনাম “connected” মুছিয়া ফেলা। Installed সাধারণত মানে “আপনার ওয়ার্কস্পেসে উপলব্ধ।” Connected মানে বাস্তব ক্রেডেনশিয়াল আছে এবং ডেটা প্রবাহিত হতে পারে। যখন এইগুলো ঝাপসা হয়, ব্যবহারকারী এমন একটি ইন্টিগ্রেশন ক্লিক করে যা প্রস্তুত মনে হয় কিন্তু ফলস্বরূপ ডেডএন্ডে যায়।
আরেকটি ভুল হলো অনেক বেশি স্ট্যাটাস অবস্থা বানানো। টিমরা একটি সরল ব্যাজ দিয়ে শুরু করে, তারপর এজ কেস যোগ করতে থাকে: pending, verifying, partial, paused, degraded, blocked, expiring ইত্যাদি। সময়ের সাথে সেগুলো বাস্তবতা থেকে বিচ্ছিন্ন হয়ে যায়। কেবল সেই কয়েকটি রাখুন যেগুলো আপনি সত্যিই পরীক্ষা করতে পারেন: Not connected, Connected, Needs attention।
গোপনীয়তামূলক পারমিশন লুকিয়ে রাখা সমস্যাও সৃষ্টি করে। কেউ একটি অ্যাকাউন্ট সংযুক্ত করে, পরে জানতে পারে ইন্টিগ্রেশনটি প্রত্যাশার চেয়ে বেশি অ্যাক্সেস নিয়েছে। final “Connect” ধাপের আগে স্কোপগুলো স্পষ্ট করুন এবং ডিটেইলস পেজে আবার দেখান যাতে admins audit করতে পারে।
অনেক অ্যাপ একাধিক কানেকশন প্রয়োজন: দুইটি Slack workspace, কয়েকটি Stripe account, বা একটি শেয়ার্ড Google account সহ ব্যক্তিগত account। যদি আপনি hardcode করে ফেলেন “one integration = one connection,” পরে কটু ওয়ার্কঅরাউন্ড করতে হবে।
পরিকল্পনা রাখুন:
তালিকা ভিউ হালকা রাখুন। যদি সেখানে লগ, ফিল্ড ম্যাপিং, এবং দীর্ঘ বর্ণনা ভরাতে শুরু করেন, স্ক্যানিং ধীর হয়ে যায়। তালিকায় নাম, সংক্ষিপ্ত উদ্দেশ্য, এবং সেটআপ প্রগ্রেস রাখুন। ইতিহাস ও অগ্রসর সেটিংস ডিটেইলস পেজে রাখুন।
একটি স্কেলযোগ্য ইন্টিগ্রেশন ডিরেক্টরি একটি সরল মডেল ও একটি সৎ UI-তে নেমে আসে। যদি ব্যবহারকারীরা দ্রুত তিনটি প্রশ্নের উত্তর দিতে পারে, সিস্টেমটি পূর্বানুমেয় মনে হবে: কি সংযুক্ত, কি ভাঙা, এবং পরবর্তী আমাকে কী করতে হবে?
সিপিং করার আগে চেকলিস্ট:
পরবর্তী ধাপ হিসেবে তিনটি ইন্টিগ্রেশন বেছে নিন যেগুলো আপনি ভালোভাবেই জানেন এবং তাদের end-to-end মডেল করুন: একটি চ্যাট টুল (OAuth), একটি Google-স্টাইল account সংযোগ (OAuth সহ scopes), এবং একটি পেমেন্ট টুল (API key + webhooks)। যদি আপনার মডেল এই তিনটিকে কোনও বিশেষ কেস ছাড়াই প্রকাশ করতে পারে, তাহলে সাধারণত তা 30-এ স্কেল করবে।
এটিকে এক ধরনের কন্ট্রোল প্যানেল হিসেবে দেখুন, মার্কেটিং পেজ হিসেবে নয়। প্রতিটি কার্ড দ্রুত দেখাতে হবে ইন্টিগ্রেশনটি কী কাজে লাগে, এটি বর্তমানে কাজ করছে কি না, এবং ব্যবহারকারীর পরবর্তী একটিই লজিক্যাল অ্যাকশন কী। যদি ব্যবহারকারীদের জানতে ক্লিক করতেই হয় “এটি কি সংযুক্ত?”, তবে ডিরেক্টরি বড় হলে অবিশ্বাস্য মনে হবে।
একটি কার্ড সাধারণত তিনটি প্রশ্নের উত্তর দেওয়া উচিত: এটি কী, এটি সচল কি, এবং এখন কী করা লাগে। সাধারণত এতে থাকে নাম ও এক লাইন বর্ণনা, একটি স্ট্যাটাস (সাম্প্রতিক টাস্ক বা চেক টাইমসহ), এবং একটি প্রধান বাটন যা স্টেটের উপর নির্ভর করে পরিবর্তিত হয়। অন্যান্য সবকিছু “Manage”-এর পেছনে রাখুন যাতে স্ক্যানিং দ্রুত থাকে।
কারণ এটি আলাদা করে কি আপনি অফার করেন, কোন_Workspace_ কি চালু করেছে, এবং কোন credentialগুলো আছে। গ্লোবাল Integration (catalog entry), একটি Install (Workspace-এ enabled হওয়া), এবং একটি Connection (বাহ্যিক OAuth অ্যাকাউন্ট, API কী, বা webhook)। এতে “installed” এবং “connected” মিশে যাওয়ার সাধারণ বিশৃঙ্খলা থেকে বাঁচা যায়।
কারণ বাস্তব দলের কাজের প্রয়োজনীয়তা অনুযায়ী একই প্রবাইডারের একাধিক অ্যাকাউন্ট দরকার হতে পারে। যেমন আলাদা Marketing ও Support Google ক্যালেন্ডার বা একাধিক Stripe অ্যাকাউন্ট। এক Install-এর নিচে একাধিক Connections মডেল করলে ডিরেক্টরি পরিষ্কার থাকে, এবং ডিটেইলস পেজে অ্যাডমিন আলাদা করে প্রতিটি অ্যাকাউন্ট ম্যানেজ করতে পারে।
একটি ছোট সেট ব্যবহার করুন যেগুলো আপনি কন্সিস্টেন্ট রাখতে পারবেন: Not set up, In progress, Connected, Needs attention, এবং Disabled। এরপর এই লেবেলগুলো derive করুন যেসকল বাস্তব চেকগুলো থেকে মিলবে — টোকেন বৈধ কি না, প্রয়োজনীয় সেটআপ ধাপগুলি সম্পন্ন হয়েছে কি না, শেষ সফল সিঙ্ক কখন ছিল ইত্যাদি। এভাবে স্ট্যাটাসগুলো পুরনো হয়ে হয়ে থেকে যাবে না।
সেটআপ প্রগ্রেসকে একটি সংক্ষিপ্ত চেকলিস্ট হিসেবে দেখান: আবশ্যক ধাপগুলো এবং ঐচ্ছিক ধাপগুলো স্পষ্টভাবে আলাদা করুন। ইন্টিগ্রেশনের প্রতি ধাপের সংজ্ঞা স্ট্যাটিক হিসেবে রাখুন এবং প্রতিটি Install-এর জন্য ধাপের ফলাফল আলাদা রাখুন। UI-তে যেন সহজে বলা যায় “২টি আবশ্যক ধাপের মধ্যে ২টি সম্পন্ন” — পাশাপাশি ঐচ্ছিক আইটেমগুলোও দেখা যায় কিন্তু তারা ব্লক না করে।
সরল ভূমিকা চেক দিয়ে শুরু করুন যা সারায় প্রয়োগ হয়, এবং শুধু সংবেদনশীল ইন্টিগ্রেশনের জন্য অতিরিক্ত চেক যোগ করুন। অনেক প্রোডাক্টে তিনটি ভূমিকা যথেষ্ট: Admin, Manager, Member। Admin সব করতে পারে, Manager বেশিরভাগ ইন্টিগ্রেশন সেটআপ করতে পারবে, এবং Member চালনা ব্যবহার করতে পারবে কিন্তু সেটিংস বদলাতে পারবে না। পেমেন্ট বা পে-রোলের মতো সংবেদনশীল ঘটনার জন্য একটি বিশেষ ফ্ল্যাগ (যেমন “Billing manager”) যোগ করুন, পুরো নতুন ভূমিকা সিস্টেম না বানিয়েই।
ইউজার-দর্শনীয় কনফিগ (চ্যানেল নির্বাচন, ওয়েবহুক URL নামে, সক্রিয় ইভেন্ট) Install বা Connection-এ সাধারণ ডেটা হিসেবে সংরক্ষণ করুন। গোপনীয়তা (OAuth refresh tokens, API keys, signing secrets) অবশ্যই সিক্রেট স্টোর বা এনক্রিপ্টেড ফিল্ডে রাখুন এবং এক্সেস কঠোরভাবে নিয়ন্ত্রণ করুন। কাঁচা সিক্রেট বা পুরো authorization code বা কাঁচা webhook পে-লোড লগে রাখবেন না; লগে সংরক্ষিত হোক কেবল রেফারেন্স (connection_id) ও নিরাপদ মেটাডেটা (HTTP স্ট্যাটাস, error code)।
একটি ক্রিয়াসভিত্তিক বার্তা দেখান যা বলে কি ঘটেছে, ব্যবহারকারী কী করবে, এবং আপনার সিস্টেম পরবর্তী কী করবে। রিট্রাইগুলো শান্তভাবে এবং সীমিত রাখুন — শুধুমাত্র সেই ক্ষেত্রে যেখানে ব্যবহারকারী নিজে কিছুই করতে পারছে না (প্রোভাইডার ডাউন বা নেটওয়ার্ক সমস্যা)। Auth expired বা missing permissions হলে রিট্রাই বন্ধ করুন এবং Reconnect বা Fix permissions-কে প্রধান অ্যাকশনে আনুন।
শর্ট লিস্ট সার্চ রাখুন যা ব্যবহারকারীদের ভাবার ধাঁচেই কাজ করে: প্রথমে প্রোভাইডারের নাম, তারপর ক্যাটাগরি। তিনটি ফিল্টার বেশিরভাগ কাজ কভার করবে: Connected, Needs attention, এবং Not set up। তালিকায় প্রদর্শনের জন্য একটি প্রধান গ্রুপিং বেছে নিয়ে স্থিতিশীল থাকুন—ক্যাটাগরি বড় সংখ্যায় কাজ করে (CRM, Payments, Messaging)। পারফরম্যান্সের জন্য তালিকা ও ডিটেইলস আলাদা লোড করুন: লিস্ট ভিয়ারলাইজ বা পেজিনেট করুন এবং ডিটেইলস তখনই লোড করুন যখন ইউজার খুলে।
প্রথমে ক্যাটালগ এন্ট্রি বানান যাতে ইন্টিগ্রেশন ডিরেক্টরিতে দেখা যায় এমনকি কেউ সেটা কানেক্ট না করলেও। পরিস্কার নাম, সংক্ষিপ্ত বর্ণনা, আইকন এবং ১–২টি ক্যাটাগরি দিন (Messaging, Payments)। সাধারন ভাষায় সেটআপ প্রত্যাশা লিখুন, যেমন “একটি অ্যাকাউন্ট সংযুক্ত করুন” এবং “একটি ওয়ার্কস্পেস নির্বাচন করুন।” এখানে আপনি পরে কী কী লাগবে (OAuth scopes, প্রয়োজনীয় ফিল্ড, সাপোর্ট করা ফিচার) নির্ধারণ করবেন।