Multi-Tenant Agent Exchange (AX)

We don't have a product name yet, but we do have a way to describe what we're building. It's not an answering service, call center, or even a contact center platform - we're calling it an Agent Exchange, or AX.

Multi-Tenant Agent Exchange (AX)
Photo by Matt Benson / Unsplash

Before we get started, here's what you can expect if you continue:

  • Customer portal updates
  • Mission Control updates
  • Scripting Agent updates
  • Multi-Tenant Agent Exchange (AX)

The last article I sent was a little hurried and I ended up cutting out a ton of content just to get it out in time. This update should hopefully be what we meant our last one to be.

As an aside, the takeaway I intended was that we're working on improving our support logistics as we lead up to launching our own platform. Expect more support-adjacent functionality to be built into our customer portal as we move forward.

"Words are hard." – Shakespeare, probably.

white and black round plate
Photo by Logan Gutierrez / Unsplash

Customer Portal Updates

We've made a number of improvements to our customer portal at learn.calltheory.com that we wanted to share.

First, we've added a new Appointment Scheduling feature for customers to again be able to jump on our calendar.

Our new Appointment Scheduling interface

The new scheduling feature includes:

  • A modern date-picker calendar interface for scheduling calls with us
  • Team Owners/Admins can schedule and view appointments for their own Team Users
  • Per-Team Availability, so we can provide after-hours appointments for our Enterprise customers.
  • View appointment history for the past 90 days and manage upcoming appointments.
  • Meeting links are powered by Jitsi, similar to Office Hours and Scripting Sessions

We've also integrated our Office Hours, Scripting Sessions, and Dedicated Meetings calendar, allowing us to show you everything that's going on with your Call Theory team directly on the dashboard.

Office Hours, Scripting Sessions, Scheduled Support, and Dedicated Meetings are all available on the dashboard

Next, we've re-structured the site-navigation to accommodate the addition of new documentation:

Much of our new documentation is based on our work building Call Center Village over the past year.
Sample documentation from our AI Agents docs for customers

We've also expanded our technical documentation with all the telephony content we found in our emails during our migration away from Google to Proton. Like, a lot of it.

There are a few potential bookmarks that you may want to update as a result of this change!

  1. learn.calltheory.com/docs learn.calltheory.com/support
  2. learn.calltheory.com/docs/office-hours learn.calltheory.com/support/office-hours
  3. learn.calltheory.com/docs/scripting-sessions learn.calltheory.com/support/scripting-sessions

What's next for our customer portal? We plan on integrating customer-specific infrastructure documentation to replace our existing wormhole.calltheory.com documentation portal.


A view of a control room from above
Photo by Patrick Konior / Unsplash

Mission Control Updates

On to our utility dashboard! While we're not actively finding new things to make, we are still building things enterprise customers ask and/or pay for us to build. These features then get pushed out to the open-source Mission Control repository.

I think this is how trickle-down code-enomics works...

Voicemail Digest

As part of the latest Genesis migration we were part of, we've added a new feature called Voicemail Digest. In short, it's a simple utility that functions similar to the Amtelco Voice Logger Scheduler, allowing you to setup an account to send the voicemails by email on a regular schedule.

The digest itself has a few features we didn't have in the original scheduler, including automated transcription and included metadata.

Create new schedule for a Voicemail Digest
To my knowledge, Amtelco is also working on adding back this feature to Genesis but I'm not sure of the status, efficacy, or timeline.

Edit Your Schedule!

We also added another new utility that allows you to decrypt encrypted content in the Amtelco database, notably the schSchedule table. This allows easier updates to previously saved records that you can't otherwise copy/paste or have to go hunting in the database to find.

Especially useful for reports, which previously would require you to re-create the record from scratch (usually involving screenshots of prior settings.)
Sample decrypted schSchedule.RecordJSON

In addition to schSchedule.RecordJSON, you can also decrypt sysConfig.Config and sysConfig.Config2 allowing you to see your raw licensing data (which is often easier to read than the licensing page.)

Sample sysConfig.Config
We do not have a mechanism for modifying your licensing. You can only save schSchedule records back to the database.

Related: https://support.amtelco.com/system/files/Other/Incident%20202405-1.pdf

Other Mission Control Changes

Next, we made some behind-the-scenes updates to our Cloud Faxing utility to better account for the fax lifecycle. Instead of marking a message as delivered when the fax API provider returned successful, we're now confirming the delivery status before pushing the messages into the Copia processed folders.

This allows messages to properly record sent in the Genesis message history instead of relying on post-failure notifications.

Another background update, we've updated our MCP integration to work with http transport (no longer requiring SSE.) We also added a second MCP tool, called get_call_recording.

I'm still trying to figure out the best way to use MCP and what kinds of tools might be useful to expose. Are you using it in your AI adventures at all? Hit reply and let us know what's up.

