API ব্যবস্থাপনা
API ব্যবস্থাপনা, ওয়েবহুক কনফিগারেশন এবং তৃতীয় পক্ষের ইন্টিগ্রেশন
ISPBills একটি ব্যাপক REST API প্রদান করে যা মোবাইল অ্যাপ্লিকেশন চালিত করে এবং বাহ্যিক সিস্টেম, কাস্টম ড্যাশবোর্ড এবং অটোমেশন ওয়ার্কফ্লোর সাথে ইন্টিগ্রেশন সক্ষম করে। এই গাইডে ক্রেডেনশিয়াল ব্যবস্থাপনা, প্রমাণীকরণ, API v1 ও v2 উভয়ের সম্পূর্ণ এন্ডপয়েন্ট রেফারেন্স এবং ওয়েবহুক কনফিগারেশন কভার করা হয়েছে।

API v2 সকল নতুন ইন্টিগ্রেশনের জন্য পছন্দের API। এটি একটি সুসংগত রিসোর্স-ভিত্তিক ডিজাইন, সূক্ষ্ম রেট লিমিটিং এবং বর্ধিত কার্যকারিতা অফার করে। API v1 পশ্চাদগামী সামঞ্জস্যতার জন্য উপলব্ধ থাকবে তবে নতুন এন্ডপয়েন্ট পাবে না।
API ক্লায়েন্ট
একটি API ক্লায়েন্ট তৈরি করা
- সাইডবারে Integrations → API Management-এ যান।
- Create API Client ক্লিক করুন।
- ক্লায়েন্টের জন্য একটি বর্ণনামূলক নাম লিখুন (যেমন, "Mobile App", "Custom Dashboard", "Billing CRM")।
- v1 ক্লায়েন্টের জন্য, একটি API token এবং refresh token পেয়ার পেতে Generate Token ক্লিক করুন।
- v2 ক্লায়েন্টের জন্য, একটি Client ID এবং Client Secret স্বয়ংক্রিয়ভাবে তৈরি হয়।
- সকল ক্রেডেনশিয়াল অবিলম্বে কপি এবং সংরক্ষণ করুন — গোপনীয় মানগুলো শুধুমাত্র একবার প্রদর্শিত হয়।
API ক্লায়েন্ট পরিচালনা
API Management পৃষ্ঠা থেকে আপনি:
- সকল সক্রিয় API ক্লায়েন্ট, তাদের ধরন (v1 বা v2) এবং তৈরির তারিখ দেখতে পারেন।
- ক্রেডেনশিয়াল আপোষিত হলে টোকেন এবং সিক্রেট পুনঃতৈরি বা রোটেট করতে পারেন।
- একটি API ক্লায়েন্ট মুছে অ্যাক্সেস প্রত্যাহার করতে পারেন।
- পুরনো ইন্টিগ্রেশন শনাক্ত করতে সর্বশেষ ব্যবহৃত টাইমস্ট্যাম্প পর্যবেক্ষণ করতে পারেন।
নিরাপত্তা: API টোকেন এবং ক্লায়েন্ট সিক্রেটকে পাসওয়ার্ডের মতো বিবেচনা করুন। এগুলোকে কখনো ভার্সন কন্ট্রোলে কমিট করবেন না, ক্লায়েন্ট-সাইড কোডে এমবেড করবেন না বা এনক্রিপ্ট না করা চ্যানেলে প্রেরণ করবেন না।
প্রমাণীকরণ
ISPBills দুটি প্রমাণীকরণ ফ্লো সমর্থন করে — প্রতিটি API সংস্করণের জন্য একটি।
API v1 — Bearer Token
লগইন এন্ডপয়েন্টে ক্রেডেনশিয়াল পোস্ট করে একটি টোকেন পান, তারপর প্রতিটি অনুরোধে এটি অন্তর্ভুক্ত করুন:
POST /api/auth/login
Content-Type: application/json
Accept: application/json
{
"email": "admin@example.com",
"password": "your_password"
}
রেসপন্স:
{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6...",
"token_type": "bearer",
"expires_in": 3600,
"refresh_token": "def50200abc123..."
}
পরবর্তী অনুরোধে টোকেনটি অন্তর্ভুক্ত করুন:
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6...
টোকেন রিফ্রেশ
অ্যাক্সেস টোকেনের মেয়াদ শেষ হওয়ার আগে, নতুন পেয়ারের জন্য রিফ্রেশ টোকেন এক্সচেঞ্জ করুন:
POST /api/auth/refresh
Content-Type: application/json
Accept: application/json
{
"refresh_token": "def50200abc123..."
}
রেসপন্সে একটি নতুন access_token এবং refresh_token ফেরত আসে।
API v2 — Client Credentials (OAuth 2.0)
API v2 একটি client-credentials ফ্লো ব্যবহার করে। একটি স্বল্পমেয়াদী অ্যাক্সেস টোকেনের জন্য আপনার Client ID এবং Client Secret এক্সচেঞ্জ করুন:
POST /api/v2/auth/token
Content-Type: application/json
Accept: application/json
{
"client_id": "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d",
"client_secret": "sVn8K4pQ...xZ2mW"
}
রেসপন্স:
{
"access_token": "v2_eyJhbGciOiJSUzI1NiIsInR5cCI6...",
"token_type": "bearer",
"expires_in": 1800
}
সকল v2 অনুরোধের জন্য Authorization হেডারে টোকেনটি ব্যবহার করুন:
Authorization: Bearer v2_eyJhbGciOiJSUzI1NiIsInR5cCI6...
টোকেন প্রত্যাহার
মেয়াদ শেষ হওয়ার আগে একটি টোকেন অকার্যকর করতে (যেমন, নিরাপত্তা ঘটনার সময়):
POST /api/v2/auth/revoke
Authorization: Bearer v2_eyJhbGciOiJSUzI1NiIsInR5cCI6...
একটি 204 No Content রেসপন্স সফল প্রত্যাহার নিশ্চিত করে।
v2 টোকেনের v1 টোকেনের চেয়ে ছোট ডিফল্ট মেয়াদ (৩০ মিনিট) থাকে। আপনার ইন্টিগ্রেশন একটি 401 Unauthorized রেসপন্স পেলে স্বয়ংক্রিয়ভাবে একটি নতুন টোকেন অনুরোধ করা উচিত।
পেজিনেশন
বড় ফলাফল সেট ফেরত দিতে পারে এমন সকল তালিকা এন্ডপয়েন্ট কোয়েরি প্যারামিটারের মাধ্যমে কার্সর-ভিত্তিক পেজিনেশন সমর্থন করে।
| প্যারামিটার | ধরন | ডিফল্ট | বিবরণ |
|---|---|---|---|
page |
integer | 1 |
প্রাপ্ত করার পৃষ্ঠা নম্বর। |
per_page |
integer | 20 |
প্রতি পৃষ্ঠায় রেকর্ড সংখ্যা (সর্বোচ্চ 100)। |
উদাহরণ অনুরোধ:
GET /api/v2/customers?page=2&per_page=50
Authorization: Bearer YOUR_TOKEN
পেজিনেটেড রেসপন্স এনভেলপ:
{
"data": [ ... ],
"meta": {
"current_page": 2,
"per_page": 50,
"total": 523,
"last_page": 11
}
}
সকল রেকর্ড প্রাপ্ত হয়েছে কিনা জানতে সবসময় meta.last_page পরীক্ষা করুন। পৃষ্ঠা সংখ্যা হার্ডকোড করা এড়িয়ে চলুন।
ত্রুটি পরিচালনা
API v1 এবং v2 উভয়ে সামঞ্জস্যপূর্ণ ত্রুটি রেসপন্স ফেরত দেয়। ত্রুটিগুলো স্ট্যান্ডার্ড HTTP স্ট্যাটাস কোড ব্যবহার করে এবং একটি স্ট্রাকচার্ড JSON বডি অন্তর্ভুক্ত করে।
ত্রুটি রেসপন্স ফরম্যাট
{
"error": {
"code": "VALIDATION_ERROR",
"message": "The given data was invalid.",
"details": {
"email": ["The email field is required."],
"package_id": ["The selected package is invalid."]
}
}
}
সাধারণ স্ট্যাটাস কোড
| স্ট্যাটাস কোড | অর্থ | সাধারণ কারণ |
|---|---|---|
400 |
Bad Request | ত্রুটিপূর্ণ JSON বা অনুপস্থিত প্রয়োজনীয় ফিল্ড। |
401 |
Unauthorized | অনুপস্থিত, মেয়াদোত্তীর্ণ বা অবৈধ টোকেন। |
403 |
Forbidden | বৈধ টোকেন কিন্তু অপর্যাপ্ত অনুমতি। |
404 |
Not Found | রিসোর্সটি বিদ্যমান নেই বা মুছে ফেলা হয়েছে। |
422 |
Unprocessable Entity | ভ্যালিডেশন ব্যর্থ — error.details পরীক্ষা করুন। |
429 |
Too Many Requests | রেট লিমিট অতিক্রম — নিচে রেট লিমিট দেখুন। |
500 |
Internal Server Error | অপ্রত্যাশিত সার্ভার-সাইড ব্যর্থতা। |
422 রেসপন্সে সবসময় error.details অবজেক্ট পরীক্ষা করুন। এতে প্রতি-ফিল্ড ভ্যালিডেশন মেসেজ রয়েছে যা শেষ ব্যবহারকারীর কাছে প্রদর্শন করা বা ডিবাগিংয়ের জন্য লগ করা উচিত।
API v1 রেফারেন্স
সকল v1 এন্ডপয়েন্ট /api/v1 প্রিফিক্স সহ এবং POST /api/auth/login-এর মাধ্যমে প্রাপ্ত একটি বৈধ Bearer token প্রয়োজন। প্রমাণীকরণ auth:api middleware দ্বারা প্রয়োগ করা হয়।
ড্যাশবোর্ড
| মেথড | এন্ডপয়েন্ট | বিবরণ |
|---|---|---|
GET |
/v1/dashboard |
ড্যাশবোর্ড সারসংক্ষেপ |
GET |
/v1/noc/dashboard |
NOC ড্যাশবোর্ড |
গ্রাহক
| মেথড | এন্ডপয়েন্ট | বিবরণ |
|---|---|---|
GET |
/v1/customers |
সকল গ্রাহক তালিকা (পেজিনেটেড) |
POST |
/v1/customers |
নতুন গ্রাহক তৈরি |
GET |
/v1/customers/{id} |
ID দ্বারা একটি গ্রাহক প্রাপ্ত করুন |
POST |
/v1/customers/{id}/action |
একটি অ্যাকশন সম্পাদন করুন (স্থগিত, সক্রিয় ইত্যাদি) |
উদাহরণ — গ্রাহক তৈরি:
POST /api/v1/customers
Authorization: Bearer YOUR_TOKEN
Content-Type: application/json
{
"name": "Rafiq Ahmed",
"email": "rafiq@example.com",
"phone": "01712345678",
"package_id": 5,
"address": "House 12, Road 7, Dhanmondi, Dhaka",
"connection_type": "pppoe"
}
রেসপন্স (201 Created):
{
"data": {
"id": 1042,
"name": "Rafiq Ahmed",
"email": "rafiq@example.com",
"phone": "01712345678",
"package": "Premium 50 Mbps",
"status": "active",
"created_at": "2026-04-10T08:15:00Z"
}
}
বিলিং
| মেথড | এন্ডপয়েন্ট | বিবরণ |
|---|---|---|
GET |
/v1/invoices |
সকল ইনভয়েস তালিকা |
GET |
/v1/bills |
সকল বিল তালিকা |
GET |
/v1/subscriptions |
সকল সাবস্ক্রিপশন তালিকা |
GET |
/v1/payments |
সকল পেমেন্ট তালিকা |
নেটওয়ার্ক
| মেথড | এন্ডপয়েন্ট | বিবরণ |
|---|---|---|
GET |
/v1/routers |
সকল রাউটার তালিকা |
GET |
/v1/olts |
সকল OLT তালিকা |
মনিটরিং
| মেথড | এন্ডপয়েন্ট | বিবরণ |
|---|---|---|
GET |
/v1/monitoring/ubiquiti |
Ubiquiti ডিভাইস স্ট্যাটাস |
GET |
/v1/monitoring/cambium |
Cambium ডিভাইস স্ট্যাটাস |
GET |
/v1/monitoring/access-logs |
ডিভাইস অ্যাক্সেস লগ |
GET |
/v1/monitoring/onus |
ONU তালিকা |
GET |
/v1/monitoring/status-checks |
অবকাঠামো স্ট্যাটাস চেক |
GET |
/v1/monitoring/zabbix |
Zabbix মনিটরিং ডেটা |
SMS
| মেথড | এন্ডপয়েন্ট | বিবরণ |
|---|---|---|
GET |
/v1/sms/history |
SMS ডেলিভারি ইতিহাস |
GET |
/v1/sms/balance |
বর্তমান SMS ব্যালেন্স |
POST |
/v1/sms/send |
একটি SMS পাঠান |
উদাহরণ — SMS পাঠানো:
POST /api/v1/sms/send
Authorization: Bearer YOUR_TOKEN
Content-Type: application/json
{
"phone": "01712345678",
"message": "Your monthly invoice of 1,200 BDT has been generated. Please pay before April 20."
}
রেসপন্স (200 OK):
{
"data": {
"message_id": "sms_8a3f2c",
"status": "queued",
"phone": "01712345678"
}
}
অপারেটর
| মেথড | এন্ডপয়েন্ট | বিবরণ |
|---|---|---|
GET |
/v1/operators |
সকল অপারেটর তালিকা |
POST |
/v1/operators |
নতুন অপারেটর তৈরি |
PUT |
/v1/operators/{id} |
একটি অপারেটর আপডেট |
POST |
/v1/operators/{id}/suspend |
একটি অপারেটর স্থগিত |
POST |
/v1/operators/{id}/fund |
অপারেটরে তহবিল যোগ |
VPN
| মেথড | এন্ডপয়েন্ট | বিবরণ |
|---|---|---|
GET |
/v1/vpn/accounts |
VPN অ্যাকাউন্ট তালিকা |
GET |
/v1/vpn/accounts/{account}/config |
VPN কনফিগ ফাইল ডাউনলোড |
লগ
| মেথড | এন্ডপয়েন্ট | বিবরণ |
|---|---|---|
GET |
/v1/logs/router |
রাউটার লগ |
GET |
/v1/logs/hotspot |
হটস্পট লগ |
GET |
/v1/logs/ppp-auth |
PPP প্রমাণীকরণ লগ |
GET |
/v1/logs/auto-suspension |
স্বয়ংক্রিয় স্থগিতকরণ লগ |
রিচার্জ কার্ড
| মেথড | এন্ডপয়েন্ট | বিবরণ |
|---|---|---|
GET |
/v1/recharge-cards |
সকল রিচার্জ কার্ড তালিকা |
API v2 রেফারেন্স
সকল v2 এন্ডপয়েন্ট /api/v2 প্রিফিক্স সহ। প্রমাণীকরণ উপরে বর্ণিত client-credentials ফ্লো ব্যবহার করে (auth.api_v2 middleware)। v2 এন্ডপয়েন্টগুলো প্রতি-ক্লায়েন্ট রেট লিমিটিংয়ের অধীনে।
API v2 সকল নতুন ইন্টিগ্রেশনের জন্য সুপারিশকৃত সংস্করণ। এটি বেশিরভাগ রিসোর্সে সম্পূর্ণ CRUD অপারেশন, মানসম্মত রেসপন্স এনভেলপ এবং v1-এ উপলব্ধ নয় এমন অতিরিক্ত এন্ডপয়েন্ট (ওয়েবহুক ব্যবস্থাপনা, SMS ব্রডকাস্ট, IP পুল এবং আরও) প্রদান করে।
প্রমাণীকরণ
| মেথড | এন্ডপয়েন্ট | বিবরণ |
|---|---|---|
POST |
/v2/auth/token |
একটি অ্যাক্সেস টোকেন প্রাপ্ত করুন |
POST |
/v2/auth/revoke |
একটি অ্যাক্সেস টোকেন প্রত্যাহার করুন |
গ্রাহক
| মেথড | এন্ডপয়েন্ট | বিবরণ |
|---|---|---|
GET |
/v2/customers |
গ্রাহক তালিকা (পেজিনেটেড) |
POST |
/v2/customers |
একটি গ্রাহক তৈরি |
GET |
/v2/customers/{id} |
একটি গ্রাহক প্রাপ্ত করুন |
PUT |
/v2/customers/{id} |
একটি গ্রাহক আপডেট |
DELETE |
/v2/customers/{id} |
একটি গ্রাহক মুছুন |
GET |
/v2/customers/{id}/bills |
গ্রাহকের বিল |
GET |
/v2/customers/{id}/payments |
গ্রাহকের পেমেন্ট |
GET |
/v2/customers/{id}/subscriptions |
গ্রাহকের সাবস্ক্রিপশন |
GET |
/v2/customers/{id}/usage |
গ্রাহকের ব্যবহার পরিসংখ্যান |
উদাহরণ — গ্রাহক তৈরি:
POST /api/v2/customers
Authorization: Bearer v2_YOUR_TOKEN
Content-Type: application/json
{
"name": "Fatima Begum",
"email": "fatima@example.com",
"phone": "01898765432",
"package_id": 12,
"address": "Apt 4B, Gulshan Tower, Dhaka",
"connection_type": "fiber",
"onu_mac": "AA:BB:CC:DD:EE:FF"
}
রেসপন্স (201 Created):
{
"data": {
"id": 2087,
"name": "Fatima Begum",
"email": "fatima@example.com",
"phone": "01898765432",
"package": {
"id": 12,
"name": "Fiber 100 Mbps"
},
"connection_type": "fiber",
"status": "active",
"created_at": "2026-04-12T14:22:00Z",
"updated_at": "2026-04-12T14:22:00Z"
}
}
উদাহরণ — গ্রাহক আপডেট:
PUT /api/v2/customers/2087
Authorization: Bearer v2_YOUR_TOKEN
Content-Type: application/json
{
"package_id": 15,
"address": "Suite 6A, Banani Heights, Dhaka"
}
রেসপন্স (200 OK):
{
"data": {
"id": 2087,
"name": "Fatima Begum",
"package": {
"id": 15,
"name": "Fiber 200 Mbps"
},
"address": "Suite 6A, Banani Heights, Dhaka",
"status": "active",
"updated_at": "2026-04-13T09:05:00Z"
}
}
বিলিং
| মেথড | এন্ডপয়েন্ট | বিবরণ |
|---|---|---|
GET |
/v2/billing/bills |
সকল বিল তালিকা |
POST |
/v2/billing/bills |
একটি বিল তৈরি |
GET |
/v2/billing/bills/{id} |
একটি বিল প্রাপ্ত করুন |
PUT |
/v2/billing/bills/{id} |
একটি বিল আপডেট |
DELETE |
/v2/billing/bills/{id} |
একটি বিল মুছুন |
GET |
/v2/billing/payments |
সকল পেমেন্ট তালিকা |
উদাহরণ — বিল তৈরি:
POST /api/v2/billing/bills
Authorization: Bearer v2_YOUR_TOKEN
Content-Type: application/json
{
"customer_id": 2087,
"amount": 1500,
"currency": "BDT",
"due_date": "2026-05-01",
"description": "Monthly subscription — Fiber 200 Mbps (May 2026)"
}
রেসপন্স (201 Created):
{
"data": {
"id": 8431,
"customer_id": 2087,
"amount": 1500,
"currency": "BDT",
"status": "unpaid",
"due_date": "2026-05-01",
"description": "Monthly subscription — Fiber 200 Mbps (May 2026)",
"created_at": "2026-04-15T00:00:00Z"
}
}
প্যাকেজ
| মেথড | এন্ডপয়েন্ট | বিবরণ |
|---|---|---|
GET |
/v2/packages |
সকল প্যাকেজ তালিকা |
নেটওয়ার্ক
| মেথড | এন্ডপয়েন্ট | বিবরণ |
|---|---|---|
GET |
/v2/network/routers |
সকল রাউটার তালিকা |
GET |
/v2/network/olts |
সকল OLT তালিকা |
GET |
/v2/network/onus |
সকল ONU তালিকা |
GET |
/v2/network/pools |
সকল IP পুল তালিকা |
মনিটরিং
| মেথড | এন্ডপয়েন্ট | বিবরণ |
|---|---|---|
GET |
/v2/monitoring/zabbix/hosts |
Zabbix হোস্ট |
GET |
/v2/monitoring/zabbix/problems |
Zabbix সক্রিয় সমস্যা |
GET |
/v2/monitoring/devices |
ডিভাইস স্ট্যাটাস ওভারভিউ |
GET |
/v2/monitoring/status-checks |
অবকাঠামো স্ট্যাটাস চেক |
SMS
| মেথড | এন্ডপয়েন্ট | বিবরণ |
|---|---|---|
GET |
/v2/sms/balance |
বর্তমান SMS ব্যালেন্স |
POST |
/v2/sms/send |
একজন প্রাপককে SMS পাঠান |
POST |
/v2/sms/broadcast |
একাধিক প্রাপককে SMS ব্রডকাস্ট |
উদাহরণ — SMS পাঠানো:
POST /api/v2/sms/send
Authorization: Bearer v2_YOUR_TOKEN
Content-Type: application/json
{
"phone": "01712345678",
"message": "Dear customer, your payment of 1,500 BDT has been received. Thank you!"
}
রেসপন্স (200 OK):
{
"data": {
"message_id": "sms_v2_e4c19b",
"status": "queued",
"phone": "01712345678",
"credits_used": 1,
"credits_remaining": 4820
}
}
উদাহরণ — SMS ব্রডকাস্ট:
POST /api/v2/sms/broadcast
Authorization: Bearer v2_YOUR_TOKEN
Content-Type: application/json
{
"phones": ["01712345678", "01898765432", "01611223344"],
"message": "Scheduled maintenance tonight from 02:00–04:00 AM. Service may be briefly interrupted."
}
VPN
| মেথড | এন্ডপয়েন্ট | বিবরণ |
|---|---|---|
GET |
/v2/vpn/accounts |
VPN অ্যাকাউন্ট তালিকা |
GET |
/v2/vpn/accounts/{id}/config |
VPN কনফিগ ফাইল ডাউনলোড |
ওয়েবহুক (শুধুমাত্র v2)
| মেথড | এন্ডপয়েন্ট | বিবরণ |
|---|---|---|
GET |
/v2/webhooks |
সকল ওয়েবহুক তালিকা |
POST |
/v2/webhooks |
একটি ওয়েবহুক তৈরি |
PUT |
/v2/webhooks/{id} |
একটি ওয়েবহুক আপডেট |
DELETE |
/v2/webhooks/{id} |
একটি ওয়েবহুক মুছুন |
v2-তে, ওয়েবহুকগুলো API-এর মাধ্যমেও প্রোগ্রামেটিক্যালি পরিচালনা করা যায় — এখন আর শুধুমাত্র অ্যাডমিন প্যানেলের মাধ্যমে কনফিগার করার প্রয়োজন নেই।
ওয়েবহুক
ওয়েবহুক ISPBills-কে আপনার বাহ্যিক সিস্টেমে রিয়েল-টাইম ইভেন্ট বিজ্ঞপ্তি পুশ করতে দেয়। API পোলিং করার পরিবর্তে, একটি সাবস্ক্রাইব করা ইভেন্ট ঘটলে আপনার সার্ভার একটি HTTP POST অনুরোধ পায়।
ওয়েবহুক সেটআপ
অ্যাডমিন প্যানেলের মাধ্যমে:
- Integrations → API Management → Webhooks-এ যান।
- Add Webhook Endpoint ক্লিক করুন।
- আপনার সার্ভার এন্ডপয়েন্টের URL লিখুন যা ওয়েবহুক পেলোড গ্রহণ করবে।
- আপনি যে ইভেন্ট সাবস্ক্রাইব করতে চান তা নির্বাচন করুন।
- Save ক্লিক করুন।
API-এর মাধ্যমে (শুধুমাত্র v2):
POST /api/v2/webhooks
Authorization: Bearer v2_YOUR_TOKEN
Content-Type: application/json
{
"url": "https://your-server.example/webhooks/ispbills",
"events": ["customer.created", "payment.received", "bill.generated"],
"active": true
}
ওয়েবহুক ইভেন্ট
| ইভেন্ট | ট্রিগার |
|---|---|
customer.created |
একটি নতুন গ্রাহক নিবন্ধিত হয়েছে |
customer.suspended |
একটি গ্রাহক অ্যাকাউন্ট স্থগিত করা হয়েছে |
customer.activated |
একটি গ্রাহক অ্যাকাউন্ট সক্রিয় বা পুনঃসক্রিয় করা হয়েছে |
payment.received |
একটি পেমেন্ট রেকর্ড বা যাচাই করা হয়েছে |
bill.generated |
একটি নতুন বিল তৈরি হয়েছে |
complaint.created |
একটি নতুন সাপোর্ট অভিযোগ জমা দেওয়া হয়েছে |
ওয়েবহুক পেলোড
প্রতিটি ওয়েবহুক ইভেন্টের ধরন, টাইমস্ট্যাম্প এবং প্রাসঙ্গিক ডেটা সম্বলিত একটি JSON বডি সহ একটি HTTP POST অনুরোধ পাঠায়:
{
"event": "payment.received",
"timestamp": "2026-03-15T10:30:00Z",
"data": {
"customer_id": 1234,
"amount": 500,
"currency": "BDT",
"method": "bkash",
"transaction_id": "TXN-9876"
}
}
ওয়েবহুক স্বাক্ষর যাচাই
প্রতিটি ওয়েবহুক অনুরোধে HMAC-SHA256 স্বাক্ষর সম্বলিত একটি X-Signature হেডার অন্তর্ভুক্ত থাকে। অনুরোধটি ISPBills থেকে এসেছে কিনা নিশ্চিত করতে সবসময় আপনার সার্ভারে এই স্বাক্ষর যাচাই করুন।
যাচাইয়ের পদক্ষেপ:
- কাঁচা অনুরোধ বডি ঠিক যেভাবে পেয়েছেন সেভাবে পড়ুন (পার্স এবং পুনঃসিরিয়ালাইজ করবেন না)।
- আপনার ওয়েবহুক সিক্রেট ব্যবহার করে বডির একটি HMAC-SHA256 হ্যাশ গণনা করুন।
- একটি টাইমিং-সেফ তুলনা ব্যবহার করে গণনাকৃত হ্যাশকে
X-Signature-এর মানের সাথে তুলনা করুন। - স্বাক্ষর মিলে না গেলে অনুরোধ প্রত্যাখ্যান করুন।
সবসময় ওয়েবহুক স্বাক্ষর যাচাই করুন। যাচাই ছাড়া, একজন আক্রমণকারী ওয়েবহুক পেলোড জাল করে আপনার সিস্টেমে অনাকাঙ্ক্ষিত কাজ ট্রিগার করতে পারে।
রেট লিমিট
সুষ্ঠু ব্যবহার এবং প্ল্যাটফর্ম স্থিতিশীলতা নিশ্চিত করতে, API অনুরোধ প্রতি ক্লায়েন্ট রেট-লিমিটেড।
| API সংস্করণ | টিয়ার | প্রতি মিনিটে অনুরোধ | নোট |
|---|---|---|---|
| v1 | স্ট্যান্ডার্ড | 60 | সকল v1 ক্লায়েন্টের জন্য ডিফল্ট |
| v1 | হাই-ভলিউম | 120 | আপগ্রেডের জন্য সাপোর্টে যোগাযোগ করুন |
| v2 | স্ট্যান্ডার্ড | 120 | সকল v2 ক্লায়েন্টের জন্য ডিফল্ট |
| v2 | হাই-ভলিউম | 300 | আপগ্রেডের জন্য সাপোর্টে যোগাযোগ করুন |
রেট লিমিট অতিক্রম হলে, API নিম্নলিখিত হেডার সহ একটি 429 Too Many Requests রেসপন্স ফেরত দেয়:
| হেডার | বিবরণ |
|---|---|
Retry-After |
পরবর্তী অনুরোধ পাঠানোর আগে অপেক্ষার সেকেন্ড |
X-RateLimit-Limit |
বর্তমান উইন্ডোতে সর্বোচ্চ অনুমোদিত অনুরোধ |
X-RateLimit-Remaining |
বর্তমান উইন্ডোতে অবশিষ্ট অনুরোধ |
আপনার ইন্টিগ্রেশন সুন্দরভাবে রেট লিমিট মেনে চলতে ডিজাইন করুন। 429 রেসপন্সে এক্সপোনেনশিয়াল ব্যাক-অফ বাস্তবায়ন করুন এবং ঘন ঘন পরিবর্তন হয় না এমন ডেটা ক্যাশ করুন।
সাহায্য পাওয়া
- API রেসপন্সে
errorঅবজেক্ট পরীক্ষা করুন — এতে কার্যকরী বার্তা এবং প্রতি-ফিল্ড বিবরণ রয়েছে। - অনুরোধ ইতিহাস এবং ডিবাগিংয়ের জন্য অ্যাডমিন প্যানেলে (Integrations → API Management → Logs) API Request Log পর্যালোচনা করুন।
- আপনার ISPBills ইনস্টলেশনে
/docs/api-তে পাঠানো রুট-স্তরের ডকুমেন্টেশন দেখুন। - কাস্টম ইন্টিগ্রেশনে সহায়তা প্রয়োজন হলে বা রেট-লিমিট বৃদ্ধি অনুরোধ করতে ISPBills সাপোর্টে যোগাযোগ করুন।