Apr 2026 · Project

The Loading Dock
Booth Bot

Another way to book phone booths at The Loading Dock. Send a message in Telegram, and the bot checks availability and handles the reservation.

You can already book phone booths through the OfficeRnD website. That works fine. The bot is another way to do the same thing, just from Telegram instead of a browser. If you’re already in a chat and need a booth in the next hour, you can type a quick message instead of switching to the web portal.

OfficeRnD website

Log in, navigate to the calendar, find an open slot, fill out the form. The full booking system with all its options.

Telegram bot

“Book me a booth at 2pm.” A quicker path for the most common requests, right from your phone.


What it looks like

The bot lives in Telegram. You talk to it the same way you’d text a friend.

You
Book me a booth tomorrow at 2pm
Bot
Booked! You’ve got Phone Booth 3 at Dock 1053 tomorrow from 2:00 PM to 2:30 PM.

Reference: BK-4829
You
Actually, make it an hour
Bot
I’ve cancelled the 30-minute booking and rebooked for a full hour. Phone Booth 3, 2:00 PM to 3:00 PM.

Reference: BK-4831

You don’t need to remember special commands or exact booth names. The bot understands “tomorrow,” “next Tuesday,” “for an hour,” “at the Beryl location,” and other natural phrasing. If something is unclear, it asks.


What happens behind the scenes

When you send a message, the bot passes it to Claude, an AI assistant made by Anthropic. Claude reads your message, decides what needs to happen, and tells the bot which actions to take. The bot carries out those actions against OfficeRnD (the booking system The Loading Dock uses), then Claude writes a response based on the results.

You Telegram Bot Reads & routes Claude AI Thinks & decides OfficeRnD Books & cancels message response

This all happens in a few seconds. Claude can also check availability before booking, or ask you a follow-up question if it needs more information. It handles the conversation the way a helpful front-desk person would.


How the AI decides what to do

Claude has access to four specific actions. When you send a message, it reads what you wrote and picks the right action (or combination of actions) to handle your request.

Book a booth

Reserves a phone booth at a specific location, date, and time. Checks what’s open first, picks an available booth, and gives you a confirmation with a reference code.

Check availability

Looks up which booths are free at a given time. Useful when you want to see your options before committing.

List your bookings

Shows your upcoming reservations across all locations. Handy for checking what you have on the books.

Cancel a booking

Cancels a reservation using its reference code. The bot double-checks that the cancellation went through before confirming.

Claude picks these actions on its own based on your message. If you say “anything open at 3?”, it checks availability. If you say “book me a booth at 3,” it might check availability first to find an open booth, then make the booking. If something goes wrong, it can explain the problem or try a different approach.


Locations and defaults

The Loading Dock has three locations. The bot can book booths at any of them. Just mention the location name in your message.

Dock 1053

1053 E Whitaker Mill Rd. The default if you don’t specify.

Beryl

Mention “Beryl” in your message to book here.

Wake Forest

Mention “Wake Forest” to book here.

SettingDefaultOptions
LocationDock 1053Dock 1053, Beryl, or Wake Forest
Duration30 minutes30, 60, or 90 minutes
Booking windowTodayUp to 30 days out
TimezoneEasternEastern only

The defaults are set so that the most common request (“book me a booth at 2”) works without extra detail. You can always override: “Book a booth at Beryl tomorrow at 10am for an hour.”


How availability works

When the bot checks availability, it looks at all four booths at the location you picked. For each booth, it checks whether someone already has it reserved during the time you want. Any booth with a conflicting booking is taken off the list. What’s left is what you can book.

Dock 1053, Tuesday 2:00 PM – 2:30 PM Booth 1 Reserved 1:30 – 3:00 Booth 2 Open Booth 3 Reserved 2:30 – 4:00 Booth 4 Open 1:00 PM 2:00 PM 3:00 PM 4:00 PM Your slot

In this example, Booths 2 and 4 are open for your time slot. The bot picks one and books it. If nothing is available, it tells you and can suggest a different time.


Getting started

Setting up your account

Before you can book, the bot needs to connect to your OfficeRnD account. This is a one-time setup that takes about a minute.

Type
/registerStart setup
Enter your
emailOfficeRnD email
Enter your
passwordAuto-deleted
Bot verifies
loginTests it works
You’re
all setStart booking

When you type your password, the bot deletes your message right away so it doesn’t sit in the chat. Your credentials are encrypted before they’re stored, so even if someone looked at the database, they’d see scrambled text, not your actual password.

