Overview

The Live Agent functionality in jtel Portal enhances call handling by integrating AI-powered live transcription, sentiment analysis, entity extraction, and real-time agent assistance. This feature enables supervisors and agents to process conversations efficiently with AI support.

Features

Live Transcription

AI-Powered Assistance

A chain of AI modules can be attached to the transcription process, offering:

Supervisor Features

Data Storage & Retrieval

Configuration

Resource Activation

Ensure the following resources are allowed (Sysadmin - Resources)

portal.Acd.AcdSupervisor.LiveAgent

portal.Acd.AgentHome.LiveAgent

They Can be assigned per role (Client Admin / Client User).

AI Service Rendering Control

It is possible to control the rendering (visibility) of individual Live Agent AI services via dedicated resources.
Each AI feature (Transcription, Assistant, Sentiment, Suggestions, etc.) has a separate permission resource.

ResourceDescription

portal.Acd.AgentHome.LiveAgent.AI.Transcription

Renders the AI Transcription section.
portal.AgentHome.LiveAgent.AI.AssistantRenders the AI Assistant services (Suggestions, Summary, Sentiment).
portal.Acd.AgentHome.LiveAgent.AI.Assistant.CallerRenders the caller's sentiment analysis.
portal.Acd.AgentHome.LiveAgent.AI.Assistant.AgentRenders the agent's sentiment analysis.
portal.Acd.AgentHome.LiveAgent.AI.Assistant.SugesstionRenders the AI Suggestion section.
portal.Acd.AgentHome.LiveAgent.AI.Assistant.SummaryRenders the AI Summary section.
portal.Acd.AgentHome.LiveAgent.AI.Assistant.SatisfactionRenders the AI Satisfaction section.
portal.Acd.AgentHome.LiveAgent.AI.Assistant.TACRenders the AI Transaction Code section.

Client Master Data - Parameters

In Client Master Data - Parameters. set AI Pipeline Configuration, After Call Pipeline Configuration and Transcription Provider

NameValue
LiveAgent.AIPipeline.EndPointhttp://<server>:<port>/api/v1/aipipeline
LiveAgent.AIPipeline.Input{
    "endpoints": [
        {
            "type": "suggestions",
            "url": "http://<server>:<port>/webhooks/rest/webhook",
            "input": {
                "sender": "%Service.StatisticsPartAID_%",
                "message": "$ai_pipeline_input"
            }
        },
        {
            "type": "sentiment",
            "url": "http://<server>:<port>/api/v1/sentiment",
            "input": {
                "data": "$ai_pipeline_input"
            }
        }
    ]
}
LiveAgent.AfterCallPipeline.EndPointhttp://<server>:<port>/api/v1/aftercall
LiveAgent.AfterCallPipeline.Input{
    "endpoints" : [
        {
            "type" : "summary",
            "url" : "http://<server>:<port>/api/v1/summary",
            "input" : $ai_pipeline_input
        }
    ],
    
    "respondTo" : {
        "host" : "%SERVER_IP_UDP_ADDRESS%",
        "port" : %ACD.UDP.Webserver.Port%,
        "message" : "NONCALL;AI_AFTERCALL_PIPELINE_RESULT;%QueueCheck.AgentDataID%;%Service.StatisticsPartAID_%;AI_PIPELINE_OUTPUT=$ai_pipeline_output"
    }
}

LiveAgent.AfterCallPipeline.Prompts.SatisfactionBot

 # Instructions

Please give me the most likely score from 0 to 10 the caller would give to the net promoter score question regarding his satisfaction in the following conversation. 
Answer with a JSON structure like this:
{
  "score": score
  "reason":"your reason for selecting this score"
}

The score should be a number from 0 to 10 just like the caller might answer the net promoter question.
In the "reason" field please state clearly why you selected this score, including factors or statements in the conversation which led to this conclusion.

VERY IMPORTANT: Provide all answers in the German language.
VERY IMPORTANT: DO NOT RETURN TEXT. Only return a JSON structure as described above and DO NOT return any formatting or markup. Just the JSON structure as text.

# Conversation
{% for entry in conversationData.conversationEntries %}
  {% if entry.source == 'agent' %}
Agent: {{ entry.transcription }}
  {% else %}
Caller: {{ entry.transcription }}
  {% endif %}
{% endfor %}

LiveAgent.AfterCallPipeline.Prompts.SummaryBot.DetectLanguage

 # Instructions

Tell me what language this conversation was held in.
Please provide the answer as one word only - just the language name.

# Conversation
{% for entry in conversationData.conversationEntries %}
  {# Use up to 4 conversation entries for the language detection #}
  {% if loop.index <= 4 %}
    {% if entry.source == 'agent' %}
Agent: {{ entry.transcription }}
    {% else %}
Caller: {{ entry.transcription }}
    {% endif %}
  {% endif %}
{% endfor %}

LiveAgent.AfterCallPipeline.Prompts.SummaryBot.Summarize

 # Instructions

Please summarize only the most important information from this conversation using bullet points in {{ detected_language }}.
Use as much space as you need but only up to 512 characters.
If you need to leave anything out, make sure the most important information is included.
The most important information includes:
- customer numbers
- ticket numbers
- problems and resolutions

# Conversation
{% for entry in conversationData.conversationEntries %}
  {% if entry.source == 'agent' %}
Agent: {{ entry.transcription }}
  {% else %}
Caller: {{ entry.transcription }}
  {% endif %}
{% endfor %}

LiveAgent.AfterCallPipeline.Prompts.TACBot

 # Instructions

Please find the transaction codes (reasons for conversation) which apply to the following conversation.
Please only report transaction codes which actually happened, if nothing applies, then simply report an empty result.
Answer as a JSON array of objects with this structure:
{
   "ID":ID,
   "ExportKey":ExportKey,
   "reason":"your reason for selecting this transaction code"
}

In the "reason" field please state clearly why you selected this transaction code, including the questions or statements in the conversation which led to this conclusion.

VERY IMPORTANT: Provide the reason in German.
VERY IMPORTANT: DO NOT RETURN TEXT. Only return a JSON array as described above and DO NOT return any formatting or markup. Just the JSON as text.

{% if transactionCodes %}
# Transaction Codes
{% for entry in transactionCodes %}

## Transaction Code
ID: {{ entry.ID }}
ExportKey: {{ entry.ExportKey }}
Instructions: {{ entry.LLMPrompt }}
{% endfor %}
{% endif %}

# Conversation
{% for entry in conversationData.conversationEntries %}
  {% if entry.source == 'agent' %}
Agent: {{ entry.transcription }}
  {% else %}
Caller: {{ entry.transcription }}
  {% endif %}
{% endfor %}

LiveAgent.Transcribe.ProviderEnderTuring.v2 (or Azure...)

User Settings

Activate Live Agent functionality per user role:

Licensing & Activation

Example Interface

Agent Home View

Refer to the screenshot below for a visual representation of Live Agent in Agent Home.

Supervisor Detail View

Supervisors can see the agent’s current call, live transcription, and send direct messages to guide the agent during the call.