Skip to main content
The AWS S3 Connector lets you pull conversation recordings and chat transcripts from an S3 bucket into Quality AI Express on a configurable schedule. Use this connector to analyze interactions from third-party Contact Center as a Service (CCaaS) solutions.

Prerequisites

Complete the following before you start.

AWS Requirements

RequirementDetails
S3 bucketCreated in your preferred region with an organized folder structure
IAM permissionsRead-only access (s3:GetObject, s3:ListBucket) via access keys or IAM role
Audio filesWAV or MP3 format, maximum 50 MB each, accessible via HTTPS
Chat filesJSON format
TimestampsISO 8601 format with UTC timezone (YYYY-MM-DDTHH:MM:SSZ)
Test fileA test.csv file with sample data in each configured S3 folder
Required IAM policy:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": ["s3:GetObject", "s3:ListBucket"],
            "Resource": [
                "arn:aws:s3:::your-bucket-name",
                "arn:aws:s3:::your-bucket-name/*"
            ]
        }
    ]
}

Platform Requirements

RequirementDetails
Quality AI ExpressFeature enabled in platform settings
AgentsAll agents onboarded with valid, matching email addresses
QueuesService queues configured and ready for mapping
PermissionsYou have Integrations & Extensions access

Supported Recording Types

TypeFormatFiles per ConversationChannel AssignmentAnalytics
Stereo VoiceWAV/MP31Left = Agent, Right = CustomerFull Analytics
Mono VoiceWAV/MP32 (separate agent/customer files)N/AEnhanced Analytics
Voice TranscriptsJSON1Pre-transcribed audioText Analytics
Chat ScriptsJSON1Message-level attributionFull Text Analytics

Mono Recording Requirement

Mono recordings require two separate audio files — one for the agent and one for the customer. A single mixed mono file is not supported.
SupportedNot Supported
conv-123456-agent.wav (agent only) + conv-123456-customer.wav (customer only)conv-123456-mixed.wav (both speakers combined)
Using a single mixed mono file significantly reduces transcription accuracy.

Data Flow

Architecture

CSV Metadata Formats

Each recording type requires specific CSV fields. The core fields are the same across all types; only the recording-specific fields differ.

Stereo Voice Recordings

Configuration: recordingType = stereo, channelType = voice
FieldRequiredTypeExampleNotes
conversationIdRequiredStringconv-123456Unique identifier, max 50 chars
agentEmailRequiredStringjohn.smith@company.comMust match a platform user account
conversationStartTimeRequiredString2025-04-10T14:30:00ZISO 8601, UTC timezone
conversationEndTimeRequiredString2025-04-10T14:32:45ZMust be after start time
channelTypeRequiredStringvoiceAlways voice for audio
recordingTypeRequiredStringstereoAlways stereo for this format
chatScriptUrlRequiredStringhttps://your-bucket.s3.amazonaws.com/transcripts/chat-123.jsonFull HTTPS URL to JSON transcript file
recordingUrlRequiredStringhttps://s3.amazonaws.com/bucket/conv-123456.wavHTTPS URL
transcriptUrlRequiredStringhttps://your-bucket.s3.amazonaws.com/transcripts/voice-123.jsonFull HTTPS URL to JSON transcript file
queueIdRequiredStringsupport-tier1Must exist in queue mapping
agentChannelRequiredInteger0Agent audio channel (0 = left, 1 = right)
customerChannelRequiredInteger1Customer audio channel (0 = left, 1 = right)
languageOptionalStringenISO 639-1 format, defaults to en
asproviderOptionalStringmicrosoftAudio service provider

Mono Voice Recordings

