মূল অংশে যান
বেড কই

হাসপাতালের সফটওয়্যারের জন্য বেড কই API

হাসপাতালের নিজের সফটওয়্যার (HMS) বেড কই-এর সঙ্গে যুক্ত হলে খালি বেডের সংখ্যা নিজে থেকেই হালনাগাদ হয়, আর বেডের অনুরোধ সরাসরি আপনার সফটওয়্যারে পৌঁছায়। এই নির্দেশিকা সফটওয়্যার ডেভেলপারদের জন্য।

এই নির্দেশিকা PDF-এ:বাংলা (PDF)English (PDF)

শুরু করতে

  1. হাসপাতালের অ্যাডমিন বেড কই প্যানেলে ঢুকে “সফটওয়্যার সংযোগ” পাতা থেকে একটি API কী বানান। কী একবারই দেখানো হয়; গোপন রাখুন।
  2. প্রতিটি অনুরোধে কী পাঠান X-Api-Key হেডারে। সব ঠিকানা শুরু হয় এখান থেকে: https://api.bedkoi.com/v1
  3. আগে নিজের হাসপাতালের সুবিধার তালিকা নিন, তারপর সংখ্যা পাঠান।
curl https://api.bedkoi.com/v1/partner/hospital \
  -H "X-Api-Key: bk_live_…"

ঠিকানাগুলো

  • GET/partner/hospitalআপনার হাসপাতাল আর তার সুবিধা: আইডি, ধরন, মোট আর খালি
  • PUT/partner/availabilityখালি বেডের সংখ্যা পাঠান
  • POST/partner/availability/confirmকিছু বদলায়নি: সব সংখ্যা ঠিক আছে
  • GET/partner/bookingsবুকিংয়ের তালিকা (status=PENDING, CONFIRMED, open বা closed)
  • GET/partner/bookings/{id}একটি বুকিং
  • POST/partner/bookings/{id}/confirmবেড রাখুন (holdMinutes: ১৫ থেকে ৭২০, না দিলে ১২০ মিনিট)
  • POST/partner/bookings/{id}/declineফিরিয়ে দিন (reason)
  • POST/partner/bookings/{id}/admitরোগী এসেছেন
  • POST/partner/bookings/{id}/cancelবাতিল করুন (বেড আবার খালি হয়)

সংখ্যা পাঠানো

প্রতিটি সুবিধা চিনুন তার id দিয়ে, অথবা facility (ধরন) আর variant দিয়ে। গোনা যায় এমন সুবিধায় available পাঠান, হ্যাঁ/না সুবিধায় isAvailable। একই সংখ্যা আবার পাঠালেও তা “এইমাত্র দেখা হয়েছে” ধরা হয়, তাই কিছু না বদলালেও অন্তত প্রতি ৩০ মিনিটে একবার পাঠান, নইলে সংখ্যা পুরনো দেখায়। মোট বেড আর দাম প্যানেল থেকে বদলান। dryRun: true দিলে কিছু সেভ না করে দেখায় কী বদলাত।

curl -X PUT https://api.bedkoi.com/v1/partner/availability \
  -H "X-Api-Key: bk_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "items": [
      { "facility": "icu", "available": 3 },
      { "facility": "cabin", "variant": "single-ac", "available": 7 },
      { "facility": "oxygen", "isAvailable": true }
    ]
  }'

সুবিধার ধরন (facility)

  • icuনিবিড় পরিচর্যা কেন্দ্র · সংখ্যা: available
  • ccuহৃদরোগ নিবিড় পরিচর্যা · সংখ্যা: available
  • hduউচ্চ নির্ভরতা ইউনিট · সংখ্যা: available
  • nicuনবজাতক নিবিড় পরিচর্যা · সংখ্যা: available
  • picuশিশু নিবিড় পরিচর্যা · সংখ্যা: available
  • scanuনবজাতক বিশেষ পরিচর্যা · সংখ্যা: available
  • cabinকেবিন · সংখ্যা: available
  • roomরুম · সংখ্যা: available
  • general_wardসাধারণ ওয়ার্ড বেড · সংখ্যা: available
  • isolationআইসোলেশন / ডেঙ্গু ওয়ার্ড · সংখ্যা: available
  • ventilatorভেন্টিলেটর · সংখ্যা: available
  • dialysisডায়ালাইসিস · সংখ্যা: available
  • oxygenঅক্সিজেন সরবরাহ · হ্যাঁ/না: isAvailable
  • blood_bankব্লাড ব্যাংক / প্লাটিলেট · হ্যাঁ/না: isAvailable
  • dengue_testডেঙ্গু পরীক্ষা (NS1 / CBC) · হ্যাঁ/না: isAvailable
  • emergencyজরুরি বিভাগ · হ্যাঁ/না: isAvailable

