Phone System
The Phone System gives your workspace real business numbers with extensions, voicemail, call flows and an in-browser softphone - searched, bought and managed without leaving the app. It builds on Voice & calls (outbound dialing) and will grow into IVR menus and queues.
- Get a number - owners and admins search available local or toll-free numbers (by area code or city), see the monthly price up front, and buy in one click. The number is live immediately with a default call flow: ring, then take a voicemail. You can also add a number you already own elsewhere (BYO).
- Call from your browser - on the Calls tab, turn on the Softphone: a real dialer with a keypad and a number display. Type a number and press Call. Your workspace number is the caller ID, the call is checked against your caps and the do-not-call list before it rings, and Hang up works at every stage - while it is connecting you, while it is ringing, and once you are talking - so a call in flight can always be stopped. In-call you can mute and send keypad tones. Available on workspaces using a WorkBOS number; the microphone permission is asked for by your browser the first time.
- Numbers in other countries - the country picker lists everywhere the carrier sells, and says what each one costs you in paperwork before you choose. Where a number is issued instantly you buy it from the search as usual. Where the regulator wants a registered local address or an identity document first, you get a request instead of a Buy button: start it, fill in the address, attach what they ask for, and submit. We carry the packet to the carrier and the status moves from With WorkBOS to With the carrier to Approved, on your Numbers tab. You are not charged for anything until the number is live, and if it is refused you get the reason. Where the carrier simply has no inventory in a country, connect a number you already hold with a local carrier and it works today.
- Call a teammate - from the Contacts directory or a record, Call reaches a teammate the same way any other call does: it rings their forwarding number over the phone network. A free, browser-to-browser way to reach a signed-in teammate directly, without touching the phone network, is built and in internal testing; it is not yet available to customers.
- Answer calls in your browser - turn on the Softphone and it registers as reachable. When a customer calls your number, your browser rings, shows their number (and their name if they match a lead or client), and you answer or decline in the app. You do NOT need to create an extension first: any workspace with the dialer open and heartbeating is rung directly. Extensions refine which browser rings when you have several people; they are not a prerequisite. If your browser is closed, or nobody has the dialer on, the call forwards to your mobile and then voicemail exactly as before.
- Transfer a live call - while you are on a softphone call, press Transfer, then pick a teammate (it rings the forwarding number on their extension) or type any number. The person you are talking to is connected to them and you drop off. A transfer is checked against your caps, the kill switch and the do-not-call list, the same as placing a call, and only the person on the call or an owner or admin can transfer it.
- The contacts directory is a real table - leads, clients, CRM contacts and teammates in one list with a column each for company, job title, status, email, owner, extension and the date they were added, plus a count of any other numbers the person owns. Pick your columns, sort, group by kind, page through it and export to CSV. Beside the dialer it stays the compact two-line list, because there the job is to find somebody and press Call.
- Your numbers, on cards that say what each one is - the number itself, whether it can take calls, send texts or both, which call flow answers it, which extensions ring from it, the voicemail box it drops into, the carrier, the monthly rental, what has been charged for it this period and how long you have had it. The default sending number is marked, and any number can be copied with one click.
- Click to call from a record - every lead and client record, and the client list, has a Call button that opens the softphone with the number already filled in, so you place the call from the CRM where the context is. The number is never put in the address bar.
- Always reachable - once you have used the dialer it reconnects by itself on every load, and comes back when your tab wakes or the network returns; you do not have to switch it on each time. A new workspace is reachable by default, and an explicit power-off is remembered. Incoming calls ring out loud and also raise a desktop notification, so a call does not go unnoticed while you are working in another tab.
- A dialer you can move and tune - the floating softphone drags anywhere (grab its header or the Available pill) and remembers the spot per browser. Its Settings hold your availability, your caller ID, your ringtone (Classic ring, Digital beeps, Soft chime, or Silent - incoming calls actually ring out loud) and shortcuts to voicemail greetings and your numbers. Both keypads validate as you type and hold 0 to type +, like a mobile phone.
- Choose the number you call from - workspaces holding several numbers get a Call from picker on the dial pad and the dock. The choice is validated on the server against the numbers the workspace actually owns, so the caller ID a customer sees is always yours.
- Social publishing, connected properly - connecting a social account, publishing, refreshing tokens and pulling content sources all run server-side on your behalf. If you connected an account before 13 August 2026 and it never seemed to do anything, reconnect it: the server side of that module was repaired in v1.110.0.
- Delivery receipts on texts - an outbound message shows a clock while it is sending, one tick when your carrier has it, two ticks when it reaches the handset, and a red mark with the reason if it fails. This works on whichever provider your workspace uses: Telnyx, Twilio and Plivo all report delivery differently and WorkBOS normalises them into the same four states. Carriers report DELIVERY, never whether a person read the message, so a text never turns blue - that is a limit of SMS itself, not of WorkBOS, and it becomes available on channels that do support read receipts.
- Messages arrive live - inbound texts and delivery ticks appear in the thread as they happen rather than on a refresh timer, and opening a conversation marks it read so the unread badge is accurate.
- Contacts - one directory on the Phone page of everyone you can call or text: leads, clients, CRM contacts and teammates (with their extensions), searchable by name, company, email, number or extension. Call rings them through the dialer; Text opens the message composer with the number already filled in. Names link to the full record - the directory reads the same records their own pages use, so nothing is copied and nothing goes stale.
- Remarks, assignees and next actions - open Remarks on any call (in the log, or right after a softphone call) to record what happened, all on one screen. Assign teammates from a searchable dropdown - each selected person shows as a chip you can remove, and each one is notified. Then pick a next action: type into the suggestions box and choose Follow-up call, Send a proposal, Send an agreement, Send a message, Send an email, Schedule a meeting, Set a reminder / recall, or Create a task. Picking one creates a real task in Tasks, assigned to the people you chose (or to you if you chose nobody), with an optional due date, the call’s details (who, which number, when) in the description, and a link to the screen where that action starts - the proposal composer, contracts, the message composer or the booking page. This is how a call turns into the next action instead of being forgotten. The Automations entry there links to your rules engine; calls are not an automation trigger yet and it says so rather than pretending.
- Every call is logged - the call log records every call through your numbers whatever the outcome: connected, canceled, no answer, busy or failed, inbound and outbound, each searchable and exportable. A call that never connected is still a record you can add a remark to.
- Extensions - give each teammate a short dial code (e.g. 101), an optional direct number, do-not-disturb, and up to five follow-me destinations that ring in order.
- Is my phone working? - a status line sits under the page title and answers it in one word: Live, Setting up, Needs attention, or Error. Beside it is the single most important reason, and every state links straight to the control that fixes it, so you are never told something is wrong without being shown where to go. It reads the same checks as the System check panel below, so the summary and the detail can never disagree.
- Setup happens by itself - buying a number now finishes its own carrier setup: the messaging profile, the call-control application, the outbound voice profile and the webhook wiring are all provisioned as part of the purchase, and anything that fails is retried in the background. You are only ever asked to do something by hand when the carrier itself refuses, and then you are told the carrier’s own reason rather than a generic prompt.
- Numbers in other countries - search and buy in any country we serve, not only the United States. Because the rules differ by country, the picker tells you BEFORE you choose: whether that country requires a registered address or an identity document, and whether its numbers can carry texts as well as calls. A country that can receive texts but not send them says so, rather than letting you discover it at send time.
- Find any call - the call log filters your whole history rather than the most recent page: by which of your numbers was used, who the other party was (number or name), by Today, this week, 30, 60 or 90 days or a custom range, by outcome (connected, no answer, went to voicemail, cancelled, failed), by direction, and by how long the call lasted. Filters live in the address, so a filtered view can be bookmarked or sent to a colleague. Every row carries actions: redial on the same number it originally used, send a message, add a note, or assign a follow-up.
- Call flow has its own tab - the call-flow (IVR) builder sits under Setup on the Phone page as its own Call flow tab, as well as under Settings ▸ Call flow (both doors open the same editor). Build what happens to an incoming call step by step - greetings, a key-press menu, opening-hours routing, ring groups (teams that ring together or in turn) and routing by who is calling - and point your numbers at it. Until you build one, every call simply rings your phones and then takes a message.
- System check has its own tab - the panel that tells you whether calls, texts, voicemail, recording and transcription are all working now sits under Setup rather than below the activity feed, so the one screen that explains a fault is not the hardest one to reach.
- A call task takes you to the person - when a next action is filed from a call, the task now opens with a button to the matched lead, client or contact record, where the whole history lives, and every link in a task description is clickable. The assignee is brought to the thing, not handed an address to retype.
- The dialer has its own tab, and stays on - the Dialer tab holds the softphone and the keypad, so the Activity list gets the full width for your call history. The softphone is on by default and comes back on every time you open the app: turning it off quiets it for that tab only, never permanently, because a business phone that stops taking calls over something you clicked yesterday is not a phone.
- Filters that look like filters - the call history filters are chips you click, each showing its current value and carrying its own clear. Every call row shows its actions inline - redial, send a message, add a note, assign a follow-up - rather than hiding them behind a menu.
- Filter Activity by what it was - the Activity feed mixes calls, texts and voicemail, and a Kind chip now narrows it to any one of them: All activity, Calls, Messages or Voicemail. It searches your WHOLE history of all three, not just the rows on screen, and the count under the chips is the number of matches across everything, so a page of forty can never look like the whole story. The chip sits in the address with the others, so a filtered feed can be bookmarked or sent to a colleague. Two of the chips only make sense for a phone call, and the feed says so instead of quietly dropping things: an Outcome (connected, no answer, went to voicemail, cancelled, failed) can only describe a call, and a Length can only describe recorded audio, so while either is set the feed tells you which kinds it has left out - and if you pick Messages, those two chips grey out with the reason rather than pretending to work. You are only offered the kinds your workspace actually has: no Messages chip without texting, no Voicemail chip without the phone system.
- Search inside your messages - the Messages tab has a search box that looks at the TEXT of every message you have ever sent or received, not just the phone numbers in the conversation list. Type at least three characters and each result shows the conversation, the date, and the matching sentence with your words highlighted inside it, so you can tell at a glance which one you wanted. It matches part-words and part-references too, so "2231" finds "INV-2231-A". Click a result and the conversation opens at that exact message, ringed and scrolled into view, even if it was months ago and long past the messages already on screen. The count above the results is every match across all your conversations, so "25 shown" never has to be mistaken for "25 exist".
- The activity log reads two ways - Feed or Table, switched at the top right and remembered for your browser. Feed is the glance: who, what channel, how long, when. Table is the log: which of your numbers it came in on, who placed it, what it cost, whether anyone has looked at it yet, the recording, the AI notes, what the text actually said, the channel, and the carrier’s own reference for when you need to raise a ticket. Choose your own columns, sort them, group by kind, and export the lot to CSV.
- The System check keeps a record now. Anything failing becomes an incident: it says how long it has been going on and how many times it has been seen, an owner or admin can say "I am on it", quiet it for a day, or mark it resolved with a note saying what they actually did, and it closes itself if the check goes green - recorded as "stopped happening" rather than as "somebody fixed it", because those are different things. Every step is kept, so History on any row tells you who took it on, who resolved it, when, and what they wrote. If the same thing breaks again after being resolved, the record says it came back and shows you what was claimed last time, which is usually the fastest way to see that a fix did not hold.
- Row actions are always on screen - Redial, Send a message, Add a note and Assign a follow-up sit on every row of the call log and the activity feed at rest, in a quiet grey that brightens as you move over the row. They used to appear only when you hovered a row, which meant nobody found them unless they already knew they were there.
- It stays connected - the softphone holds one connection to the carrier and only one. If the connection drops (a laptop lid, a train tunnel, a login that expired overnight) it tells you it is reconnecting and does it, backing off if the network is genuinely down, and the Reconnect button always works even if a previous attempt never got an answer. If you open WorkBOS in a second tab, the newest tab asks before taking the phone rather than both tabs fighting over it.
- A dialer that behaves like a phone - the softphone sits inside the Phone page as a column while you are there and detaches into a floating dock the moment you navigate away, so a call survives moving around the workspace without a card hovering over the page you came to read. Outbound calls now show Calling, then Ringing, with a ringback tone, and only start the clock when the other end actually answers. When a call cannot connect the reason is spoken aloud as well as shown, the way a phone network does - and choosing the Silent ringtone silences that too.
- Decide whether the dialer follows you around - open the softphone’s Settings and turn "Float over other pages" off, and the dialer stops appearing on every screen; it waits for you on Phone, Dialer instead. You stay just as reachable either way: turning it off does not disconnect anything and does not stop incoming calls. It never hides a call, either - while you are on one, or while one is coming in, the controls are on screen wherever you are, so you can always answer or hang up. Turn it back on in the same place. The choice is remembered per browser.
- The tucked-away dialer is a phone icon with a status dot - collapsed, the softphone now shows a handset with a small coloured dot instead of the word "Available". Green means you are reachable and calls will ring here, amber means do not disturb, and grey or red means it is off or has lost its connection. Hover it - or read it with a screen reader - and it says the state in words. Click it to open the dialer.
- Do not disturb - in the softphone’s Settings, Do not disturb keeps you connected and stops your browser ringing. You can still place calls; incoming ones go to your forwarding number or voicemail instead, exactly as if you had closed the tab. It takes effect within about a minute and a half, and any call that arrives before then is declined rather than ringing you. It is not the same as turning the softphone off - your connection stays up, and one click brings ringing back. Like the power switch it lasts for this browser tab only, so opening the app tomorrow finds you reachable again and a phone can never stop taking calls because of something you clicked yesterday. To switch a teammate’s line off for longer, an owner or admin sets do-not-disturb on their extension under Numbers, which also stops calls forwarding to their mobile.
- The dialer and your contacts, side by side - the Dialer tab now shows the keypad on the left and your directory on the right: search, and everyone this workspace can call - leads, clients, CRM contacts and teammates with their extensions. Click a person and their number drops into the keypad; press Call and you are dialling. Click their name instead and you open their record. On a phone or a narrow window the two stack, dialer first. There is still exactly one dialer on the page: the directory loads numbers into the softphone, it never becomes a second one.
- System check - the Phone overview carries a live health panel that tests the whole path: your numbers, whether this browser is actually reachable, whether incoming texts and calls are arriving, whether delivery reports are coming back, whether voicemail is capturing audio, whether transcription is running, and how many seconds a recording actually takes to land. When something is wrong it says why in plain language - including the reason an incoming text was refused and the reason a transcript could not be produced - so a red line there is a sentence you can send straight to support. It also separates a problem you must fix (an AI account out of credits) from one that fixes itself (a transcription retrying), because an alert that asks for action when none is needed teaches people to ignore alerts.
- Build your call flow - Settings, Call flow is where you decide what happens to an incoming call, step by step. Each step reads as a sentence in the order a caller experiences it: say a greeting, check your opening hours, ring a team, ask the caller to press a key, or take a message. Every branch names another step in plain English, so you can read the whole thing back like a paragraph instead of untangling boxes and arrows. Nothing can be saved until every path ends somewhere a message can be left - a step no caller can reach, or a menu somebody could go round forever in, is refused with the reason, next to the step that causes it.
- Ask the caller to press a key - a menu step plays your message ("press 1 for sales, press 2 for support") and sends each key wherever you choose. You also set where a caller goes if they press nothing, and if they press a key you have not offered, so nobody is left listening to silence. This listens for KEY PRESSES only. Routing on what a caller says out loud is not built: it needs speech recognition, and a menu that mishears "sales" as "service" sends a customer to the wrong department while appearing to work, which is worse than not offering it at all.
- Ring a team, not just one phone - a team (Settings, Call flow) rings several people for the same call. You choose four things: whether everybody rings at once or one after another; how many seconds each person gets when they ring in turn; how many seconds the whole team rings before the caller goes to voicemail; and WHICH voicemail box catches it. That last one is chosen, never inherited, so a message for Sales lands in the Sales box rather than wherever the number happens to point. Members can be teammates - rung on the numbers saved against their extension, so the team stays right when somebody changes phone - or outside numbers such as an answering service. The screen tells you how many phones would actually ring right now: somebody on do not disturb, or with no follow-me number saved, is in the team and will not ring, and that is worth knowing before a customer finds out.
- Nobody answering is a decision, not an accident - when a team or a forward is not picked up, the call goes wherever you pointed it, and if you pointed it nowhere it goes to voicemail. The same holds for every failure: a number that cannot be reached, a greeting that will not play, a menu that cannot be heard. A caller can always leave a message; they are never left on a line that has simply gone quiet. If the caller hangs up while your team is still ringing, every phone stops immediately rather than ringing on for somebody who has already gone.
- Route on who is calling - a caller-criteria step sends calls different ways depending on the number calling you: a country, a state or region, one area code or a list of them, one specific number, or whether the caller is already someone in your CRM as against somebody you have never spoken to. Rules are checked top to bottom, the first match wins, and you always say where everyone else goes. Where a caller is calling from is worked out on our servers from their number, so it cannot be faked by anything sent to us. Toll-free callers are matched by country only - a freephone number has no geography, and inventing one would route somebody confidently wrong.
- Follow-me rings all of them - the numbers on an extension ring in the order you listed them, not just the first. Your browser rings first when the dialer is open, then each number in turn, then voicemail.
- Voicemail - every workspace gets a Main voicemail box; add personal or team boxes, set who gets an email copy, and read transcripts right in the list. Mark messages heard or delete them (admins). A call flow step or a team can name a specific box, and the message lands there with that box's own greeting played to the caller.
- One bill for everything - Settings, Billing has two tabs. Plan is what you signed up for: tier, seats, payment. Usage and bill is what you have actually consumed this month across every module, added to the plan fee, itemised by charge with the quantity, the rate and the amount. A month that has closed says so, and its figures stop moving. If a supplier sends us a cost for a month that has already closed we never bill it again, and the difference is shown rather than quietly absorbed.
- Billing - the Billing tab shows what this month has cost so far, itemised: number rental, inbound and outbound minutes, texts sent and received, and transcription, each with the quantity, the rate and the amount. Numbers are listed separately so you can see which of them you are paying for. Past months stay readable from the month picker rather than disappearing on the first. Rental is charged for the whole month and is never split by the day in either direction, which is how the carrier bills us: buy a number on the 30th and that month is charged, release one and the month already charged for stays charged.
- Spending controls - two ceilings, because they answer different questions. A monthly SPEND limit covers everything on the bill and refuses outbound calls and texts once it is reached; a number rental budget caps the total monthly rental of the numbers you hold and is checked when you buy one. Both are blank by default, meaning no limit, and both live under Settings, Limits. You are warned at 80, 90 and 100 percent of the spend limit, and phone spend also appears on Cost limits beside email, SMS and AI agents.
- Test it - admins can simulate an inbound call to prove routing and voicemail capture end to end before any carrier is connected.
- Play, download or share a voicemail - open any voicemail to hear it in the browser, download a copy, or copy a link to send to a colleague. The link is time-limited on purpose: a voicemail is a customer's recorded voice, so a forwarded link stops working rather than living forever.
- Voicemail transcripts - BUILT, AND NOT YET PROVEN IN PRODUCTION: the pipeline described here has not produced a transcript from a real call yet, so treat everything in this paragraph as how it is designed to work rather than as something you should count on this week. When transcription is switched on and the platform AI account has credit, a message left on your number is transcribed once its audio is stored, so you can read a voicemail instead of listening to it and search across them like any other text. Transcription follows each mailbox's own setting, so a box with it switched off stays untranscribed. When a transcript is missing the list tells you which kind of missing it is: "Transcribing..." while it runs, "Retrying..." after a temporary hiccup, or the actual reason when it is blocked - most often that your AI account has run out of credits, which you can fix yourself in a minute. A temporary failure comes back on its own with a widening delay; a permanent one (no credits, a rejected key) stops after the first attempt rather than retrying an unfixable problem on a schedule.
- How fast a message arrives - the moment a caller hangs up, the recording is pulled into your workspace and queued for transcription immediately, not on a timer. Copying the audio takes a couple of seconds, and System check reports the average and worst time measured over the last week, so "this is fast" is something you can verify rather than something we claim. Scheduled sweeps still run behind that as a safety net, so a message can be late but cannot be lost.
- Voicemail follow-through - each box can email copies (with the transcript) to up to five addresses, the box owner gets an in-app notification, callers are matched to your CRM (clients, contacts, leads) by phone number, and voicemail.received / call.missed events can trigger your automations.
- Greetings in your own voice - record a greeting straight from the browser (hold Record and talk, up to two minutes) or upload an audio file you already have, and callers hear you instead of a synthesised voice. Recordings are private to your workspace and are handed to the carrier as a short-lived link, never a public one. The written greeting stays as a fallback, so if a recording ever cannot be played the caller hears the text rather than silence.
- Greetings - owners and admins open the Voicemail greetings card to write what callers hear before the beep (up to 600 characters). Leave it empty and the standard greeting is used. Editing a greeting changes only the greeting: the box name, owner and email copies are left alone.
- Call log - every call through your numbers is listed with direction, outcome and duration, searchable and exportable like any other list, with a Play button on calls that were recorded and each caller labelled with the matching client, contact or lead. The list is a page: it shows the 50 most recent of your total, with Load more for the last 200.
- Settings in panels - the phone Settings tab is a set of small screens rather than one long scroll: Carrier, Business hours, Limits & spend, Ringtones, Greetings, Team & extensions, and a read-only Call flow that spells out what actually happens to an incoming call and which panel changes each step. Every panel has its own address (?tab=settings&sub=hours), so a section can be bookmarked or sent to a colleague, and a panel shows a small marker when something in it wants a look: carrier setup unfinished, hours switched off, no spend limit, nobody with an extension, no greeting written, or a ringtone set to silent.
- Business hours - tell the system when you are open, in your own timezone, with holidays or half days that override the weekly pattern. Outside your hours a caller is not put through to anybody: they go straight to voicemail and hear the closed-hours message you wrote instead of the standard one. A window that ends before it starts (10pm to 2am) is a night shift, not a mistake. Hours are off until you turn them on, and a schedule the server cannot read is treated as open, never as closed. Takes effect on calls to your numbers, so it needs your carrier connection to be live.
- Greetings library - write the messages callers hear once, name them, choose a voice and a language, and reuse them. Today a greeting is used as your closed-hours message; the call-flow builder will let you place them anywhere in a flow. Up to 50 per workspace, 600 characters each.
- Call recording - off by default. When you turn it on, callers are told the call is being recorded before it starts (the server will not let you have recording on with the announcement off), a private copy of the audio is kept in your workspace instead of being linked from the carrier, and that copy is deleted after the number of days you choose. Needs your carrier connection to be live.
Security: prices are computed on the server from the platform rate card - never from the browser. Purchasing is human-initiated only, rate-limited, and gated by a platform kill switch plus per-workspace caps. All phone data is organization-scoped and staff-gated.
Recordings are private. A recording is never handed out as a permanent link: the audio sits in a private store only your workspace can reach, and playing it mints a signed link that stops working after two minutes. Guests in your client portal cannot reach recordings at all, exports carry no link, and when a recording passes your retention window the copy we hold is deleted, not just hidden.
Permissions: the Phone page's create / edit / delete switches (Settings ▸ Users ▸ Roles) govern the phone writes - numbers, extensions, voicemail boxes, greetings, voicemail status, spending limits and the inbound-call simulator. Because a workspace has one number inventory, adding or releasing a number from Communication ▸ Calls is governed by the same Phone switches, so revoke it in one place and it holds everywhere.