BFBambooForge Labs

Appointment Booking Suite: Skill-based Routing

Appointment booking with skill-based routing: weighted share, daily and weekly caps, backup members and a visitor preference.

Buy on the Odoo Apps StoreOpen the live demoWebsite€441Community & Enterprise

Available for Odoo 16.0, Odoo 17.0, Odoo 18.0, Odoo 19.0. Technical name bambooforge_booking_routing.

Odoo 16.0Odoo 17.0Odoo 18.0Odoo 19.0
Full walkthrough on a live Odoo 19.0 database, with subtitles. It ends with what this app deliberately does not do.

Appointment Booking Suite: Skill-based Routing

An add-on for BambooForge Booking Pro (17.0). Skills as records, a weighted share of the work, daily and weekly caps, backup members, and a preference the visitor can ask for on the booking page.

What Booking Pro already does

Booking Pro hands a booking to a member in one of three ways: first free member, round robin and least busy. All three treat every member as interchangeable. This add-on is for teams where they are not.

Skills

Booking Pro ▸ Skills. A skill is a record: Colour, English, Paediatric. Give each a short description - it is what the visitor reads when a service exposes it as a preference.

Booking Pro ▸ Staff gains a Skills column. Tick what each member holds.

On a service (Who / what is booked):

  • Required skills - only members who hold every one of them are offered for this service, on the website and by the router. Saving a service whose required skills no member of its team holds is refused: the alternative is a page with no slots and nobody knowing why.

  • Visitor may ask for - the skills the booking page shows as a preference. The visitor picks one or leaves No preference; the slot grid is recomputed for the members who hold it, the staff dropdown hides the others, and the booking records what was asked for.

Weighted share

A fourth assignment mode on the service, Weighted share, with a Share window (days) next to it. Each member has a Weight (staff list, default 1). When the visitor leaves Anyone available, the next booking goes to the free member whose bookings over the window, divided by their weight, is lowest - the person furthest below their share. Part-timers at 1, the senior at 3, the apprentice at 2.

Booking Pro ▸ Routing report shows the team with Target share (from the weights) next to Actual share (from the bookings in the window), so a rota that drifts is seen, not suspected.

Caps

Daily cap and Weekly cap on a member (0 = none) count appointments: a group class with eight seats is one appointment. When a member reaches the cap, the rest of that day - or that week, Monday to Sunday in the member's own timezone - stops being offered for them. Seats in an appointment already on the diary stay open, so a yoga class at its teacher's third-and-last slot of the day still fills.

Backup members

Tick Backup member and the router only hands that member a booking when nobody else is free at that time. The visitor can still choose them by name.

Back office

Caps, skills and weights shape what the website offers. A receptionist placing a booking by hand sees a Skill gap warning when the member lacks what the service requires or the visitor asked for, and can still save. The desk knows things the rules do not.

Technical notes

  • Extends Booking Pro's hooks only: _slot_staff (who is offered), _pick_staff (who is picked) and _busy_intervals (when a member is full). The double-booking lock in booking_submit is untouched.

  • The visitor's preference travels as skill_id on /bf_booking/slots and /bf_booking/submit; the controller accepts only skills the service exposes and ignores the rest.

  • Composes with BambooForge Booking: Multi-location: both filter the staff dropdown by data attributes and both add parameters on the wire.

  • Community only. No Enterprise module, no external service.

Screens

Preference - bambooforge_booking_routing
Preference
Report - bambooforge_booking_routing
Report
Skills - bambooforge_booking_routing
Skills