Voice Agent Call Monitoring
Learn how to use Hamming AI to evaluate your AI voice agent calls in production
What Voice Agent Call Monitoring gives you
Voice Agent Call Monitoring help you monitor the health and reliability of your AI voice agents in production against real customer calls. It helps you answer questions like:
- What’s the current health of my system?
- Are there performance anomalies over time?
- Should I scale resources or fallback to a different service provider based on observed latency or error trends?
- Which calls are failing and why?
- How are users interacting with the voice agent over multiple calls?
- Where do users drop off in the call flow?
- Do changes to the prompt or model correlate with better outcomes?
- How do I find calls where the customer is upset? (i.e. high frustration Hume scores)
Set up Voice Agent Call Monitoring
For Retell and Vapi agents, it’s a few clicks to set up monitoring. For custom agents, you can send call recordings to Hamming via a webhook.
Retell Agent Monitoring
If you use Retell to run voice agents, follow this tutorial.
VAPI Agent Monitoring
If you use VAPI to run voice agents, follow this tutorial.
Custom Agent Monitoring
If you use a custom agent like OpenAI’s real-time API, LiveKit, Pipecat, etc. follow this tutorial.
Retell Voice Agent Monitoring
The setup process is different depending on whether you’re already using Retell’s webhook or setting up a new one from scratch.
If you’re already using Retell’s webhook, you can set up monitoring in a few clicks.
Set up your .env file
Set up a Hamming API Key by going to hamming.ai/settings and selecting Create a new secret key at the top. Then, add the API key to your .env file as shown in the code snippet below.
Send in the Retell post-call payload to Hamming
You can send in Retell’s call_ended
event payload to Hamming by sending a POST request to https://app.hamming.ai/api/rest/v2/call-logs
with the following body:
Visit Retell’s documentation to learn more about the call_ended
event payload.
Example Retell call_ended
payload that’s coming from req.body:
Sample NodeJS server to send the payload to Hamming while consuming it for your own purposes:
Monitor Calls
Once you’ve started sending the payload to Hamming, Hamming will log all inbound and outbound phone calls and generate Hume scores, providing valuable insights into the performance and sentiment of the calls.


If you’re already using Retell’s webhook, you can set up monitoring in a few clicks.
Set up your .env file
Set up a Hamming API Key by going to hamming.ai/settings and selecting Create a new secret key at the top. Then, add the API key to your .env file as shown in the code snippet below.
Send in the Retell post-call payload to Hamming
You can send in Retell’s call_ended
event payload to Hamming by sending a POST request to https://app.hamming.ai/api/rest/v2/call-logs
with the following body:
Visit Retell’s documentation to learn more about the call_ended
event payload.
Example Retell call_ended
payload that’s coming from req.body:
Sample NodeJS server to send the payload to Hamming while consuming it for your own purposes:
Monitor Calls
Once you’ve started sending the payload to Hamming, Hamming will log all inbound and outbound phone calls and generate Hume scores, providing valuable insights into the performance and sentiment of the calls.


If you’re setting up a new Retell webhook, follow these steps:
Ensure that you have installed and authorized ngrok before continuing. To learn more visit https://ngrok.com.
Start ngrok
Set up Retell AI Webhook
After completing Step 1, a window will display a Forwarding Link. Copy the link and append /retell-webhook to the end. Your final link should look similar to this:
Finding Your Forwarding Link
Finding Your Forwarding Link

Go to https://dashboard.retellai.com/agents and select your agent. Look for the Webhook Settings tab, and paste the link you created into the Agent Level Webhook URL field.

Create a Node.js server that handles the webhook request
This is the content of the index.ts file:
Set up your .env file
Set up a Hamming API Key by going to hamming.ai/settings and selecting Create a new secret key at the top. Then, add the API key to your .env file as shown in the code snippet below.
Next run the following command.
Monitor Calls
Once both ngrok and your application are running, monitoring will log all inbound and outbound phone calls and generate Hume scores, providing valuable insights into the performance and sentiment of the calls.


VAPI Voice Agent Monitoring
The setup process is different depending on whether you’re already using VAPI’s webhook or setting up a new one from scratch.
If you’re already using VAPI’s webhook, you can set up monitoring in a few clicks.
Set up your .env file
Set up a Hamming API Key by going to hamming.ai/settings and selecting Create a new secret key at the top. Then, add the API key to your .env file as shown in the code snippet below.
Send in the VAPI post-call payload to Hamming
You can send in the VAPI post-call payload to Hamming by sending a POST request to https://app.hamming.ai/api/rest/v2/call-logs
with the following body:
Sample NodeJS code to send the payload to Hamming while consuming it for your own purposes:
Monitor Calls
Once you’ve started sending the payload to Hamming, Hamming will log all inbound and outbound phone calls and generate Hume scores, providing valuable insights into the performance and sentiment of the calls.