Finally, documentation for Mission Control has been updated for our new features and it can be viewed publicly at learn.calltheory.com/mission-control.


A close up view of a blue and black fabric
Photo by Igor Omilaev / Unsplash

Scripting Agent Updates

Probably our biggest "secret project" over the last several months has been our AI Scripting platform for Intelligent Series. We've decided to call it Scripted Agent, with the eventual cloud offering being Scripted Cloud.

Also, it let's me re-use one of my previously abandoned domain names - which is always a plus, right!?

So, what exactly is the Scripted Agent web application? In a nutshell, it's an alternative scripting front-end for Intelligent Series that takes advantage of custom AI-tooling for rapid scaffolding.

An even simpler explanation? You can script by talking to an AI chat bot, and then refine manually – all in the same interface.

We've designed it to be relatively safe: scripts are always saved as new versions to allow easy fall back and a Human-in-the loop workflow by default.

But wait, there's more!

In addition to a scripting interface, we've designed a data export tool, allowing fast CSV export via download or email.

Crystal Reports in IS Reporting generally lack a modern CSV option, often including report metadata in the exported file making it inadequate for automated systems without further modification.

Another big features is our data import tool, currently geared towards Telescan customers looking to make the leap to Genesis. Just export your configuration/accounts through standard Telescan reports and upload them (individually, or zip them up and upload them as a single file.)

One of the goals is to reduce the friction required to move accounts into (and out-of) the Amtelco ecosystem from other platforms.
Telescan data import "wizard"

Automatic Account and Script Creation?

Once you've imported the Telescan data into Scripted Agent, you can use our Account Conversion tool to automatically script the account in Intelligent Series. Keeping with our Human-in-the-loop theme, scripted accounts are saved as a new version and a real-person must activate the script in Intelligent Series.

Since generative AI is by definition non-deterministic, we've made it easy to clear and re-generate scripting if you don't like the initial outcome. Or you can manually adjust using our scripting interface, or even load up IS Supervisor and make edits there.
Sorry for the bad screenshot. "One-click conversion"

But how does it know?

We've tried various approaches to teaching a robot how to program Intelligent Series scripts:

  • Fine-tuning a capable coding model
  • Loading instructions directly into the System Context Window
  • RAG search using embeddings in a vector database
  • A combination of Agent Skills and MCP tools
  • Sub-agents and secondary agents for automated feedback loop

The most capable scenario has been using RAG search through embeddings that we generate from what is effectively Agent Skills files for every Intelligent Series scripting element, along with a secondary proofing agent to check it's work.

The main problem I had with using Agent Skills only is that I ran out of context length quickly. By generating embeddings locally and saving them in pg_vector we can provide high-quality instructions at minimal context usage.

There's likely some skill ceiling here that I'm not even close to reaching which would yield better results using one or more of the other methods. We'll continue to learn and refine.
Local vector database for scripting knowledge

The other nicety as a result of locally using embeddings is that we can more reliably plug in other AI service providers without needing them to provide support for embeddings!

Although, I do recommend using local hardware and open-weight models whenever feasible.
Use the inference service you care about (try locally)
This feature got us some hands-on experience with building scripting features as we try to figure out how scripting should work in our own platform.

grayscale photo of woman using headphones
Photo by Museums Victoria / Unsplash

Multi-Tenant Agent Exchange (AX)

Speaking of our own platform...no, I still don't have a better name than ToneDef. Let's not dwell on it for now, okay?

What we did come up with, however, is an updated way to describe what we're building. In the past, you've probably heard a number of these terms and their variants:

  • Answering Service
  • Call Center
  • Contact Center
  • BPO
  • Dispatch Center
  • Virtual Receptionist
  • Live Operators

Now, we have a whole new world of artificial intelligence products and services to consider. And it's likely that the [live] operators will have to co-mingle with the [AI] agents in some capacity.

Switching subjects briefly: I've been trying to use "Live Operator" and "AI Agent" to refer to humans versus robots. So when I describe things, an "agent" is always going to be an "AI Agent" and an "operator" is always going to be a "Live Operator."

I have to keep saying it so others will follow along...

Getting back to the point at hand, when we add AI Agents into the mix, we suddenly have a very different looking platform, one that I'm calling an Agent Exchange (AX) — the modern iteration of call-center platforms where agents, protocols, and humans all merge to provide seamless customer service.

I swear on my dog's life: I didn't have AI generate any of this. That's a big reason these articles take (me) forever to write.

There's some inspiration taken from the common terms I learned growing up around technology like MX (Mail Exchanger) in DNS and pbx (Private Branch Exchange) in telecom.

So, yeah: we're building a Multi-Tenant Agent Exchange (AX) platform for live operators and AI agents.

Our first-ever public test run is in April at CypherCon/BSides MKE as part of Call Center Village.

Hopefully we'll have a name figured out by then.