Data Feeder

Prev Next

Table of Contents

  1. Overview
  2. Architecture
  3. Key Design Principle
  4. Client Responsibility
  5. Supported Destinations
  6. Event Types
  7. Data Field Reference
  8. Analytics Metrics
  9. Important Notes

Overview

Data Feeder is a publisher/subscriber module within Knovvu Analytics that enables real-time event streaming to external systems. Version 5.24 introduces structured chat transcript format for Kafka data delivery from the Conversational Analytics (CA) system, improving downstream processing and readability.

The module provides a seamless mechanism to push conversation data and analysis results to your data infrastructure as events occur, eliminating the need for batch processing or periodic polling.


Architecture

Data Feeder consists of two core components that work together to deliver events:

Component Description
Data Provider Monitors Knovvu Analytics processing pipeline and raises events when configurable triggers are activated. Acts as the event publisher in the pub/sub model.
Data Connector Subscribes to events from Data Provider and delivers them to configured destinations. Handles connection management, delivery guarantees, and serialization.

Key Design Principle: Minimal Data Delivery

Data Feeder is designed around the principle of delivering the smallest possible data payload for each event. This approach optimizes bandwidth, reduces processing overhead, and ensures timely delivery of critical information.

How it works:

  1. Initial Event (Metadata): When a call is ingested, the ConversationCreatedForDataFeeder event delivers the complete call details including all metadata fields. This establishes the base record with the externalId as the unique identifier.

  2. Subsequent Events: All following events (ConversationAnalyzedForDataFeeder, Category Match, etc.) contain only their specific data plus the externalId reference. They do not duplicate information already sent in the initial event.

  3. Data Assembly: The receiving system uses the externalId to correlate events and build/update the complete conversation record progressively.


Client Responsibility: Data Integrity

With the minimal data delivery model, clients are responsible for maintaining data integrity in their destination systems. This includes:

  • Implementing event handlers that correctly update/amend records based on incoming events
  • Using externalId as the correlation key to link related events
  • Handling event ordering and potential out-of-sequence delivery
  • Managing idempotency for event reprocessing scenarios
  • Designing their data model to support incremental updates

Supported Destinations

Currently Available:

  • Apache Kafka

Additional Integrations:

Other data lake and database integrations (Azure Event Hubs, AWS Kinesis, direct database writes, etc.) can be developed subject to Professional Services engagement.


Event Types

Data Provider raises the following configurable events:

1. ConversationCreatedForDataFeeder

Trigger: Raised immediately when a call is received by Knovvu Analytics

Description: Contains full call details including externalId, timestamps, channel information, participant details, and all associated metadata fields.

Data Structure

{
  "timestampOfMessage": "01/22/2026 08:32:04",
  "eventType": "ConversationCreatedForDataFeeder",
  "payload": {
    "Conversation": {
      "ConversationId": 22,
      "DepartmentId": 3,
      "AgentId": "3a1e7c52-15c4-bbbf-76b7-04bcef21c305",
      "RatingForCSAT": null,
      "RatingForNPS": null,
      "StartTime": "2026-01-22T08:31:59.096197Z",
      "EndTime": "2026-01-22T08:31:59.096197Z",
      "Duration": null,
      "ExternalId": "testsss.wav",
      "LanguageCode": null,
      "AttachedData": [],
      "Call": {
        "DirectionId": 1285,
        "CallerNumber": null,
        "CalledNumber": null,
        "ReleasingPartyId": 1306,
        "HoldCount": 0,
        "TotalHoldDuration": null,
        "MaxHoldDuration": null
      }
    },
    "TenantId": "3a1e7c51-62d8-95c8-852e-2b5c7b042376"
  }
}

Field Reference

Field Name Type Description Example
timestampOfMessage String Event timestamp (MM/DD/YYYY HH:mm:ss) 01/22/2026 08:32:04
eventType String Event type identifier ConversationCreatedForDataFeeder
payload.TenantId GUID Tenant unique identifier 3a1e7c51-62d8-95c8-852e-2b5c7b042376
Conversation.ConversationId Integer Unique conversation ID 22
Conversation.DepartmentId Integer Department identifier 3
Conversation.AgentId GUID Agent unique identifier 3a1e7c52-15c4-bbbf-76b7-04bcef21c305
Conversation.RatingForCSAT Integer? Customer satisfaction score null
Conversation.RatingForNPS Integer? Net Promoter Score null
Conversation.StartTime ISO 8601 Conversation start time (UTC) 2026-01-22T08:31:59.096197Z
Conversation.EndTime ISO 8601 Conversation end time (UTC) 2026-01-22T08:31:59.096197Z
Conversation.Duration Integer? Duration in seconds null
Conversation.ExternalId String External reference ID testsss.wav
Conversation.LanguageCode String? Language code (ISO 639-1) null
Conversation.AttachedData Array Additional metadata []
Call.DirectionId Integer Call direction identifier 1285
Call.CallerNumber String? Caller phone number null
Call.CalledNumber String? Called phone number null
Call.ReleasingPartyId Integer Party who ended call 1306
Call.HoldCount Integer Number of holds 0
Call.TotalHoldDuration Integer? Total hold time (seconds) null
Call.MaxHoldDuration Integer? Max hold time (seconds) null

2. ConversationAnalyzedForDataFeeder

Trigger: Raised when speech analytics processing completes

Description: Contains analysis results (transcription, sentiment, emotions, etc.) with externalId reference to the original conversation.

Data Structure