If you’re already using VAPI’s webhook, you can set up monitoring in a few clicks.
Set up your .env file
Set up a Hamming API Key by going to hamming.ai/settings and selecting Create a new secret key at the top. Then, add the API key to your .env file as shown in the code snippet below.
Send in the VAPI post-call payload to Hamming
You can send in the VAPI post-call payload to Hamming by sending a POST request to https://app.hamming.ai/api/rest/v2/call-logs
with the following body:
Sample NodeJS code to send the payload to Hamming while consuming it for your own purposes:
Monitor Calls
Once you’ve started sending the payload to Hamming, Hamming will log all inbound and outbound phone calls and generate Hume scores, providing valuable insights into the performance and sentiment of the calls.


If you’re setting up a new VAPI webhook, follow these steps:
Ensure that you have installed and authorized ngrok before continuing. To learn more visit https://ngrok.com.
Start ngrok
Set up VAPI AI Webhook
After completing Step 1, a window will display a Forwarding Link. Copy the link and append /vapi-webhook to the end. Your final link should look similar to this:
Finding Your Forwarding Link
Finding Your Forwarding Link

Go to https://dashboard.vapi.ai/assistants and select your agent. Look for the Advanced in the dropdown, and paste the link you created into the Server URL field.

Create a Node.js server that handles the webhook request
This is the content of the index.ts file:
Set up your .env file
Set up a Hamming API Key by going to hamming.ai/settings and selecting Create a new secret key at the top. Then, add the API key to your .env file as shown in the code snippet below.
Next run the following command.
Monitor Calls
Once both ngrok and your application are running, monitoring will log all inbound and outbound phone calls and generate Hume scores, providing valuable insights into the performance and sentiment of the calls.


Custom Agent Monitoring
If you’re using OpenAI’s real-time voice agent or other custom voice agents, you can send call recordings to Hamming via a webhook.
Set up your .env file
Set up a Hamming API Key by going to hamming.ai/settings and selecting Create a new secret key at the top. Then, add the API key to your .env file as shown in the code snippet below.
Send call recordings to Hamming
If you just have the recorded calls and no diarized transcripts, you can send just the call recordings to Hamming via a webhook:
provider
should be set tocustom
.externalAgentId
is the ID of the agent in your system (optional). This links the call to a specific agent in Hamming for filtering.call_id
is a unique identifier for the call.recording_url
is the URL of the call recording. For private recording URLs, we’d need a token to access it.metadata
is a key-value pair that you can use to store any additional information about the call.from_number
is the caller’s phone number.to_number
is the callee’s phone number.start_timestamp
is the start time of the call, in milliseconds.end_timestamp
is the end time of the call, in milliseconds.status
is the status of the call. (ended
orerror
).transcript
is the transcript of the call (optional).
(Optional) Send the transcript with the tool calls
Sending the transcripts with the tool calls allows us to measure what is done (function calls) in addition to what is said.
If you have the transcript with the tool calls, you add the transcript to the payload object with the following type:
Example payload with transcript:
start
is the start time of the message, in milliseconds.
The remaining fields match the OpenAI’s API Spec.
Monitor Calls
Once calls are made, they will be logged in Hamming and you will see Hume scores, providing valuable insights into the performance and sentiment of the calls.


Agent-Specific Monitoring
Once you’ve set up monitoring with the externalAgentId
parameter, you can filter your production call logs by specific agents in the Hamming dashboard.
How It Works
-
Agent Linking: When you send call logs with an
externalAgentId
, Hamming automatically links the call to the corresponding agent in your workspace using the agent’ssourceId
. -
Filtering: In the monitoring dashboard, you can use the agent filter dropdown to view calls for specific agents only.
-
Benefits:
- Monitor individual agent performance in production
- Compare metrics across different agents
- Quickly identify agent-specific issues or patterns
- Track improvements after agent updates
Setting Up Agent Linking
The externalAgentId
should match the agent ID from your voice provider
(e.g., Retell agent ID, VAPI assistant ID, or your custom agent identifier).
For agent linking to work:
-
Sync Your Agents: Make sure your agents are synced to Hamming (either manually created or auto-synced from providers like Retell/VAPI).
-
Use Consistent IDs: The
externalAgentId
you send must match thesourceId
of the agent in Hamming. -
Include in Call Logs: Add the
externalAgentId
field when sending call logs:
Viewing Agent-Specific Data
Once calls are linked to agents:
- Navigate to the Monitoring Dashboard
- Use the agent filter dropdown to select a specific agent
- View filtered metrics, call logs, and performance data for that agent only
This enables you to:
- Track call volume per agent
- Monitor success rates by agent
- Analyze latency and performance metrics per agent
- Identify which agents need optimization