Amazon Connect Quota Visibility

Not being able to see what your applied quota settings were has been a huge sore spot with Connect. We’ve resorted to keeping track of quotas on a spreadsheet and having AWS support provide updated numbers every 6 months. However, this is not scalable and generally a pain. I was very please when the following announcement was made, which states:

You can now view applied quota values for resources within each of your Amazon Connect instances using AWS Service Quotas. …

I immediately went to one of our Connect instances and was very disappointed at first. Because, the way AWS decided to present the applied quota as it’s not obvious. If you go to the Service Quotas > AWS Services> Amazon Connect. You see all applicable quotas for Connect. In this case let’s focus on Quick Connects. Notice that the “Applied quota value” is still the default.

Amazon Connect Service Quotas

Amazon Connect Service Quotas

If you click on the actual quota. You will still see the default at the top, but at the bottom right you’ll see the true applied number.

Quick Connects Per Instance Service Quota

Quick Connects Per Instance Service Quota

I’m happy this is here, but I wish AWS would just go the extra mile and not require us to click on the actual quote to see the true number. I’ve not validated this via the CLI, but I am hopeful it’s more obvious there.


Read Only Script Editor Access in PCCE

This question came up this past week and I had a nagging suspicion it wasn’t the case and spent some time trying to get it to work. In the good old days of UCCE Config Manager had the Feature Control set capability which allowed users to have a limited view to the ICM Script Editor. This was great for those type of users who understood the scripting, but were not trained up enough to make changes.

The PCCE 11 documentation seems to hint at this being possible. You create a read-only Administrator and then you give them Script Editor access. I understand this is a huge leap, but it is not an unreasonable assumption. However, the 12.6 documentation removed that information as well removed the ability of having read-only administrator. It appears that your only option in CCE Admin > Users > Roles is to remove all access to Script Editor The following role:


Has this effect:


If you add the Script Editor role again your user has full access to Script Editor again. So to summarize, it’s not possible to have a read only Script Editor user. I would love to be proven wrong. For now I hope this helps others out there looking for the answer.


A Deeper Dive Into the Cisco Finesse Layout

I’ve been helping a customer migrate from Cisco’s Unified Contact Center Enterprise (UCCE) 11 to UCCE 12 and Amazon Connect. Depending on the complexity and needs of the business they might move to UCCE 12 or they might be moved to Connect. This has caused me to spend some time thinking of the most efficient way to migrate configuration between multiple environments and ensure everything is up to date.

One of the components which I’ve done a lot of work with, but never really looked at too closely is the Finesse layout. In this post we’ll break down what layouts are, how they work, and provide some interesting pieces of trivia around Finesse. This information is up to date as of Finesse 12.5. Make sure you reference the documentation for your specific version.


To start, the Finesse front end, what the agent and administrators see, are based on the OpenSocial specification. What this specification provides is a runtime environment where trusted and untrusted web components or gadgets can interact with the hosting platform, 3rd party services, or with other gadgets. Said differently, this specification sets the rules. It dictates how components will look, where they are placed, and what they can do. While the OpenSocial foundation no longer exists. At one point the foundation was moved under W3C where it was then set to inactive in 2018. The latest specification can be found living here.

An interesting bit of trivia. One of the original developers of OpenSocial was none other than MySpace. Remember them?

You will hear the word gadget multiple times and it is worth defining as it is a core block of Finesse. The best way to think about a gadget is as an application which can be embedded inside another application. If you’re familiar with widgets, you should consider gadgets to be very similar in nature. Now, something a lot of us fail to remember is that all of Finesse is actually one big gadget with a lot of smaller gadgets inside. While you can’t replace the whole gadget that runs on the Finesse server, you can add your own gadgets inside the Finesse gadget using a layout.


The very first thing you need to understand is that like all things Cisco Contact Center Enterprise and Express you must be very familiar with working with XML. While XML has lost a lot of favor in the last few years, when it comes to desktop layouts, using XML makes a lot of sense. While editing a layout can be confusing, Cisco does a good job of assisting with basic syntax checking to catch simple errors. In an ideal world there would be a visualizer that previews the changes you’re making to your layout before saving them. Maybe one day.

The XML file loaded must conform to this schema. The schema is what dictates what tags your layout can have as well as naming conventions for components. 