{
  "timestampOfMessage": "01/22/2026 08:32:30",
  "eventType": "ConversationAnalyzedForDataFeeder",
  "payload": {
    "ConversationExternalId": "testsss.wav",
    "Transcripts": [
      {
        "Channel": 1,
        "Text": "ürün destek şerif ben",
        "Times": "0 40;560 1000;1000 1320;1440 1480",
        "StartTime": 0,
        "EndTime": 1480
      },
      {
        "Channel": 2,
        "Text": "iyi günler kolay gelsin bir fırın ankastre fırın arızamız var",
        "Times": "1700 1740;1900 1940;2700 2740",
        "StartTime": 1700,
        "EndTime": 13580
      }
    ],
    "AgentTensionRatio": 0,
    "AgentMonotonicityRatio": 87,
    "CustomerTensionRatio": 0,
    "AverageCustomerSentimentScore": 0,
    "AverageAgentSentimentScore": 0,
    "AiInsights": {
      "conversationId": 363315,
      "externalId": "cbf1c1ca-d869-18a9-aa73-3a1ad5baad43",
      "topic": "cell phone plans",
      "summary": "A customer inquired about new cell phone plans due to high costs with a competitor. The agent offered a plan with unlimited services and no contract requirements.",
      "actions": "Provided plan details;Confirmed pricing;Assured no contract required",
      "conversationResult": "Customer interested in new plan",
      "NonResolutionRisk": "Low",
      "ChurnRisk": "Low"
    }
  }
}

Field Reference

Field Name Type Description Example
timestampOfMessage String Event timestamp 01/22/2026 08:32:30
eventType String Event type identifier ConversationAnalyzedForDataFeeder
payload.ConversationExternalId String Links to ConversationCreated event testsss.wav
Transcripts[] Array Conversation transcript segments []
Transcripts[].Channel Integer 1=Agent, 2=Customer 1 or 2
Transcripts[].Text String Spoken text "hello how can I help..."
Transcripts[].Times String Word timings: "start end;start end" (milliseconds) "1700 1740;1900 1940"
Transcripts[].StartTime Integer Segment start (milliseconds) 1700
Transcripts[].EndTime Integer Segment end (milliseconds) 13580
AgentTensionRatio Integer Agent tension ratio (0-100) 0
AgentMonotonicityRatio Integer Agent monotonicity ratio (0-100) 87
CustomerTensionRatio Integer Customer tension ratio (0-100) 0
AverageCustomerSentimentScore Integer Average customer sentiment score 0
AverageAgentSentimentScore Integer Average agent sentiment score 0
AiInsights Object? AI-generated conversation insights See AI Insights section

AI Insights (IConversationAiInsightsDto)

Description: AI-generated insights included in ConversationAnalyzedForDataFeeder when available.

Data Structure

{
  "conversationId": 363315,
  "externalId": "cbf1c1ca-d869-18a9-aa73-3a1ad5baad43",
  "topic": "cell phone plans",
  "summary": "A customer inquired about new cell phone plans due to high costs with a competitor. The agent offered a plan with unlimited services and no contract requirements.",
  "actions": "Provided plan details;Confirmed pricing;Assured no contract required",
  "conversationResult": "Customer interested in new plan",
  "NonResolutionRisk": "Low",
  "ChurnRisk": "Low"
}

Field Reference

Field Name Type Description Example
conversationId Integer Unique conversation identifier 363315
externalId GUID External conversation identifier cbf1c1ca-d869-18a9-aa73-3a1ad5baad43
topic String Main topic of conversation cell phone plans
summary String AI-generated conversation summary A customer inquired about...
actions String Actions taken during conversation (semicolon-separated) Provided plan details;Confirmed pricing...
conversationResult String Outcome of conversation Customer interested in new plan
NonResolutionRisk String Risk level for non-resolution Low
ChurnRisk String Customer churn risk level Low

Analytics Metrics Reference

Metric Range Description
AgentTensionRatio 0-100 Ratio of agent's tense speech duration to total agent speech duration
AgentMonotonicityRatio 0-100 Ratio of agent's monotone speech duration to total agent speech duration
CustomerTensionRatio 0-100 Ratio of customer's tense speech duration to total customer speech duration
AverageCustomerSentimentScore Integer Average sentiment score across customer speech segments
AverageAgentSentimentScore Integer Average sentiment score across agent speech segments

Important Notes

Data Types

  • "?" suffix indicates nullable fields (e.g., Integer? means the field can be null)
  • GUID Format: Standard UUID format (e.g., 3a1e7c51-62d8-95c8-852e-2b5c7b042376)

Timestamps

  • All timestamps use ISO 8601 format in UTC timezone
  • Format: YYYY-MM-DDTHH:mm:ss.ffffffZ

Transcript Timing Data

  • Transcripts[].Times format is semicolon-separated pairs of "startMs endMs" for each word
  • Example: "1700 1740;1900 1940;2700 2740"
    • Word 1: 1700-1740ms
    • Word 2: 1900-1940ms
    • Word 3: 2700-2740ms

Channel Values

  • 1 = Agent (customer service representative)
  • 2 = Customer

Event Correlation

  • ExternalId is used to correlate ConversationCreated and ConversationAnalyzed events
  • Event Order: ConversationCreatedForDataFeeder is always sent before ConversationAnalyzedForDataFeeder

AI Insights Availability

  • AI Insights are available only when AI analysis is enabled and completed for the conversation
  • The AiInsights field may be null or absent if AI processing is not configured

Summary

Data Feeder provides an efficient, real-time mechanism to stream Knovvu Analytics events to your data infrastructure. By delivering minimal payloads with reference-based correlation, it enables scalable integration whilst maintaining low latency and bandwidth efficiency.

The structured format introduced in version 5.24 ensures that downstream systems can easily process conversation data, analytics metrics, and AI-generated insights for comprehensive conversation intelligence.