Configuration: recordingType = mono, channelType = voice
Mono recordings require two separate CSV rows and two audio files per conversation — one for the agent, one for the customer. Use the same conversationId for both rows.
FieldRequiredTypeExampleNotes
conversationIdRequiredStringconv-123456Same ID for both agent and customer rows
agentEmailRequiredStringjohn.smith@company.comMust match a platform user account
conversationStartTimeRequiredString2025-04-10T14:30:00ZISO 8601, UTC timezone
conversationEndTimeRequiredString2025-04-10T14:32:45ZMust be after start time
channelTypeRequiredStringvoiceAlways voice for audio
recordingTypeRequiredStringmonoAlways mono for this format
agentRecordingsRequiredStringhttps://s3.amazonaws.com/bucket/conv-123456-agent.wavURL to agent audio file
customerRecordingsRequiredStringhttps://s3.amazonaws.com/bucket/conv-123456-customer.wavURL to customer audio file
queueIdRequiredStringsupport-tier1Must exist in queue mapping
agentIdOptionalStringagent-789Internal agent identifier
languageOptionalStringenISO 639-1 format, defaults to en
asProviderOptionalStringmicrosoftTranscription provider

Voice Transcripts (Pre-transcribed Audio)

Configuration: recordingType = transcription, channelType = voice Use this format when you have already transcribed your voice recordings and want to import the text for analysis without reprocessing the audio.
FieldRequiredTypeExampleNotes
conversationIdRequiredStringconv-123456Unique identifier, max 50 chars
agentEmailRequiredStringjohn.smith@company.comMust match a platform user account
conversationStartTimeRequiredString2025-04-10T14:30:00ZISO 8601, UTC timezone
conversationEndTimeRequiredString2025-04-10T14:32:45ZMust be after start time
channelTypeRequiredStringvoiceAlways voice for audio transcripts
recordingTypeRequiredStringtranscriptionAlways transcription for this format
transcriptPathRequiredStringtranscripts/voice-123.jsonPath to JSON transcript file
queueIdRequiredStringsupport-tier1Must exist in queue mapping
languageOptionalStringenISO 639-1 format, defaults to en
asProviderOptionalStringmicrosoftOriginal audio service provider

Chat Scripts (Live Chat Interactions)

Configuration: recordingType = transcription, channelType = chat Use this format for live chat interactions from web chat, messaging platforms, or chat-based customer service.
Chat scripts support interactions from platforms including web chat, WhatsApp, and Facebook Messenger.
FieldRequiredTypeExampleNotes
conversationIdRequiredStringconv-123456Unique identifier, max 50 chars
agentEmailRequiredStringjohn.smith@company.comMust match a platform user account
conversationStartTimeRequiredString2025-04-10T14:30:00ZISO 8601, UTC timezone
conversationEndTimeRequiredString2025-04-10T14:45:00ZMust be after start time
channelTypeRequiredStringchatAlways chat for text interactions
recordingTypeRequiredStringtranscriptionAlways transcription for chat
transcriptPathRequiredStringtranscripts/chat-123.jsonPath to JSON transcript file
queueIdRequiredStringsupport-tier1Must exist in queue mapping
languageOptionalStringen-USDefaults to en if not specified
For conversations involving agent or queue transfers, use the queueId of the queue where the conversation ended, and the agentEmail of the agent who closed the conversation.

JSON Transcript Schemas

Voice Transcript Format

Full example:
{
  "recognizedPhrases": [
    {
      "recognitionStatus": "Success",
      "channel": 0,
      "offset": "PT14S",
      "duration": "PT2.4S",
      "offsetInTicks": 140000000.0,
      "durationInTicks": 24000000.0,
      "durationMilliseconds": 2400,
      "offsetMilliseconds": 14000,
      "nBest": [
        {
          "confidence": 0.8205426,
          "lexical": "yes one four three four two six",
          "itn": "yes 143426",
          "maskedITN": "yes one four three four two six",
          "display": "Yes, 143426.",
          "words": [
            {
              "word": "yes",
              "offset": "PT14S",
              "duration": "PT0.32S",
              "offsetInTicks": 140000000.0,
              "durationInTicks": 3200000.0,
              "durationMilliseconds": 320,
              "offsetMilliseconds": 14000,
              "confidence": 0.51653963
            }
          ]
        }
      ]
    }
  ]
}
Required fields only:
{
  "recognizedPhrases": [
    {
      "channel": 0,
      "offsetInTicks": 140000000.0,
      "nBest": [
        {
          "lexical": "yes one four three four two six",
          "words": [
            {
              "word": "yes",
              "offsetInTicks": 140000000.0,
              "durationInTicks": 3200000.0,
              "confidence": 0.51653963
            }
          ]
        }
      ]
    }
  ]
}