বুকিং

কোনো পরিবার বেড চাইলে অনুরোধ PENDING থাকে; ৩০ মিনিটের মধ্যে উত্তর না এলে নিজে থেকেই বাতিল হয়। confirm করলে খালি সংখ্যা থেকে একটি কমে আর পরিবারকে SMS যায়।

curl -X POST https://api.bedkoi.com/v1/partner/bookings/<id>/confirm \
  -H "X-Api-Key: bk_live_…" \
  -H "Content-Type: application/json" \
  -d '{ "holdMinutes": 120, "note": "Come to the ICU desk, 3rd floor" }'

বুকিংয়ের খবর (ওয়েবহুক)

প্যানেলে একটি https ঠিকানা দিলে বেড কই প্রতিটি বুকিংয়ের খবর সেখানে POST করে, বুকিংয়ের পুরো তথ্যসহ। ২xx উত্তর না পেলে আরও ৫ বার চেষ্টা করে, প্রায় ১৫ মিনিট ধরে।

খবরের ধরন

  • booking.createdকেউ বেড চেয়েছেন (উত্তর দিন)
  • booking.confirmedবেড রাখা হয়েছে
  • booking.declinedঅনুরোধ ফিরিয়ে দেওয়া হয়েছে
  • booking.admittedরোগী ভর্তি হয়েছেন
  • booking.cancelledবাতিল (পরিবার বা হাসপাতাল)
  • booking.expiredউত্তর আসেনি, বা রাখার সময় পেরিয়ে গেছে
  • pingপ্যানেলের “পরীক্ষা পাঠান”
POST https://your-hms.example.com/bedkoi
X-BedKoi-Event: booking.created
X-BedKoi-Delivery: 01a1…
X-BedKoi-Timestamp: 1760603400
X-BedKoi-Signature: v1=5d41…

{
  "event": "booking.created",
  "occurredAt": "2026-10-16T08:30:00.000Z",
  "by": "family",
  "viaPartner": false,
  "booking": {
    "id": "01a1…",
    "reference": "BK7Q2XD",
    "status": "PENDING",
    "hospitalFacilityId": "01a0…",
    "facility": { "key": "icu", "shortEn": "ICU", "shortBn": "আইসিইউ" },
    "patientName": "…",
    "patientAge": 58,
    "phone": "+8801…",
    "answerBy": "2026-10-16T09:00:00.000Z"
  }
}

সই মিলিয়ে নিন

X-BedKoi-Signature হলো v1= আর HMAC-SHA256(গোপন চাবি, টাইমস্ট্যাম্প + "." + বডি)। টাইমস্ট্যাম্প থাকে X-BedKoi-Timestamp-এ। সই না মিললে বা খবর ৫ মিনিটের বেশি পুরনো হলে ফেলে দিন। একই খবর দুবার আসতে পারে: X-BedKoi-Delivery দিয়ে চিনে নিন।

// Node.js
import { createHmac, timingSafeEqual } from "node:crypto"

function fromBedKoi(rawBody, headers, secret) {
  const ts = headers["x-bedkoi-timestamp"]
  const sent = headers["x-bedkoi-signature"] ?? ""
  if (Math.abs(Date.now() / 1000 - Number(ts)) > 300) return false
  const expected =
    "v1=" + createHmac("sha256", secret).update(ts + "." + rawBody).digest("hex")
  return (
    sent.length === expected.length &&
    timingSafeEqual(Buffer.from(sent), Buffer.from(expected))
  )
}
<?php
$raw = file_get_contents('php://input');
$ts  = $_SERVER['HTTP_X_BEDKOI_TIMESTAMP'] ?? '';
$sig = $_SERVER['HTTP_X_BEDKOI_SIGNATURE'] ?? '';
$expected = 'v1=' . hash_hmac('sha256', $ts . '.' . $raw, getenv('BEDKOI_WEBHOOK_SECRET'));
if (abs(time() - (int) $ts) > 300 || !hash_equals($expected, $sig)) {
    http_response_code(401);
    exit;
}
$event = json_decode($raw, true);
http_response_code(200);

ভুল হলে

  • 400পাঠানো তথ্য ঠিক নয়; বার্তায় কারণ লেখা থাকে।
  • 401কী নেই, ভুল বা বাতিল (api_key_missing, api_key_invalid)।
  • 404আপনার হাসপাতালে এমন বুকিং নেই।
  • 409বুকিং আগেই বদলে গেছে (booking_closed), বা খালি বেড নেই (no_bed)।
  • 429মিনিটে ১২০টির বেশি অনুরোধ; একটু পরে আবার চেষ্টা করুন।

সাহায্য দরকার?

প্রশ্ন থাকলে লিখুন: [email protected]