The XML schema has the following elements defined. These are not in the order they appear in the schema, but I’ve ordered in a hierarchical way to better highlight their relationship. Additionally, there are other elements included in the schema which are not covered below. The list below shows the most important elements to read through to better understand a Finesse layout:

  • finesseLayout: Think of this as the outer boundaries of the whole desktop.
  • layout: The actual layout.
  • role: Role definition.
  • tabs: Grouping of tabs.
  • tab: Each single tab.
  • page: The grouping of gadgets within that page referenced by a tab.
  • columns: Grouping of columns.
  • column: Each single column.
  • gadget: The actual gadget URL.

Another interesting bit of trivia. The XML schema allows for three types of Finesse users: Agent, Supervisor, and Admin. While the desktop layout never references Admins the schema has an additional role that Cisco could later enable or currently uses for publicly restricted functions.


The layout is what dictates what will be loaded when an agent or supervisor login to Finesse. More importantly, it allows for the organization of different gadgets on the page to fit your contact center requirements. At its core the layout includes the following sections:

  • Horizontal Header: This section is the top bar across Finesse. And includes a Logo, Product Name, Agent State for Voice, State for Digital Channels, Dialer Component, and Identity Component. For most installations you’ll only ever see the logo, name, voice state, and identity components.
  • Alternate Hosts
  • Title and Logo in Header
  • Headless Configuration: If your gadget does not require a UI.
  • Customized Icons

Interesting tip: Most gadgets can be dragged and dropped and resized by agents, however out of the box this feature is disabled. To enable it look at the enableDragDropAndResizeGadget config key.


Out of the box you should see the following gadgets:

  • Call Control
  • Queue Statistics
  • Agent Call History
  • Agent State History
  • Customer Context
  • Team Data (Supervisor)

Additionally there are a good bit of disabled gadgets that you can use they all revolve around bringing CUIC data, specifically Live Data, to the agent desktop.

I hope to have time to dive deeper on this topic. There are so many little morsels of information every where you look, you just have to dig a little deeper to find them.


2022 Cisco Designated VIP

I am pretty jazzed for making this awesome list for the second year in a row. The amount of brain power that you can find in the Cisco community forums is insane and being grouped with them is an honor. I really appreciate the recognition from Cisco.

As an added bonus I looked back for my very first post on the community forums. It happened on 02/14/2006, almost 16 years ago. I don’t remember the specific project I was working on, but it involved IPCC Express 3.x… :)


How does Amazon Connect CCP Agent Login and Logout Work

I didn’t think a call center platform could make the topic of an agent login and logout interesting, but Amazon Connect has figured out a way to make me question my sanity with the design decision they have made.

We are going to do a deep dive into some of the uniqueness and outright strange behavior the CCP has when it comes to agent login and logout. This assumes you’re running the out of the box CCP, which means zero customization. Additionally, we’re going to be looking at 5 different screens at the same time to get an overall picture of what is going on and it’s impact to reporting. We will be looking at the Amazon Connect Dashboard, CCP, Real Time Agent reporting, Login/Logout report and Agent activity audit report.

Login to CCP

