৫ মিনিটের কম সময়ে একটি CSV থেকে কীভাবে Open Badges ইস্যু করবেন
ধাপে ধাপে: প্রাপকদের একটি CSV আপলোড করুন, আপনার badge বেছে নিন, Award চাপুন। ব্যাচের মাঝপথে থামান ও আবার চালু করুন, ব্যর্থতাগুলো পুনরায় চেষ্টা করুন, ফলাফল এক্সপোর্ট করুন। ১০ বা ১০,০০০ জনের দলের জন্য কাজ করে।
Nacho founded Badges Ninja to make issuing verifiable digital credentials as simple as a single API call — Open Badge v2.0 badges and certificates, minted, hosted, and verifiable without standing up your own issuer infrastructure.
আপনি যদি কখনও একটি দলকে একবারে একজন প্রাপক ধরে ধরে credentials ইস্যু করে থাকেন, তাহলে সমস্যাটা আপনি ইতিমধ্যেই জানেন: প্রায় দশজনের বেশি হলে এটি আর স্কেল করে না, তার আগেই নাম আর ইমেল কপি-পেস্ট করতে করতে পুরো একটা বিকেল চলে যায়। ৪০ জনের একটি bootcamp দল, ৫০০ জনের একটি সম্মেলনের অংশগ্রহণকারী তালিকা, কিংবা ৫,০০০ জনের একটি কর্পোরেট প্রশিক্ষণ রোলআউট — সবারই একই জিনিস দরকার: একটি তালিকা আপলোড করুন, একটি badge বেছে নিন, Issue ক্লিক করুন, আর চলে যান।
Bulk Credentials ঠিক এই কাজটাই করে https://badges.ninja-তে। এই গাইডটি পুরো ফ্লো কভার করে: আপনার CSV প্রস্তুত করা, ব্যাচ কনফিগার করা, এটি চলতে দেখা, এবং বাস্তব দুনিয়ার এলোমেলো ঘটনাগুলো সামলানো — একটি প্রাপক সারিতে টাইপো, মাঝপথে বন্ধ হয়ে যাওয়া একটি ব্যাচ, কিংবা এমন একটি প্রোগ্রাম যা ড্যাশবোর্ডের বদলে নিজস্ব সিস্টেম থেকে একই পদ্ধতিতে ইস্যু করতে চায়।
শুরু করার আগে: আপনার যা যা লাগবে
দুটি জিনিস, যা সম্ভবত আপনার কাছে ইতিমধ্যেই আছে:
- একটি badge — ভিজ্যুয়াল ডিজাইনারে একবার ডিজাইন করা, ব্যাচের প্রতিটি প্রাপকের জন্য পুনর্ব্যবহৃত। যদি এখনও একটিও তৈরি না করে থাকেন, তাহলে আপনার প্রথম যাচাইযোগ্য সার্টিফিকেট ডিজাইন করা নিয়ে আমাদের গাইডটি দেখুন।
- প্রাপকদের একটি CSV — নাম, ইমেল, এবং (ঐচ্ছিকভাবে) একটি ইস্যু তারিখ। পুরো স্কিমা এটুকুই।
আপনার প্রতি প্রাপকের জন্য একটি ইস্যুকারী অ্যাকাউন্ট, একটি মেইল সার্ভার, বা কোনও কোড লাগবে না। এই অংশের সবকিছুই ড্যাশবোর্ডে ঘটে।
ধাপ ১: আপনার CSV প্রস্তুত করুন
প্রাপক তালিকার ফরম্যাটটি ইচ্ছাকৃতভাবে ন্যূনতম রাখা হয়েছে:
name,email,issued_on
Maria Gonzalez,maria@example.com,2026-07-01
David Kim,david@example.com,2026-07-01
Priya Patel,priya@example.com,
- name — আবশ্যক। assertion এবং সার্টিফিকেটে প্রাপক ফিল্ডটি পূরণ করে।
- email — আবশ্যক। এটি Open Badge v2.0 assertion-এ প্রাপকের পরিচয় হয়ে ওঠে — সংরক্ষণের আগে প্রতি-credential salt দিয়ে হ্যাশ করা হয়, কখনওই প্লেইনটেক্সটে রাখা হয় না।
- issued_on — ঐচ্ছিক। এটি ফাঁকা রেখে দিন, তাহলে ব্যাচ প্রতিটি সারি যে মুহূর্তে প্রসেস হয় সেই মুহূর্তটি ব্যবহার করবে; স্পষ্টভাবে সেট করুন যদি এমন একটি দলের জন্য পিছিয়ে ইস্যু করেন যারা আসলে গত মাসে শেষ করেছে।
বেশিরভাগ প্রোগ্রাম মালিক যেখানে ইতিমধ্যেই কমপ্লিশন ট্র্যাক করেন সেখান থেকেই সরাসরি এটি এক্সপোর্ট করেন — Airtable, Google Sheets, একজন প্রশিক্ষকের দেওয়া একটি স্প্রেডশিট, কিংবা LMS গ্রেডবুক থেকে টানা একটি CSV। কোনও বিশেষ এক্সপোর্ট টুল দরকার নেই; ওই তিনটি কলামসহ যেকোনো CSV কাজ করে।
সাধারণ CSV ফাঁদ (এবং প্রিভিউ কীভাবে সেগুলো ধরে)
বাস্তব দুনিয়ার প্রাপক তালিকায় হাতেগোনা কয়েকটি সমস্যা বারবার দেখা যায়, সাধারণত কারণ CSV-টি দুই-তিনটি সোর্স শিট মিলিয়ে বানানো হয়েছে:
- ইমেল ঠিকানার শেষে অতিরিক্ত স্পেস — একটি PDF রোস্টার বা Google Form এক্সপোর্ট থেকে কপি-পেস্ট প্রায়ই একটি অদৃশ্য স্পেস বয়ে আনে। স্প্রেডশিট সেলে এটি ঠিকঠাক দেখায় কিন্তু আপলোডের সময় ইমেল যাচাইয়ে ব্যর্থ হয়।
- ডুপ্লিকেট সারি — একই প্রাপক দুবার হাজির হয় কারণ একটি দলের তালিকা আর দেরিতে নিবন্ধিতদের তালিকা ডিডুপ্লিকেশন ছাড়াই জোড়া লাগানো হয়েছে।
- অসামঞ্জস্যপূর্ণ তারিখ ফরম্যাট — এক কলামে
2026-07-01আরেক এক্সপোর্টের07/01/2026-এর সঙ্গে মেশানো। ISO 8601 (YYYY-MM-DD)-তে অটল থাকুন, তাহলে এটি সম্পূর্ণ উধাও হয়ে যায়। - হেডারের অক্ষর-কেসের অমিল —
EmailবনামemailবনামE-mail। পার্সারটি সাধারণ ভ্যারিয়েন্টের ব্যাপারে উদার, কিন্তু সম্পূর্ণ কাস্টম একটি হেডার নাম স্বয়ংক্রিয়ভাবে ম্যাপ হবে না।
এগুলোর একটিও মারাত্মক নয় — প্রিভিউ ধাপ (নিচে) কিছু ইস্যু হওয়ার আগেই প্রতিটি সমস্যা সামনে আনে, তাই সমাধানটা হলো “স্প্রেডশিট এডিট করুন, আবার আপলোড করুন”, “৩,০০০ প্রাপকের মধ্যে কে একটি ভাঙা badge পেল সেটা খুঁজে বের করুন” নয়।
ধাপ ২: ব্যাচ কনফিগার করুন
ড্যাশবোর্ড থেকে Credentials → Bulk Credentials খুলুন এবং আপনি যে badge ইস্যু করছেন সেটি বেছে নিন। এই ধাপেই আপনি পুরো ব্যাচে প্রযোজ্য যেকোনো কিছু সেট করেন: badge নিজেই, একটি শেয়ার্ড ইস্যু তারিখ যদি আপনি CSV-তে প্রতি-সারি তারিখ না দেন, এবং (যদি আপনার ইস্যুকারী প্রোফাইলে একটি থাকে) সেই LinkedIn organization ID যা প্রতিটি প্রাপককে এক ক্লিকে তাদের প্রোফাইলে credential যোগ করতে দেবে।

