Setting Up Agent QA
This section walks you through configuring Agent QA from scratch. By the end, you will have a fully working QA system evaluating your customer service calls automatically.
2.1 Prerequisites
Before starting setup, prepare three sets of files. The quality of these inputs directly determines the accuracy of your evaluations.
Golden Call Recordings
Representative audio files that cover your typical call scenarios.
| Requirement | Detail |
|---|---|
| Content | Diverse scenarios -- routine calls, escalations, edge cases, different agents, different outcomes |
| Supported formats | MP3, WAV, M4A, MP4 |
| Maximum file size | 25 MB per file |
| Audio quality | Clear speech, reasonable duration, minimal background noise |
Tips for selecting golden recordings: Include calls with diverse outcomes (successful resolutions, escalations, transfers, unresolved issues). Cover all major contact reason categories. Balance between high-performing and low-performing examples. Include calls from multiple agents to avoid bias. Aim for 20 to 50 examples per QA parameter for best calibration results.
Label Data CSV
A spreadsheet containing your human reviewers' Pass/Fail/N/A grades for each golden call recording.
| Requirement | Detail |
|---|---|
| Format | CSV file, UTF-8 encoded |
| Required column | Filename -- must match audio file names without the file extension |
| Parameter columns | One column per QA parameter, with values of exactly Pass, Fail, or N/A |
| No empty cells | Every parameter cell must contain Pass, Fail, or N/A |
Example:
UCID,Transcript,Greeting,Customer Verification,Issue Resolution,Empathy,Hold Time
call-001,"Good morning, thank you for calling...",Pass,Pass,Fail,Pass,N/A
call-002,"Yeah what do you need?",Fail,Pass,Pass,Fail,Pass
call-003,"Hello, this is Sarah from Support...",Pass,N/A,Pass,Pass,Pass
The UCID value call-001 must correspond to an audio file named call-001.mp3, call-001.wav, call-001.m4a, or call-001.mp4. The Transcript column is optional -- if omitted, the system transcribes from audio. Column headers become your parameter names, so use clear, descriptive names.
QA Form
| Requirement | Detail |
|---|---|
| Format | CSV |
| Content | Parameter names, detailed descriptions, scoring criteria (what constitutes Pass vs. Fail), weight assignments, and criticality indicators |
2.2 Create Your AI Employee
- Log in at app.ema.co
- Navigate to AI Employees in the left sidebar
- Click Create on "Pre-built AI Employee"
- Select the Agent QA template from the catalog
- Enter a Name (e.g., "QA Assistant - Customer Service")
- Enter a Description (e.g., "Evaluates all inbound customer service calls against our 25-parameter QA scorecard")
- Select the Language for evaluations (this determines the language used in scorecard reasoning and insights)
- Click Continue
Your AI Employee is created in Disabled state. You must complete all configuration steps before enabling it.
After creation, you will see five tabs:
| Tab | Purpose |
|---|---|
| Configuration | Set up QA parameters, data sources, integrations, and contact reasons |
| Audit | Review evaluated interactions with scorecards and transcripts (empty until processing begins) |
| Metrics | View aggregate analytics -- agent performance trends, contact reason breakdowns, resolution rates, sentiment distributions |
| Insights | Browse AI-generated patterns -- strengths, improvement areas, product feedback, competitive intelligence |
| Permissions | Manage user access -- invite users, assign roles, control visibility |
2.3 Configure QA Parameters with Auto-Learning
Auto-Learning is the fastest and most accurate way to configure your evaluation rules. It uses your golden dataset to generate, calibrate, and iteratively refine parameter instructions until they align with your human reviewers' grades.
Upload Your Files
- Open your AI Employee and click the Configuration tab
- Scroll to QA Parameters and click Setup QA Parameters
- Upload all files:
| File | Instructions |
|---|---|
| Audio files | Select your golden call recordings. Supported formats: MP3, WAV, M4A, MP4. Max 25 MB per file. |
| Transcript | Select your golden transcripts. Supported formats: JSON, XML, HTML. |
| Label data | Click Download sample first to confirm the expected format. CSV with Pass/Fail/N/A values. |
| QA form | Click Download sample to check the expected format. Upload the QA form CSV. |
Validation Before Auto-Learning Can Start
| Validation | Requirement |
|---|---|
| Column matching | Parameter columns in your label data CSV must match the parameter definitions in your QA form CSV exactly |
| Transcription readiness | All uploaded audio files must have completed transcription before Auto-Learning can start |
| Label data values | Every cell must contain exactly Pass, Fail, N/A, or NOT_APPLICABLE |
| No concurrent pipelines | Only one Auto-Learning pipeline can run per AI Employee at a time |
Run Auto-Learning
- After all files are uploaded and validated, click Generate Parameters
- Auto-Learning begins processing through multiple stages
What you see during processing:
- A split-panel view: the left pane displays the parameters list with per-iteration accuracy data, while the right pane shows an overall accuracy chart tracking improvement across iterations
- You can click Run in background to continue configuring other settings while it runs
- If processing fails, a Retry button appears to restart the pipeline
- Processing typically takes 15 to 45 minutes depending on the number of golden recordings
What happens behind the scenes: The system runs up to 3 improvement iterations by default, stopping early if accuracy converges (i.e., improvement between consecutive iterations falls below a 1% threshold). Parameters with accuracy below 90% are targeted for instruction rewriting in each iteration.
After the initial run completes, you can click Deep Optimize to run additional iterations (up to 20) if accuracy on certain parameters is below your target. Deep Optimize also uses convergence-based early stopping.
Review and Approve Parameters
After Auto-Learning completes:
- Click Review Parameters
- For each parameter, review:
| Field | Description |
|---|---|
| Parameter Name | The name of the QA criterion (must be unique) |
| Category | Grouping label for related parameters |
| Weight | How much this parameter contributes to the overall score (must be greater than 0) |
| Criticality | Critical = auto-fail if this parameter fails; Non-Critical = weighted contribution only |
| Mechanism | Transcript Only, Knowledge Verified, or Action Based |
| Generated Instructions | A pass/fail instruction and a not-applicable instruction generated by Auto-Learning |
| Accuracy | Percentage match between the system's evaluation and your human grades |
- Edit any parameter by clicking on it -- you can modify instruction text, weight, criticality, or mechanism
- All parameters are selected by default. Deselect any you want to discard, then click Approve Parameters
Understanding Accuracy Results
| Accuracy | Interpretation | Recommended Action |
|---|---|---|
| 95-100% | Excellent alignment with human grades | No action needed |
| 90-94% | Strong alignment | No action needed |
| 85-89% | Acceptable | Consider adding more golden data examples or refining instruction text |
| Below 85% | Needs attention | Review golden data quality; consider splitting complex parameters into simpler ones |
Adding Parameters Manually
You can also add parameters without Auto-Learning:
- In Configuration > QA Parameters, click Add
- Define the parameter name, category, weight, criticality, mechanism, pass/fail instruction, and N/A instruction
- Click Save
Manual parameters do not have accuracy scores since they have not been tested against golden data. Consider running Auto-Learning again after adding manual parameters to validate their performance.
2.4 Add a Knowledge Base
Skip this step if all of your parameters use the Transcript Only mechanism. A knowledge base is only required for parameters using the Knowledge Verified mechanism.
Setting Up Data Sources
- In the Configuration tab, scroll to Data Sources
- Click Add and select your source type:
| Source Type | Best For | Sync Behavior |
|---|---|---|
| File Upload | Quick setup, static documents | Manual -- re-upload when documents change |
| Google Drive | Organizations using Google Workspace | Automatic -- refreshes within ~10 minutes of changes |
| SharePoint | Organizations using Microsoft 365 | Automatic sync |
| Confluence | Organizations using Atlassian tools | Automatic sync |
| URL Scraping | Public-facing knowledge bases, help centers | Crawls up to two levels deep from each seed URL |
- Create a folder name to organize your documents (e.g., "Return Policies," "Product Guides")
- Upload or connect your files
- Optionally, assign tags to documents for precise filtering when connecting folders to specific parameters
Supported File Formats
| Category | Formats |
|---|---|
| Production-ready | PDF, DOCX, PPTX, TXT, HTML, MD |
| Limited support | XLSB, CSV, XLSX, XML, JSON |
| Not supported | Legacy Office binaries (.doc, .xls), source code files, audio/video, native Google Docs/Sheets/Slides |
Scanned documents pass through OCR automatically. Diagrams are not interpreted -- add text captions for important visual content.
2.5 Add Integrations
Skip this step if none of your parameters use the Action Based mechanism.
Available Integrations
| Integration | Typical Use Cases |
|---|---|
| Salesforce | Case creation, CRM field updates, opportunity logging |
| Zendesk | Ticket creation and update verification |
| Genesys | Call metadata retrieval, disposition codes |
| Five9 | Dialer data, agent statistics, call disposition |
| Nice CXone | Quality management sync |
| Custom Webhooks | Any REST API integration for proprietary systems |
Setup Steps
- In the Configuration tab, scroll to Integrations
- Click Add Integration and select the type
- Enter credentials -- API URL, API Key or OAuth credentials, integration-specific settings
- Click Test Connection to verify connectivity
- Configure field mappings -- specify which data fields to retrieve and how to match them to call interactions
- Click Save
- Connect the integration to your Action Based parameters in the QA Parameters section
2.6 Configure Contact Reasons
Contact reasons categorize why customers are calling. This classification powers the analytics in your Metrics dashboard.
The Three-Level Hierarchy
| Level | Description | Example |
|---|---|---|
| L1 | High-level category | Reservations |
| L2 | Detailed breakdown within L1 | Modify Reservation |
| L3 (Call Driver) | Specific root cause | Voluntary Date Change |
Configure Non-Resolution Reasons
Non-resolution reasons categorize why an issue was not resolved. The default L1 categories are:
| L1 Category | Description | Example L2 Subcategories |
|---|---|---|
| People | Agent-related issues | Knowledge gap, communication issues, insufficient training |
| Process | Workflow or policy limitations | Scope limitation, policy restriction, approval required |
| Technical | System issues | System downtime, integration failure, tool malfunction |
| End User | Customer-related factors | Customer unresponsive, call disconnected, customer declined solution |
Where to Make Changes
| What You Want to Do | Where to Do It |
|---|---|
| Edit existing category instructions | Configuration page within your AI Employee |
| Add or delete categories (new L1/L2/L3 entries) | Workflow Builder -- click "Go to AI Employee builder" from the Configuration page |
Keep categories mutually exclusive -- each call should clearly belong to one category at each level. Aim for 5 to 10 L1 categories, 3 to 8 L2 per L1, and specific L3 call drivers under each L2. Review and update categories quarterly.
2.7 Set Up Permissions
Agent QA uses role-based access control with four roles. See Roles and Permissions for the full reference.
- Click the Permissions tab in your AI Employee
- Click Add User
- Enter the user's email address
- Select the appropriate role
- Click Send Invitation
2.8 Enable and Send Your First Call
Pre-Enable Checklist
- QA parameters configured and approved (via Auto-Learning or manually)
- Knowledge base connected and documents indexed (if using Knowledge Verified parameters)
- Integrations added and connections tested (if using Action Based parameters)
- Contact reasons configured at all three levels (L1, L2, L3)
- Non-resolution reasons configured (L1 and L2)
- Permissions assigned and invitations sent
Enable Your AI Employee
- Navigate to the Configuration tab
- Click Save changes if any pending changes are indicated
- Click the Enable toggle at the top of the page and confirm
Verify with a Test Call
Upload a test call via the API to verify end-to-end processing:
API endpoints:
- Audio Files:
POST https://api.ema.co/api/v1/external/upload/file - Transcript File:
POST https://api.ema.co/api/v1/external/upload/transcript
Required headers:
| Header | Value |
|---|---|
x-persona-id | Your AI Employee's persona ID (found in Configuration tab URL or settings) |
Authorization | Bearer <your-jwt-token> |
Required form fields:
| Field | Type | Description |
|---|---|---|
resource_id | string | A unique identifier for the call (e.g., test-call-001) |
agent_id | string | The agent's UUID in your system |
agent_email | string | The agent's email address (used for Agent-role permission filtering) |
channels | string | Number of audio channels ("1" for mono, "2" for stereo) |
timestamp | string | Call timestamp in YYYY-MM-DD HH:MM:SS format |
is_golden_data | string | "false" for regular evaluation calls |
file | file | The audio file (MP3, WAV, M4A, or MP4, max 25 MB) |
Example (Python):
import requests
API_URL = "https://api.ema.co/api/v1/external/upload/file"
PERSONA_ID = "your-persona-id"
BEARER_TOKEN = "your-jwt-token"
headers = {
"x-persona-id": PERSONA_ID,
"Authorization": f"Bearer {BEARER_TOKEN}",
}
data = {
"resource_id": "test-call-001",
"agent_id": "agent-uuid",
"agent_email": "[email protected]",
"channels": "1",
"timestamp": "2024-01-15 14:30:00",
"is_golden_data": "false",
}
with open("test_call.wav", "rb") as f:
files = {"file": ("test_call.wav", f, "audio/wav")}
response = requests.post(API_URL, headers=headers, data=data, files=files)
print(response.status_code, response.text)
Expected response: HTTP 200 with a confirmation message.
Verify the Results
- Wait 2 to 5 minutes for processing
- Navigate to the Audit tab
- Your test interaction should appear with a status of "QA completed"
- Click View Details to review the scorecard, transcript, and reasoning
Troubleshooting a Failed Test Call
| Issue | What to Check |
|---|---|
| Unsupported format | Audio must be MP3, WAV, M4A, or MP4. Transcript can be JSON, XML, or HTML. |
| File too large | Must be under 25 MB. Compress or split longer recordings. |
| Poor audio quality | Ensure clear speech. Very short recordings (under 10 seconds) or recordings with no speech may fail. |
| Authentication error | Verify your bearer token is valid and the x-persona-id header matches your AI Employee. |
| AI Employee disabled | Confirm the Enable toggle is set to Enabled. |