SMENGO · SHIFT SWAPS
A swap is a request with a decision, not a thread in the group chat
An employee asks for a swap in Telegram. You approve it in one tap — and the shift leaves their schedule that same second and lands on the board in front of matching colleagues. In waves, not all at once.
- Employees cannot drop a shift — only ask for a swap
- Approval removes the shift and opens it in one transaction
- The decision comes back to the same chat
Uncovered shifts in the schedule — the system offers them to matching employees on its own
Swap requests
- From Olga Romanenko·Fri, 3 July · 16:00–00:00Created 1 July 2026RejectApprove
Open
- CancelFri, 3 July·Sales Department·Manager·16:00–00:00
Замена: Olga Romanenko
Created 1 July 2026 · Offers sent: 4 - CancelSat, 4 July·HR·Any position·10:00–18:00Created 30 June 2026 · Offers sent: 6 · Declined: 2
Awaiting approval
- Sun, 5 July·Sales Department·Manager·12:00–20:00Created 29 June 2026 · Offers sent: 5RejectApprove
Claimed by: Alexey Novikov
Closed this month
- ClosedThu, 2 July·Sales Department·Manager·09:00–18:00Created 27 June 2026 · Offers sent: 4
Claimed by: Ivan Melnikov
How it runs
One shift, end to end: from “I can't make it” to a new name in the schedule
Friday, 3 July, 16:00–00:00. Olga is not coming in — here is what happens next.
- 114:05
The employee taps “Request swap”
The bot lists only her own upcoming working shifts, ten at most. Someone else's shift cannot be picked: the list is always refiltered by employee.
- 214:06
The request reaches the manager
The chat says “Request sent to your manager”; a new row appears under “Swap requests”. Asking for the same shift twice does not work — one live request per shift.
- 315:31
The manager taps “Approve”
The shift is deleted from Olga's schedule and immediately becomes an open shift with a note naming the person being replaced. The shift cannot end up removed and not opened: both writes happen in one transaction. Offers go out as the next step.
- 415:31
Wave 1 — the people who wanted it
Offers go to colleagues in the same department and position: first those who marked “I want” for 3 July, then within the wave by hours already booked this month, lowest first.
- 515:44
“Take it” — and the shift is in the schedule
With “Instant claim” on, the first person to tap gets the shift right away; everyone else is told “This shift has been taken”.
- 6+60 min
If nobody answers — wave 2
Once the wave TTL expires (an hour by default, configurable from 5 minutes to a day) the offer goes to the remaining matching employees in the department.
Closing the loop: the person who asked for the swap gets “Swap approved” or “Swap rejected” in the same chat — no separate app, no phone call.
Boundaries
Employees do not drop shifts. They ask.
Only someone with the “Manage shifts” permission changes the schedule. That is a deliberate rule: a swap agreed in a group chat does not change the schedule by itself.
Employee — in Telegram
Asks, accepts, declines
- Ask for a swap on any of their own nearest working shifts (the bot lists up to ten)
- Mark “I want” and “I can't” in the availability calendar
- Claim an open shift with “Take it”
- Skip an offer — that offer closes and the shift stays open for everyone else
Manager — in Smengo
“Manage shifts” permission
- Approve or reject a swap request
- Create an open shift with no request behind it
- Cancel an open shift
- Approve a claimant when “Instant claim” is off
Not a UI convention: without the “Manage shifts” permission the requests are not visible at all — access is closed by database policies, not by a hidden button.
What is inside
Five mechanics a swap is made of
None of them is a roadmap promise — this is how the product behaves today.
The ask arrives as a request, not a message
One tap on “Request swap” in the bot, and the manager gets a row with the name, date and time of the shift. Nothing sinks in the chat, nothing has to be retold.
- Only the employee's own upcoming working shifts, ten at most
- One live request per shift — a duplicate simply is not created
- Until it is decided, the shift stays in the schedule under their name
Approval is one transaction, not two actions
“Approve” removes the shift from the employee and creates the open shift in a single database call. Date, time and shift preset carry over as they are, and the note records who is being replaced.
- The shift cannot end up removed and not opened — both writes happen in one transaction
- The deletion is written to the change log
- If the shift was edited or deleted in the meantime, the request is honestly closed as stale
approve_swap_request()Removing and opening happen in one call: a half-applied state cannot happen. Offers are inserted as the next step.Offers go out in waves, not in a blast
An open shift is not fanned out to everybody. It starts with the people who said they want to work that day and who have fewer hours booked this month. The rest join later.
- Candidates come from the same department and position; leave the position empty and any position qualifies
- Anyone already booked that day or marked as unavailable never enters the list
- Wave 2 fires on the TTL: from 5 minutes to a day, an hour by default
- If nobody marked “I want”, wave 1 takes half the list — but never fewer than three people
Marked “I want” on 3 July, sorted by hours booked this month
If nobody marked “I want” for that date, wave 1 takes half of the matching people — but never fewer than three.
“Instant claim” — or your approval
One switch in the settings decides who has the final word. On: the first person to accept is already in the schedule. Off: the claimant waits for you under “Awaiting approval”.
- First tap wins — the shift row is locked at the moment of the click
- Nobody ends up with two shifts on one day: the second attempt returns a conflict
- A rejected claimant does not block the shift — it goes back to open
The first employee to accept gets the shift right away, without approval.
“Take it” — and the shift is in their schedule; everyone else is told it has been taken.
“Take it” — and the row moves to “Awaiting approval”: the manager has the last word.
No race conditions: the shift is locked at the moment of the click, and the second person is told it is already taken.
The answer comes back to the same chat
The person who asked gets the decision. The person who took the shift gets confirmation that it is already in their schedule. The other candidates learn that it is gone.
- “Swap approved” and the shift is on the board — or “Swap rejected”
- If an offer cannot be delivered, it is marked unreachable instead of hanging silently
- The swap.decided event goes to your webhooks — pull the decision into your own system
Not only swaps
An open shift can be created without any request
Somebody called in sick, a new location opened, the evening was extended — create the shift by hand and it travels the same waves.
- Up to ten identical shifts at once
- Department is required, position is optional: “Any position” widens the candidate pool
- Time comes from your shift presets or is typed in
- The note stays on the shift card on the board — it never reaches the candidate's offer message
- If no matching candidates exist, the form says so instead of pretending it sent anything
No matching candidates found — no offers were sent
The “who can cover me?” chat versus a swap board
The same Friday, two very different endings.
Agreements live in someone's head
Agreements live in the schedule
Outward: every decision leaves as a swap.decided webhook event — with the request id, the employee, the shift date and the decision itself.
Swaps are a link in the chain, not a separate service
Schedule, bot and board run on the same data: availability comes from the employee's calendar, hours from the timesheet, and the decision goes back to the chat.
Hiring
A board from applied to hired, AI resume screening, 5 interview questions.
Learn moreEmployee database
Contacts behind a permission, documents with a 30-day badge, 100% history.
Learn moreOnboarding & training
An AI plan of 4–8 stages, at-risk deadlines, 3–5 question quizzes.
Learn moreShift schedule
A month on one screen, 4 labour norms, AI generator, demand forecast.
Learn moreTelegram bot
One-tap check-ins, 28-day availability, swaps, a calendar subscription.
Learn moreYou are hereShift swaps
An approved swap becomes an open shift on its own; conflicts are blocked.
Learn moreHR dashboard & timesheet
Hours from check-ins, XLSX/CSV in one click, 5 risk detectors, what-if.
Learn morerisks and coverage feed the next schedule ⟲risks and coverage feed the next scheduleCommon questions about shift swaps
No. The bot only offers “Request swap”, which creates a request. The schedule changes when a manager with the “Manage shifts” permission decides.
It stays in the schedule under the employee's name. Until “Approve” is tapped, nothing changes for anyone else.
Employees from the same department with a matching position. Wave 1 is the people who marked “I want” for that date, sorted by hours already booked this month. Wave 2 fires after the TTL, an hour by default.
Yes, with “Instant claim” on: the first person to tap “Take it” gets the shift in their schedule immediately. Turn the switch off and every claimant waits for your decision.
They never enter the candidate list, and a claim through any other path returns a conflict: nobody ends up with two shifts on one day.
No. Everything an employee needs happens in the Telegram bot behind a single invite link; the web interface is for managers.
Yes. Each decision is delivered as a signed swap.decided event to your HTTPS endpoint; the payload carries the request id, the employee, the shift date and the decision.
Let swaps live in the schedule, not in the group chat
Connect the team to the bot and open the board — the next “cover me?” will reach you as a request with two buttons instead of a message at one in the morning.