আপনি যে badge বেছেছেন সেটি চূড়ান্ত সংস্করণ কিনা দুবার যাচাই করার জন্য এটি একটি ভালো মুহূর্ত — প্রাপকরা ইস্যু করার মুহূর্তে এর সঙ্গে যে ছবি ও ক্রাইটেরিয়া সংযুক্ত থাকবে সেটাই দেখবে, পরে আপনি যেভাবেই আপডেট করুন না কেন সেটা নয়।
ধাপ ৩: আপলোড ও প্রিভিউ
আপনার CSV ভেতরে ছেড়ে দিন, প্ল্যাটফর্ম এটি পার্স করে, আপনাকে একটি প্রিভিউ টেবিল দেখায়, এবং যা প্রসেস করতে পারে না তা ফ্ল্যাগ করে — একটি অনুপস্থিত ইমেল, একটি ত্রুটিপূর্ণ তারিখ, একটি ডুপ্লিকেট সারি। আপনি প্রিভিউ নিশ্চিত না করা পর্যন্ত কিছুই ইস্যু হয় না।

এই প্রিভিউ ধাপটি দেখতে যতটা মনে হয় তার চেয়ে বেশি গুরুত্বপূর্ণ। ২,০০০ সারির একটি CSV-এর একটি সারিতে একটি টাইপো চোখে ধরা সহজ নয়, আর ১,৯৯৯টি সঠিক সারি ইস্যু হয়ে যাওয়ার আগে এটি ধরা পরে গিয়ে সেটা খোলার চেষ্টা করার চেয়ে অনেক সস্তা। আপনার স্প্রেডশিটে ফ্ল্যাগ করা সারিগুলো ঠিক করুন, আবার আপলোড করুন, আর প্রিভিউ আপডেট হয়ে যায়।
ধাপ ৪: ব্যাচ চালান
Issue চাপুন আর ব্যাচ প্রসেসিং শুরু করে। একটি প্রোগ্রেস বার সম্পন্ন বনাম বাকি সারিগুলো ট্র্যাক করে, এবং ব্যাচটি সার্ভার-সাইডে চলে — আপনাকে ট্যাব খোলা রাখতে হবে না, আর ব্যাচের মাঝপথে ল্যাপটপ বন্ধ করলেও আপনার জায়গা হারায় না।
শেষ অংশটা স্পষ্ট করে বলা দরকার কারণ বড় দলগুলোর জন্য আসলে এই বিষয়টাই গুরুত্বপূর্ণ: ব্যাচের অবস্থা সার্ভারে থাকে, আপনার ব্রাউজারে নয়। যদি আপনার কানেকশন কেটে যায়, ল্যাপটপ ঘুমিয়ে পড়ে, কিংবা একটি মিটিং শুরু হওয়ায় আপনি শুধু ট্যাবটা বন্ধ করে দেন, তবুও ব্যাচ চলতেই থাকে (কিংবা আপনি থামালে ঠিক যেখানে থেমেছিল সেখান থেকেই আবার শুরু হয়) — শূন্য থেকে আবার শুরু হয় না। একটি ৪০ জনের bootcamp দলের জন্য এটি একটা বাড়তি সুবিধা। একটি ৫,০০০ সারির কর্পোরেট রোলআউটের জন্য এটাই “এমনিই কাজ করে যায়” আর “কাউকে বিশ মিনিট ধরে একটি ব্রাউজার ট্যাব পাহারা দিতে হয়”-এর মধ্যে পার্থক্য।
আপনি ইচ্ছাকৃতভাবেও একটি চলমান ব্যাচ থামাতে পারেন — ধরুন কেউ ফ্ল্যাগ করলো যে একটি ৩,০০০ সারির রানের মাঝপথে badge ক্রাইটেরিয়া টেক্সটে সামান্য পরিবর্তন দরকার — সমস্যা ঠিক করুন, আর ইতিমধ্যে সম্পন্ন সারিগুলো আবার ইস্যু না করেই আবার চালু করুন।
ধাপ ৫: ব্যর্থতা সামলান
বাস্তব প্রাপক তালিকায় খারাপ সারি থাকে: টাইপো করা একটি ইমেল ডোমেইন, আসলে ফাঁকা একটি নাম ফিল্ড, দুটি এক্সপোর্ট করা শিট মিলিয়ে ফেলার ফলে তৈরি একটি ডুপ্লিকেট এন্ট্রি। যখন একটি সারি ব্যর্থ হয়, ব্যাচ থামে না — এটি বাকিগুলো প্রসেস করতে থাকে এবং পরে পর্যালোচনার জন্য ব্যর্থতাটি ফ্ল্যাগ করে। আপনি একটি ফলাফল এক্সপোর্ট পান যা ঠিক কোন সারিগুলো সফল হয়েছে আর কোনগুলো হয়নি তা দেখায়, ফলে আপনি শুধু ব্যর্থ সারিগুলো ঠিক করে একটি ছোট ফলো-আপ ব্যাচ চালাতে পারেন, পুরো তালিকা আবার যাচাই করার বদলে।
credentials ড্যাশবোর্ডে ইতিমধ্যেই প্রচলিত CSV-এক্সপোর্ট অভ্যাসের জন্য এটি গুরুত্বপূর্ণ — আপনি যেকোনো সময়ে আসলে কী ইস্যু হয়েছে তার একটি CSV টানতে পারেন, আপনার সোর্স তালিকার সঙ্গে ক্রস-রেফারেন্স করতে পারেন, এবং ঠিক জানতে পারেন কার এখনও একটি badge দরকার।
API পথ: একই ফ্লো, ড্যাশবোর্ড ছাড়া
উপরের সবকিছু ধরে নেয় যে কেউ একজন ড্যাশবোর্ডে বসে wizard-এর মধ্য দিয়ে ক্লিক করছে। যদি আপনার কমপ্লিশন ইতিমধ্যেই একটি সিস্টেমে থাকে — একটি LMS, একটি CRM, একটি স্প্রেডশিট অটোমেশন — তাহলে আপনি একই bulk-credential ফ্লো সরাসরি Awards API থেকে চালাতে পারেন।
একটি ন্যূনতম প্রতি-প্রাপক ইস্যুয়েন্স কল দেখতে এমন হয়:
curl -X POST https://api.badges.ninja/awards \
-H "X-Api-Key: bws_1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d" \
-H "Content-Type: application/json" \
-d '{
"badgeId": "badge_9f8e7d6c5b4a",
"recipient": {
"name": "Maria Gonzalez",
"email": "maria@example.com"
},
"issuedOn": "2026-07-01T00:00:00Z"
}'
অথবা Python-এ, একই CSV থেকে পড়া সারিগুলোর উপর লুপ চালিয়ে, যেটা নাহলে আপনি হাতে আপলোড করতেন:
import csv
import requests
API_KEY = "bws_1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d"
BADGE_ID = "badge_9f8e7d6c5b4a"
with open("recipients.csv") as f:
for row in csv.DictReader(f):
requests.post(
"https://api.badges.ninja/awards",
headers={"X-Api-Key": API_KEY},
json={
"badgeId": BADGE_ID,
"recipient": {"name": row["name"], "email": row["email"]},
"issuedOn": row.get("issued_on") or None,
},
)
এটি কাজে লাগানোর মতো যখন credential ইস্যুয়েন্স সম্পূর্ণ অন্য কিছু দিয়ে ট্রিগার হয় — একটি কোর্স-কমপ্লিশন webhook, একটি CRM পর্যায় পরিবর্তন, একটি ফর্ম সাবমিশন — কোনও ব্যক্তি হাতে CSV এক্সপোর্ট করার বদলে। আমরা API কুইকস্টার্ট-এ authentication এবং সম্পূর্ণ request/response গঠন কভার করি। এভাবে তৈরি প্রতিটি credential ড্যাশবোর্ড wizard দিয়ে তৈরি একটির সঙ্গে অভিন্ন: একই Open Badge v2.0 assertion, একই ভেরিফিকেশন URL, একই PDF সার্টিফিকেট।
ড্যাশবোর্ড Wizard বনাম API: আপনি আসলে কোনটা চান?
| Dashboard Bulk Credentials | Awards API | |
|---|---|---|
| যার জন্য সেরা | একবারের বা মাঝেমধ্যের একটি ব্যাচ (দলের গ্র্যাজুয়েশন, সম্মেলনে উপস্থিতি) | একটি পুনরাবৃত্ত ট্রিগার (প্রতিটি কোর্স কমপ্লিশন, প্রতিটি ক্রয়) |
| সেটআপের পরিশ্রম | কিছুই না — একটি CSV এক্সপোর্ট করুন, আপলোড করুন | একবারের ইন্টিগ্রেশন কাজ (webhook বা স্ক্রিপ্ট) |
| কে চালায় | প্রোগ্রাম মালিক, কোনও কোড ছাড়া | যে ট্রিগারিং সিস্টেমের মালিক |
| ব্যর্থতা সামলানো | প্রিভিউ + প্রতি-সারি ফলাফল এক্সপোর্ট | প্রতি-অনুরোধ HTTP স্ট্যাটাস, আপনার নিজের retry লজিকে সামলানো |
বেশিরভাগ টিম ড্যাশবোর্ড wizard দিয়ে শুরু করে কারণ এতে একটি CSV ছাড়া আর কিছুই লাগে না, আর একই ব্যাচ তিন-চারবার হাতে চালানোর পর এবং প্যাটার্নটা স্পষ্টভাবে অটোমেট করার মতো হলে তবেই তারা API-তে যায়।
গোপনীয়তা: আসলে কী সংরক্ষণ করা হয়
নাম আর ইমেলের একটি CSV হলো ব্যক্তিগত ডেটা, আর আপলোডের পরে এর সঙ্গে কী ঘটে তা জানা গুরুত্বপূর্ণ। প্রাপকের ইমেল ঠিকানা কখনওই credential-এ প্লেইনটেক্সটে সংরক্ষিত হয় না — এটি Open Badge v2.0 assertion-এর অংশ হিসেবে প্রতি-credential salt দিয়ে হ্যাশ করা হয়, স্পেকের hashed প্রাপক-পরিচয় ফরম্যাট অনুসরণ করে। একজন verifier ওই হ্যাশের বিপরীতেই যাচাই করে, কাঁচা ঠিকানার বিপরীতে নয়। নাম ফিল্ডটি যেমন এন্টার করা হয়েছে তেমনই সংরক্ষিত হয়, কারণ এটি সার্টিফিকেট ও ভেরিফিকেশন পেজে দৃশ্যমান হওয়ার কথা। ইস্যুর পরে যদি কোনও সারি সংশোধন করতে হয় — সবচেয়ে সাধারণভাবে একটি ভুল বানানের নাম — তাহলে আপনি ব্যাচের বাকি অংশ না ছুঁয়েই credentials ড্যাশবোর্ড থেকে সেই আলাদা credential-টি এডিট বা রিভোক করতে পারেন।
ব্যাচের পরে: প্রাপকদের জানান
badge ইস্যু করা আর প্রাপককে সেটা সম্পর্কে জানানো দুটি আলাদা ধাপ। যদি আপনার CSV ইতিমধ্যেই আপনার নিজের সিস্টেমের মাধ্যমে একটি ইমেল ট্রিগার না করে, তাহলে ড্যাশবোর্ডের bulk-share ফ্লো আপনাকে সদ্য তৈরি credentials একসঙ্গে মাল্টি-সিলেক্ট করে একবারেই সবাইকে একটি ব্যক্তিগতকৃত শেয়ার ইমেল পাঠাতে দেয় — সম্পূর্ণ গাইডের জন্য শেয়ার ইমেল বাল্কে পাঠানো দেখুন, প্রতি-প্রাপক ব্যক্তিগতকরণ (নাম, badge ছবি, ভেরিফিকেশন লিঙ্ক) কীভাবে স্বয়ংক্রিয়ভাবে প্রতিস্থাপিত হয় তা সহ।
কখন Bulk Credentials সঠিক টুল
বাল্ক ইস্যুয়েন্স তখনই সঠিক সিদ্ধান্ত যখন “ব্যাচ” কাঠামোটা বাস্তবের সঙ্গে মানানসই: একটি দল যারা একই দিনে শেষ করেছে, একটি সম্মেলন যা সদ্য শেষ হলো, একটি প্রশিক্ষণ রোলআউট যা একটি কমপ্লায়েন্স ডেডলাইনের দিকে এগোচ্ছে। এর বদলে আপনি যদি পৃথক মাইলফলক অর্জিত হওয়ার সঙ্গে সঙ্গে এককালীন credentials ইস্যু করেন — একটিমাত্র পদোন্নতি, একটিমাত্র প্রকল্প সমাপ্তি — তাহলে একটি এক-সারির CSV বানানোর চেয়ে single-credential ফর্ম দ্রুততর।
পুনরাবৃত্ত যেকোনো কিছুর জন্য — প্রতি মাসে চলা একই কোর্স, একটি চলমান onboarding পাইপলাইন — উপরের API পথটি একবার সেট আপ করার মতো। এটি “প্রতি দলের জন্য হাতে bulk credentials চালান”-কে বদলে দেয় “কমপ্লিশন ইতিমধ্যেই স্বয়ংক্রিয়ভাবে credentials ইস্যু করে”-তে, যা এই ওয়ার্কফ্লোর সেই সংস্করণ যা দ্বিতীয় বা তৃতীয় ম্যানুয়াল ব্যাচের পর বেশিরভাগ প্রোগ্রাম মালিক আসলে চান।
আপনার প্রথম যাচাইযোগ্য credential ইস্যু করতে প্রস্তুত? badges.ninja-তে বিনামূল্যে শুরু করুন — ভিজ্যুয়াল ডিজাইনার, পাবলিক ভেরিফিকেশন পেজ, PDF সার্টিফিকেট, Open Badge v2.0 আউটপুট। কোনও ক্রেডিট কার্ড লাগবে না।
এই নিবন্ধটি যেভাবে তৈরি হয়েছে
এই ব্লগের কিছু পোস্ট এআই সহায়কের সাহায্যে খসড়া করা হয় এবং প্রকাশের আগে Badges Ninja টিম তা পর্যালোচনা, তথ্য যাচাই ও সম্পাদনা করে। প্রতিটি কোড নমুনা ও মূল্য লাইভ প্রোডাক্টের সাথে যাচাই করা হয়। আমাদের সম্পাদকীয় ও এআই প্রক্রিয়া সম্পর্কে আরও পড়ুন আমাদের সম্পাদকীয় প্রক্রিয়া পৃষ্ঠা .

লেখক সম্পর্কে
Nacho Coll
Founder & Engineer at Badges Ninja
Nacho founded Badges Ninja to make issuing verifiable digital credentials as simple as a single API call — Open Badge v2.0 badges and certificates, minted, hosted, and verifiable without standing up your own issuer infrastructure. Writes about the Open Badges spec, credential verification, and running a credentialing platform serverless on AWS, from the operator side of the wire.
আরও লেখা Nacho Coll
- আপনার Open Badges-এ কীভাবে LinkedIn ”Add to Profile” বাটন যোগ করবেন২০ আগ, ২০২৬ · 10মিনিট পড়া
- Open Badges বনাম PDF সার্টিফিকেট: ২০২৬ সালে আপনার প্রোগ্রামের জন্য কোনটি সঠিক?১০ আগ, ২০২৬ · 6মিনিট পড়া
- ওপেন ব্যাজ v2 বনাম v3 ব্যাখ্যা করা হলো: আজ আপনার কোন স্পেসিফিকেশন ব্যবহার করা উচিত?৬ আগ, ২০২৬ · 9মিনিট পড়া