There are two ways that agents could login to CCP. The first is by logging into the Connect Dashboard (htts://<your-instance> then having agents launch CCP from there here’s what you need to know. The second way is to go to the CCP directly (https://<your-instance> Let’s walk through the first method step by step and see some of the reporting implications.

Step 1: A dashboard login:

  • Will show up in the Login/Logout report.
  • Will not show up in the Real Time Agent report.
  • Will not show up in the Agent activity audit report.

Why is this important? From the Dashboard to taking a call center call, the agent still needs to launch CCP and go into the Available state. I would argue that a better metric of login would be when the agent launches the CCP and not just logs into the Dashboard. The documentation for the Login/Logout report state this:

The Login/Logout report displays the login and logout information for the users in your contact center (for example, agents, managers, and administrators).

So the documentation is aligned with the behavior you see, but I would argue that, when it comes to agents, this report is misleading as an agent still has a few steps to follow before they are ready to take a call. Now, if you open the Agent activity audit report you will not see any data either which makes sense based on the Login/Logout report. Thankfully, both reports line up. Now, let’s get our agent from the Dashboard to CCP. By default the CCP should be in the Offline state.

Step 2: Launch CCP and:

  • The Login/Logout report doesn’t change as this is based on the Dashboard login.
  • You still will NOT show up in the Real Time Agent report.
  • You still will NOT show up in the Agent activity audit report.

Our agent has logged in to the Dashboard, launched CCP and is in an Offline state, but we’re still not seeing anything outside of the Login/Logout report. I would have expected the Real Time Agent report to show me the state of the agent, but that’s not happening. What’s even more infuriating is that if the agent changes states and then goes back to Offline, the Real Time Agent metrics have data about my agent. So why is Offline after login any different than going from one state to Offline state? To be fair, the agent will drop off from the statistics in about 3 minutes, however I think AWS should change this behavior and by default show any agent who is logged in and Offline to make things more consistent.

Logout of CCP

You would think that logout would be much easier, but there are still a few gotchas on this. The biggest thing to remember is that just closing the CCP window will not log you out. Another thing to consider is that a CCP logout will put you in Offline first then log you out. This is important to note if you have custom states you want to use for logout. However, if you are in the Dashboard and you launched the CCP and you logout from the Dashboard it will not properly log you out of the CCP. The CCP will eventually give you a login screen, but:

  • Real Time Agent metrics will still show you in the last state you were in.
  • Login/Logout report will show you logged out.
  • Agent Activity audit will still show you in the last state you were in.

Make it Better

Here are what I believe to be some simple suggestions to make this experience better. I hope that someone at AWS takes some of these and puts them in the next sprint.

  1. Offline state shows up in Real Time Agent metrics.
  2. The Routing Profile allows for configuring the default agent state upon login. This will put agents in any state when they first login.
  3. Dashboard or CCP logout behave the same way and reflect correctly across all reports.

Login and Logout at a Glance

Action Real Time Agent Login/Logout Report Agent Activity Audit
CCP Launch No Data Login time recorded either from Dashboard or CCP login No Data
CCP State Change State Data No Change State Data
Dashboard Logout Previous State Continues Logout time recorded No Data
CCP Logout Offline for about 3 minutes then stats disappear. Logout time recorded Offline State


Obtained the AWS Solution Architect Associate Certification

I wanted to capture my experience working towards attaining the AWS SAA certification in hopes that this helps others on the same journey. This information is up to date as of 12/06/2021.


I first started working on getting the SAA back in middle 2020. I am the type that I like to  book the exam and then start planning for it. So, I booked the exam for August 19, 2020. At the time I used Adrian Cantril’s course. Which, I’ll be honest is great, very detailed. However, for me I was not ready for that type of detail and it was hard for me to focus and make time for the videos. I started strong, but started falling behind and was never able to catch up. On my first attempt I failed.

AWS SAA Failed Report

AWS SAA Failed Report


In the summer of 2021, on my city’s Slack, a few of us started talking about wanting to renew or pass an AWS certification. I put together a quick Google Sheet for people to talk about what they were trying to achieve and why. From there we had an initial meeting in early July and then decided to meet every Monday. One Monday in person and the next virtually via Webex. We ended with 4 total participants. 3 of us going for the SAA and 1 for Security. This was great as it created a constant reminder that I needed to study and stay with the group. I highly recommend to join or start a study group. The extra motivation helped me stay on track.


As a group we talked about what resources worked best and compared notes about what we’ve checked out and what we liked/disliked about them. At the end of the day we all focused on a single primary resource. I personally supplemented my studies with a few other just to get multiple perspectives. Here’s what I used and in the order I used them:

A Cloud Guru (primary resource)

Tutorials Dojo Study Guide eBook (I printed this out and had it bound and would keep next to my bed to review the parts I felt that I needed further review)

Tutorials Dojo SAA Practice Exams


I enjoyed ACG’s video course. The videos were short and full of information and while the labs were ok, the gold was found in the videos alone. The TD eBook was good too, but I would skip it if you want to save money. Finally, the week before the exam I would go through practice exam question and read in detail the description for the questions I failed. Additionally, I would then go to the AWS documentation and get a bit more in depth to hopefully gain some new knowledge. I kept an eye on Reddit to see what others who had taken the test had to say about the topics covered. This allowed me to focus my studies. Personally, I feel that the practice exams was what got me to pass the exam. Not only because I was very used to the question style, but I was able to get a good feel for spotting the gotchas in the answers.

My exam had a lot of EFS, auto scaling, application and network load balancing. Good luck!


PS: From our group all 3 passed the SAA and in a few days the last member of our study group will take the security exam and I’m sure will pass.

Adding Text to Speech to Your IVR Using SaaS (Google Cloud Functions)

I’ve been on a text-to-speech and speech-to-text kick lately. My last post talked about using AWS S3 and Amazon Transcribe to convert your audio files to text and in previous articles I’ve covered how to create temporary prompts using Poly so you can build out your contact center call flows. Well, now we’re going to expand our use case to allow a traditional on premise call center to leverage the cloud and provide dynamic prompts. My use case is simple. I want my UCCX call center to dynamically play some string back to my caller without having to use a traditional TTS service.

First, this is not new in any way and other people have solved this in different ways. This Cisco DevNet Github repo provides a method to use to generate TTS for UCCX. However, this process requires loading a jar file in order to do Base64 decoding. Then there’s this Cisco Live presentation from 2019, by the awesome Paul Tindall, who used a Connector server to do something similar. To be fair the Connector server allowed for a ton more functionality than what I’m looking for.

Screen Shot 2021-09-15 at 3.38.30 PM

Cisco Live Presentation

Second, I wanted this functionality to be as easy to use as possible. While functionality keeps getting better for on premise call center software there are still limitations around knowledge to leverage new features and legacy version that can’t be upgraded that makes it harder to consume cloud based services. I wanted the solution to require the least amount of moving parts possible. That means no custom Java nor additional servers to stand up.

The solution I came up with leverages Google’s cloud (GCP) specifically Cloud Functions. However, the same functionality can be achieves used AWS Lambda or Azure’s equivalent. At a high level we have an HTTP end point where you pass your text string to and in return you will get a wav file in the right format which you can then play back.

Blank diagram

Flow Diagram

The URL would look something like this:

The Good Things About This

  • Pay as you go pricing for TTS. Looking at the pricing calculator a few hours of TTS a month would run under $2.00/month.
  • Infinitely scalable. If you’re handling 1 call or 100 calls your function will always return data.
  • Easy to use.

The Bad Things About This

  • There is a delay between making the request and getting the wav file. I’ve seen as long as 7 seconds at times. I would only use this in a very targeted manner and ensure it didn’t affect the caller experience too drastically.
  • Requires your on premise IVR to have internet access. Often time this is a big no no for most businesses.

Some initial testing with UCCX is showing some positive results. I’m going to investigate if there’s a way to accelerate the processing in order to keep the request and response in under 3 seconds as well as adding the ability to set language, voice, and even SSML via arguments. If you want to build this yourself here’s the code for the function.

def synthesize_text_to_wav(request):
"""Synthesizes speech from the input string of text."""
text = request.args.get('text')

client = texttospeech.TextToSpeechClient()
input_text = texttospeech.SynthesisInput(text=text)
voice = texttospeech.VoiceSelectionParams(
audio_config = texttospeech.AudioConfig(
response = client.synthesize_speech(
request={"input": input_text, "voice": voice, "audio_config": audio_config}

src_file_path = '/tmp/output.mp3'
dst_file_path = '/tmp/output.wav'

# make sure dir exist
os.makedirs(os.path.dirname(src_file_path), exist_ok=True)

# The response's audio_content is binary.
with open(src_file_path, "wb") as out:
print('Audio content written to file "output.mp3"')
AudioSegment.from_mp3(src_file_path).export(dst_file_path, format="wav", codec="pcm_mulaw", parameters=["-ar","8000"])
return send_file(dst_file_path

Be awesome!


Contact Flow Block

Amazon Connect Contact Flow Editor Frustrations and Annoyances

The last few weeks have given me an opportunity to dig deeper into the AWS’s Amazon Connect solution. The purpose of this post will be to document some of my frustrations with the contact flow editor which I believe should be easy to fix. There are a few more frustrations which I don’t believe are easy, so I’ll save those for another post.

In the Contact flows screen there are a few things I would love to see. Firsts, make the Name, Type, and Description columns sortable. When there’s a very long list of flows this allows to quickly see specific groupings of flows together. Second, add an action menu at the end of the row which allows for a quick way to publish, duplicate, or delete a flow. This simple menu would save at least 2 extra clicks and covers some of the common actions one takes once inside the editor.

Amazon Connect Contact Flows Screen

Amazon Connect Contact Flows Screen

Let’s click on a specific contact flow and take it from the top down. Perhaps the most important thing here would be an auto save or confirmation that you might lose your changes if you try to navigate away from the editor screen. It’s very common that you have to go find a queue or prompt ARN, as they are not available in the editor, so if you browse away from the editor without saving you’ve lost your progress.

In an ideal world you would be able to easily switch from flow to flow without having to go back to the main contact flows screen. A drop down next to the flow name to quickly switch between flows would be great. This is specially useful when you want to copy and paste blocks between flows.

Contact Flow Editor Top Bar

Contact Flow Editor Top Bar

I’ve covered this one before, but it fits nicely with this post. You can save a flow or publish a flow and you can do both by using the publish button. However, the confirmation notification that you performed one or the other doesn’t confirm which one you did. This is minor annoyance as you can then move your eyes from the far left of the screen where the notification is found to the top right of your screen to see the Latest button label which will tell you the status of your current flow. It would be nice if the notification confirmed which action you took, I find myself  savings when I meant to publish and it always takes me a second to confirm which one I did.

Screen Shot 2021-06-23 at 6.07.16 AM

The workspace or the big white area with a grid where you place your blocks is the next focus. It’s nice to have infinite room to the right and bottom, but it would be nice if the same would be applied to the top and left. As your flow has more and more branching you find yourself scrolling further and further down, it would be nice if by default your start of the flow would be centered by default.

Remembering the zoom level or setting a default zoom level per flow will save a few clicks. As the flows gets bigger you start having to zoom in and out a lot more. When the flow is rather large, there’s very little reason why the default zoom level is the same as a flow which only has a few blocks. Below is the default view of two different flows. While this default view is useful for smaller flows, for bigger flows it’s not as useful and you immediately have to scroll around or zoom out to get to where you want to go faster.

Default View of Two Different Flows

Default View of Two Different Flows

One of the great things about contact flows is how many things you can do dynamically. However, you first have to bring in a lot of that data over to the flow. You do this with a Set contact attributes block. However, as you add more attributes it starts to become harder to find the right attribute you want to reference. Adding a way to sort or collapse every attribute details would make it much easier to find the attribute you’re looking for. This is specially important as the editor doesn’t tell you what attributes have already been defined. If that was the case this point might not be as important. Imagine having to scroll through a dozen of the aqua blocks below, having to  read each name to get to the one you want. Painful!

Amazon Connect Set Contact Attribute

Amazon Connect Set Contact Attribute

And finally, my biggest annoyance: block details. Block details are the configuration options each block has. You can get to them by clicking the top dark gray bar of any block.

Contact Flow Block

Contact Flow Block

There are two annoyances here. First, you can’t click on the workspace to close the block details. Even if you didn’t make a change you have to move your mouse to the far bottom left or right to click the cancel/x buttons. Heck, let me use the escape key to get out of there. So often I just need to see the configuration without making changes and having to cancel out every time takes unnecessary steps.

Contact Flow Configuration Details

Contact Flow Configuration Details

And finally, do not show me the details of a block that has nothing for me to configure. If by mistake I clicked on the gray bar of a terminate block. There’s nothing of value that this screen adds. Others might find the link to the documentation helpful, but I don’t. This annoyance would be lessen if I could quickly  escape from this screen, but since I’m being held captive by it and there’s no useful information displayed it just makes my blood boil.

Terminate Block Details

Terminate Block Details

I hope this post is not taken as me saying that Amazon Connect is not a good solution, far from it. This post is out there in hopes that someone at AWS who has the power to make things better sees what I believe are common frustrations.


Microsoft and Nuance a Brilliant Play for Redmond

Bloomberg reports that Microsoft “is in advanced talks” to purchase Nuance. I’ve not been able to stop thinking of this move and I’ll be the first to admit that it surprised me, but the more I think about it and the more I talk to others in the industry this is an absolutely brilliant move. Here are my crystal ball predictions:

The patent play: Nuance comes with over 2000 patents. This is a huge cache which will no doubt be useful for the upcoming AI wars. This will be a huge boosts to Microsoft’s already huge R&D commitment in this space.

This hospital bill is brought to you by Microsoft: Nuance makes the majority of their money from the healthcare sector. We’re not talking just dictations or document management, we’re talking EHR, billing, and diagnosis software. Windows and Office are already prevalent in the healthcare space, this puts MS in the heart (get it?) of hospital operations and processes.

Cortana, it was the best of times it was the worst of times: Did you know that Windows 10 was Cortana’s big debut in the desktop space? Yeah neither did anyone else. Cortana began in 2014 as a direct competition to Alexa which was released the year before. At the time Microsoft was beginning to make some heavy bets in to the mobile space with Windows mobile. Well it’s a decade later and Windows mobile is dead, Cortana’s OS integration has been neutered and I’ve never seen another human being speak to their Windows PC. I believe this is going to change that with a huge marketing push of some college student dictating their final paper to their Microsoft Surface device while getting a manicure.

Where we’re going we don’t need passwords: Nuance comes with perhaps one of the oldest if not best speech biometrics software. Imagine joining a Microsoft Teams meetings where you call in and start speaking and you’re authenticated immediately. Or allow for “signatures” based solely on your voice. Verification and authentication continue to be huge and the rise of better and better “deep fake” technology will allow for some sort of trust verification service with Nuance biometrics in the middle of it.

(Part 1) We’re taking our ball and going home: This one is near and dear to me heart. If a Cisco call center customer wanted to have speech recognition or text to speech there was only one name in town. Nuance. This has changed a bit in the last few years with the introduction of LumenVox as an additional option. And this has changed even further in the last 18 months with Cisco supporting Google’s DialogFlow, but Nuance still reigns supreme. I can see MS increasing the pricing of an already very expensive product making it prohibitive for some call centers to run their software.

(Part 2) I can see clearly now the rain is gone: Did you know that Azure stands for the color blue of a cloudless sky? Microsoft will be able to create a very defensible moat around their Azure offerings by being the only provider to have the latest and greatest Nuance services. In addition, some telephony cloud provider, who are already battling Amazon and who white label Nuance products as part of their offering, might be forced to either consume more Azure resources to get better pricing or completely get priced out from this technology and watch the competition pass them by. This sets the stage for Microsoft to be in the driver’s seat of what UC or CC provider you might choose next if you have an already deep Nuance integration or if your call center must use Nuance.







What “Zoom Fatigue” can teach us about using video in the contact center

My significant other researches human behavior at work and she brought this study to my attention. She thought it would be very relevant to what I do. I want to summarize some key points and how they relate to the contact center, but first, I really wanted to title this post as “Why video will never kill the phone contact center star”, but that seemed too childish.

So what can Zoom Fatigue teach us about using video in the call center? Let me highlight a few key points from the article.

…in one-on-one meetings conducted over Zoom, coworkers and friends are maintaining an interpersonal distance reserved for loved ones.

Is your customer relationship what you would consider intimate? I can’t think of a single service or product where I would use that term, so the answer is more than likely no. Now, imagine having to handle customer video calls all day and feeling your personal space invaded. It would be exhausting for agents and off-putting for customers. Video calls should be reserved for customers with a long-standing relationship and limited to a few key agents who know the customer well. Additionally, considerations should be made around how many video calls an agent should handle in a short amount of time.

One of the remarkable aspects of early work on nonverbal synchrony (i.e., Kendon, 1970) is how nonverbal behavior is simultaneously effortless and incredibly complex. On Zoom, nonverbal behavior remains complex, but users need to work harder to send and receive signals.

Processing these extra nonverbal signals contributes to what my significant other and other researchers call “cognitive load” or the amount of information our brains can process at any given time. Video calls divert precious mental resources away from the task at hand, making it more likely your agents will make mistakes on complex tasks like financial services or billing. Traditional audio-only phone calls enable them to focus better while doing their work.

There is no data on the effects of viewing oneself for many hours per day. Given past work, it is likely that a constant “mirror” on Zoom causes self-evaluation and negative affect.

Self-view is very distracting for me, however that’s the only way for me to know if I’m in view or not as I use a standing desk. In addition to being distracting, this article argues that it is also stressful. If your agents are handling video calls, consider the ability to turn on and off self-view. Vendors should come up with a technology solution which notify the users when they are out of view without relying on the equivalent of looking in the mirror all day long.

…cultural norms are to stay centered within the camera’s view frustrum and to keep one’s face large enough for others to see. In essence users are stuck in a very small physical cone, and most of the time this equates to sitting down and staring straight ahead.

We first had handsets and they were terrible to hold and work at the same time. We then got wired headsets and life was better, but we needed to make sure not to get tangled or have someone kick them. We then moved on to wireless headsets and we got freedom! … only to have it taken away by video that creates a “lock in” effect. You can no longer just stand up and stretch. You can’t just run to the fax machine or to refill your water bottle. If your agents collaborate in a team to handle customer requests or handle calls which can be very lengthy avoid having them on camera.