If you ever want to disconnect your account, type /unregister and the bot removes all your stored data.


Things you can say

The bot understands natural language. You don’t need to memorize specific phrases. Here are some examples that all work:

What you wantWhat you can say
Book a booth“Book me a booth at 2pm” · “I need a booth tomorrow at 10” · “Reserve a phone booth for an hour at 3”
Check availability“What’s open at 2?” · “Any booths free tomorrow afternoon?” · “Is there anything at Beryl at 11?”
See your bookings“What do I have booked?” · “Show me my reservations” · “Do I have anything tomorrow?”
Cancel“Cancel BK-4829” · “Cancel my 2pm booking” · “I don’t need the booth anymore”
Start over“Reset” · “Start over” · “New conversation” · Type /new

If the bot doesn’t understand something, it asks for clarification rather than guessing wrong.


How the bot avoids mistakes

AI can sometimes get confused and tell you something happened when it didn’t. The bot has specific checks built in to prevent this.

SituationWhat happens
Bot says “booked!” but didn’t actually bookA safety check catches this and forces the bot to try again properly. You won’t see a confirmation unless the booking went through.
Bot says “cancelled!” but didn’t actually cancelSame check. The bot also double-checks the booking list after every cancellation to make sure it’s gone.
Your OfficeRnD session expiresThe bot notices, logs you back in automatically, and retries what it was doing. You don’t see any of this.
A cancelled booking shows up as “taken”The bot filters out cancelled reservations so they don’t block your time slot.
You ask for a 15-minute bookingThe minimum is 30 minutes (OfficeRnD’s limit), so the bot bumps it up and lets you know.

Your data

The bot stores three things about you:

Your OfficeRnD login

Your email and password, encrypted. Even the person who built the bot can’t read them from the database. Used only to sign into OfficeRnD on your behalf.

Your active session

A temporary token so the bot doesn’t need to log in fresh every time you make a request. Expires on its own.

Recent conversation

The last few messages so the bot can follow context (“actually, make it an hour” only works if it remembers what “it” refers to). Cleared when you type /new.

Nothing else

No browsing history, no personal data beyond what’s listed here. Type /unregister to delete everything.


Quick reference

CommandWhat it does
/startWelcome message and instructions
/helpShows what the bot can do
/registerConnect your OfficeRnD account (one-time)
/unregisterRemove your account and all stored data
/newClear the conversation and start fresh
/statusCheck how many messages are in the current session

You don’t need any of these commands for day-to-day use. Just type what you need and the bot handles it.


How it’s built

For anyone curious about the technical side: the bot is a small Python program that runs 24/7 on Fly.io’s free tier. It uses Telegram to talk to you and Claude AI to understand your requests. It connects to OfficeRnD the same way you do when you log into the website, just faster.

Telegram Messaging platform
Claude AI that reads your messages
OfficeRnD Booking system

The same framework that powers this bot could be adapted for other tasks at The Loading Dock. Anything that currently requires logging into a portal and clicking through a form is a candidate. The AI handles the conversation; you just define what actions are available.

Technical details

The bot is built on a general-purpose framework for making single-purpose Telegram bots backed by Claude. The entire codebase is six Python files.

FRAMEWORK (REUSABLE) main.py Message router claude.py AI tool loop db.py Storage security.py Encryption config.py Settings ABILITY (LOADING DOCK-SPECIFIC) tools.py 4 booking actions + AI instructions client.py OfficeRnD HTTP connection

The warm-toned layer is the framework. It handles Telegram messaging, the AI conversation loop, data storage, and encryption. This part is generic and could power any bot.

The blue layer is the Loading Dock ability. It defines the four booking actions and knows how to talk to OfficeRnD. Swap this layer for a different one and you have a different bot.

The AI loop: When you send a message, the framework passes it to Claude along with your recent conversation history. Claude reads the message, decides which action to take, and tells the framework to execute it. The framework runs the action against OfficeRnD, sends the result back to Claude, and Claude writes a response. If Claude needs multiple steps (check availability, then book), it loops through this cycle until it’s done.

Storage: User data lives in a Supabase database (a hosted PostgreSQL service). Credentials are encrypted with Fernet symmetric encryption before they’re written. Conversation history is stored as JSON on your user record and trimmed to the most recent 8 exchanges.

Hosting: The bot runs on Fly.io’s free tier as a single always-on process in Virginia. It polls Telegram for new messages rather than waiting for incoming connections, which keeps the setup simple.