Chat Transcript Format

Example:
{
  "1": {
    "type": "AGENT",
    "text": "Good afternoon, how can I help you today?",
    "timestamp": 1749562206000,
    "userId": "john.smith@company.com"
  },
  "2": {
    "type": "USER",
    "text": "I need help with my account balance.",
    "timestamp": 1749562253142,
    "userId": "customer_12345"
  }
}
Required fields:
FieldValuesNotes
typeAGENT, USER, or SYSTEMIdentifies the speaker
textMessage contentThe message text
timestampUnix timestamp in millisecondsMessage time
userIdParticipant identifierAgent email or customer ID

Configuration Steps

Step 1: Prepare Your S3 Environment

Choose a folder structure for your S3 bucket. Option 1: Unified Path (voice and chat in one folder): Unified Path Structure Option 2: Separate Paths (voice and chat in separate folders): Separate Path Structure Before moving on, verify:
  • All audio files are accessible via HTTPS URLs.
  • CSV files contain the required fields with correct column headers.
  • Mono recordings have separate agent and customer files.
  • A test.csv file exists in each configured folder.
  • All file sizes are under 50 MB.
File names should not contain any spaces as a best practice.

Step 2: Add the Connector

  1. Navigate to Quality AI > Configure > Connectors.
  2. Select + Add Connector > Amazon S3 > Connect.
  3. Enter a Name for the connector.
  4. Select your AWS Region.
  5. Choose an Auth Type and enter your credentials:
    • Access Keys: Enter your Access Key and Secret Key.
    • IAM Role: Enter the IAM Role ARN.
  6. Set the folder path:
    • Unified Path: Enter a single path for both voice and chat (for example, s3://your-bucket/conversations/).
    • Separate Paths: Enter a Voice Path and a Chat Path separately.

Step 3: Test the Connection

  1. Select the Test tab in the connector configuration.
  2. Confirm the following checks pass:
    CheckExpected Result
    AuthenticationConnected successfully
    File Path AccessS3 bucket accessible
    File FormatCSV format validated
    Metadata ValidationRequired fields confirmed
  3. If a check fails:
    CheckResolution
    AuthenticationVerify credentials and IAM permissions; ensure they have not expired
    File AccessCheck bucket name, region, and folder paths; confirm file URLs are accessible
    Format/MetadataEnsure test.csv exists with correct structure, column headers, and timestamps

Step 4: Map Queues and Set a Schedule

  1. Navigate to the Queue tab.
  2. Map each queueId value from your CSV files to a queue in Quality AI Express. Values must match exactly.
  3. Navigate to the Schedule tab.
  4. Set the Interval (minutes, hours, or days) and the Start Time (UTC).
  5. Select Save to activate the connector.
Verify the setup is complete:
  • Queue mappings are saved and validated.
  • The processing schedule is active.
  • The first ingestion job appears in the Log tab.
  • No errors appear in the processing logs.
Success indicators:
  • Conversations appear in Quality AI Express dashboards.
  • Analytics data populates for ingested interactions.

Troubleshooting

Authentication Issues

ProblemSymptomResolution
Invalid CredentialsAuthentication failed errorVerify access key and secret key; check IAM role ARN format; ensure credentials haven’t expired
Permission DeniedAccess denied to S3 bucketAdd S3 read permissions to the IAM user or role; verify the bucket policy; confirm the bucket region matches the configuration

Data Processing Issues

ProblemSymptomResolution
Timestamp ErrorsInvalid timestamp formatUse ISO 8601 format (YYYY-MM-DDTHH:MM:SSZ); include UTC timezone; verify end time is after start time

Performance

Processing time is approximately 3–5 minutes per conversation, depending on conversation length, ASR transcription latency (for voice), and LLM response latency.