This is the multi-page printable view of this section.
Click here to print.
Return to the regular view of this page.
AI use cases
Aura AI use cases
Discover the AI global experiences developed by Aura Platform Team for video channels
Aura AI global cases provide different experiences to Telefónica customers for video services. Those video services could be provided by two platforms (one in Spain and GVP, currently in Brazil) and through different media, like Set-Top-Box and mobile apps, Movistar Plus.
Access the left menu and discover the available AI global experiences.
1 - TV LLM Conversational None UC
TV LLM Conversational None UC
Global Use Case developed by Aura Platform Team that informs users of the platform’s available actions, ensuring correct invocation for proper system understanding.
Introduction
The video LLM Conversational None use case is a global experience designed and developed by Aura Global Team that provides Telefónica customers guidance on gaining knowledge of available platform actions and how to perform them correctly.
Find additional information in the following documents:
Specifications
Request-response model
The TV LLM Conversational None UC is adapted to both request-response V1 and to its normalized model V3.
Available channels
The TV LLM Conversational None UC can be enabled in any channel in both v1 and v3 and TV-related payloads.
Use case development
The TV LLM Conversational None UC includes the following components:
Understanding features
- Intent:
intent.conversational.none
Use case logic
Once Aura recognizes the user’s utterance, the UC is resolved via:
1.1 - Dialog configuration
Configuration of the generic-ai-dialog for TV LLM Conversational None UC
How the generic-ai-dialog must be configured for this use case
Specific configuration
The TV LLM Conversational None UC is triggered by the generic-ai-dialog-v1 for channelData v1 or generic-ai-dialog-v3 for channelData v3.
For this use case, the required specific configuration is set below:
Example v1:
{
"name": "generic-ai",
"dialogs": [
{
"id": "generic-ai-dialog-v1",
"onlyIn": [
"set-top-box"
],
"triggerConditions": [
{
"intent": "intent.conversational.none",
"settings": {
"locales": {
"error": [
"tv.error.fpaOrCognitive"
]
}
}
}
]
}
]
}
Example v3:
{
"channelDataVersion": "v3",
"id": "generic-ai-dialog-v3",
"onlyIn": [
"set-top-box",
"global-video-platform"
],
"triggerConditions": [
{
"intent": "intent.conversational.none",
"settings": {
"locales": {
"error": [
"core:flc.answer.error"
]
}
}
}
]
}
1.2 - AI configuration by OB
AI configuration by OB
The following information applies to both Spain and Brazil; there will not be separate blocks for each OB.
Introduction
LLMs UCs are configured and located within the aura-config-provision repository. See the TV LLM Conversational None Preset (notice that in the url, the field [ob] needs to be replaced by [es] or [br])
LLM use cases have been designed to provide a fallback mechanism for user requests that are not currently understood, i.e. return a ‘None’ intent, or when no content is found in the video platform related to it, offering a second chance for classification and response generation.
Intent
The Conversational None Use Case has different invocation points:
- From triage: when the LLM fails to map the user’s input to any known intent often due to ambiguous, incomplete or broad queries (“Uno hacia abajo”, “Sintoniza el canal”, “Cambia cómo suena”).
- From failures or KOs occurring in other supported use cases.
Once the user’s input is classified as intent.conversational.none, the request is routed to the Conversational None Agent, an LLM-based conversational module designed to handle unclassified or unsupported queries with the goal of guiding the user toward valid flows or supported actions within the platform by suggesting possible next steps or rephrasing options.
The conversation is considered complete once the LLM returns a response to the user. Subsequent user inputs will be reprocessed through the full recognition pipeline, including both deterministic and LLM-based intent classifiers.
In the output format, the LLM returns a structured JSON response based on predefined Use Cases configured within the field use_cases in the preset (in args). These Use Cases follow a structured format that includes three fields separated by a pipe (|):
- NAME (mandatory): The name of the Use Case.
- DESCRIPTION (optional): A short explanation or instruction. This field may be empty.
- EXAMPLE (mandatory): A representative user utterance for that Use Case.
Sample extract from use case information:
| NAME |
DESCRIPTION |
EXAMPLE |
| abrir una sección |
Para abrir una sección es necesario mencionar el nombre de la sección que deseas consultar. Algunas son: Deportes, Cine o Series. |
Abrir la sección Deportes |
| Desativar o som |
|
Silencie a TV |
Based on this information and according to matching criteria with the user’s request, the LLM constructs its output response by returning two fields:
- “speak”: intended for voice output to be spoken by the system.
- “text”: displayed on screen as visual feedback within the Video Platform interface.
The content of these fields varies depending on the type of match between user’s input and the predefined Use Cases:
- Single Use Case Match:
- If the Use Case has a description:
- “speak”: this field references the name of the Use Case related to the request, describes its invocation process and includes a relevant example.
- “text”: this field mirrors the example used in “speak”.
- If the Use Case has no description:
- “speak”: this field mentions the name of the Use Case linked to the request and the corresponding example.
- “text”: this field mirrors the example used in “speak”.
- Multiple Use Cases Match:
- “speak”: this field mentions the ambiguity and shows two likely Use Cases with examples.
- “text”: this field includes the same two examples.
- No match:
- “speak”: this field explains the uncertainty and suggests two random valid Use Cases with examples.
- “text”: this field repeats only the examples pertaining to the Use Cases shown in “speak”.
This conditional behavior ensures that the assistant gives relevant, helpful responses tailored to the context of the user’s request.
Examples in Castilian Spanish:
| Type of match |
Input |
Output |
| “Single Use Case no description” |
“Pon la peli desde el principio” |
{{"name": "llm_conversational_none", "arguments": {{ "speak": "Parece que quieres poner un contenido desde el principio. Por ejemplo, prueba a decir Pon Titanic desde el principio.", "text": "Pon Titanic desde el principio"}}}} |
| “Single Use Case with description” |
“Pon cualquier canal” |
{{"name": "llm_conversational_none", "arguments": {{ "speak": "Parece que quieres cambiar de canal. Para cambiar de canal es necesario mencionar el nombre del canal que quieres sintonizar o indicar el número de dial asociado a ese canal. Por ejemplo, prueba a decir Pon el canal Antena 3.", "text": "Pon el canal Antena 3"}}}} |
| “Multiple Use Cases” |
“Volumen” |
{{"name": "llm_conversational_none", "arguments": {{ "speak": "Creo que quieres ejecutar alguna acción relacionada con el volumen. Podría ser bajar el volumen o subir el volumen. Por ejemplo, prueba a decir Baja un poco el volumen o Sube un poco el volumen", "text": "Baja un poco el volumen, Sube un poco el volumen"}}}} |
| “No match” |
“Cántame una canción” |
{{"name": "llm_conversational_none", "arguments": {{ "speak": "No tengo claro a qué te refieres pero sí que puedo cambiar de canal o abrir una sección. Por ejemplo, prueba a decir Pon el canal Antena 3 o Abrir la sección Deportes", "text": "Pon el canal Antena 3, Abrir la sección Deportes"}}}} |
Examples in Brazilian Portuguese:
| Type of match |
Input |
Output |
| “Single Use Case no description” |
“Coloque o filme desde o começo” |
{{"name": "llm_conversational_none", "arguments": {{ "speak": "Parece que você quer colocar um conteúdo desde o começo. Por exemplo, tente dizer Começar desde o início.", "text": "Começar desde o início"}}}} |
| “Single Use Case with description” |
“Coloque qualquer canal |
{{"name": "llm_conversational_none", "arguments": {{ "speak": "Parece que você quer mudar de canal. Para mudar de canal é necessário mencionar o nome do canal que deseja sintonizar. Por exemplo, tente dizer Mudar para o SBT.", "text": "Mudar para o SBT"}}}} |
| “Multiple Use Cases” |
“Volume” |
{{"name": "llm_conversational_none", "arguments": {{ "speak": "Creo que você quer executar alguma ação relacionada ao volume. Pode ser abaixar o volume ou subir o volume. Por exemplo, tente dizer Abaixe o volume ou Suba o volume", "text": "Abaixe o volume, Suba o volume"}}}} |
| “No match” |
“Canta-me uma canção” |
{{"name": "llm_conversational_none", "arguments": {{ "speak": "Não tenho certeza do que você está se referindo mas eu posso mudar de canal ou abrir uma seção. Por exemplo, tente dizer Mudar para o SBT ou Abra Filmes", "text": "Mudar para o SBT, Abra Filmes"}}}} |
2 - TV LLM Conversational Search UC
TV LLM Conversational Search UC
Global use case developed by Aura Platform Team that allows users searching for recommendations by holding a conversation with Aura
Introduction
The video LLM Conversational Search use case is a global experience designed and developed by Aura Global Team that allows Telefónica customers to hold a conversation with Aura for having TV content recommendations using a voice interface.
Find additional information in the following documents:
Specifications
Kernel API
To resolve the user’s request, Aura uses the normalized Video Contents Kernel API.
Request-response model
The Conversational search use case is adapted to both request-response normalized model v3 and v1.
Available channels
The Conversational search use case can be enabled in any channel in both v1 and v3 and TV-related payloads.
Use case development
The Conversational search use case includes the following components:
Understanding features
- Intent:
intent.conversational.search
Use case logic
Once Aura recognizes the user’s utterance, the UC is resolved via:
2.1 - tv-conversational-search-dialog
Description of Aura bot conversational-search-dialog, that is specifically designed to resolve the advanced TV recommendation using LLMs in ATRIA and complex logic resolution.
Introduction
The conversational-search-dialog is specifically designed to resolve the advanced recommendation, using LLMs in ATRIA. Specifically the LLM configured for TV Conversational Search UC.
You can check its source code in Github:
For this use case, the required specific configuration is set below:
{
"channelDataVersion": "v3", // Only in Aura channelData V3 version
"id": "conversational-search-dialog-v3",
"allowAnonymous": true,
"triggerConditions": [
{
"intent": "intent.conversational.search",
"settings": {
"locales": {
"error": [
"core:flc.answer.error"
]
},
"needTvResolution": true
}
}
],
"bypass": {
"duration": 60,
"payloadName": "openai",
"initialData": {},
"recognizersEnabled": true,
"recognizersBreakIntents": {
"intent.tv.display": [],
"intent.navigation.section_show": []
}
}
}
Specific values
| Key |
Value |
Description |
| bypass.duration |
60 (minutes) |
This value overwrites the default aura-bot value for bypass lasting 10 minutes. |
| bypass.payloadName |
openai |
Name of the interface that will be used as bypass payload for this dialog. |
| bypass.initialData |
empty |
It should contain any data needed by the dialog to be initialized. |
| bypass.recognizersEnabled |
true |
This value overwrites the default aura-bot way of working with recognizers when it is in bypass mode. If it is set to true, recognizers are executed, and their result is stored in the bypass payload to be used, if needed, afterwards. |
| bypass.recognizersBreakIntents |
Array of intents |
Used to handle when the user requested any other use case during the execution of the TV Conversational Search UC. |
Configuration by channel
For this dialog it is necessary to add the configuration of applicationId and presetId per channel and intent in the channel model.
For this use case, the required specific configuration per channel is set below:
{
"atria": {
"dialogs": {
"intent.conversational.search": {
"applicationId": "816bdab6-3ea3-4a77-bdea-12945d6d7053",
"presetId": "acdef02f-f810-4474-8143-6b2a04a042f8"
}
}
}
}
Environment variables
| Property |
Type |
Description |
Mandatory |
| AURA_AUTHORIZATION_HEADER |
string |
Authorization header to be sent to AURA_GATEWAY_API_ENDPOINT |
yes |
| AURA_COMPLEX_LOGIC_ENDPOINT |
string |
URL of Complex Logic endpoint to interact with resolution API. |
yes |
| AURA_GATEWAY_API_ENDPOINT |
string |
URL of Aura Gateway API endpoint |
yes |
| AURA_GATEWAY_API_ISSUER_URL |
string |
Issuer URL for token info |
yes |
| AURA_CHANNELDATA_DEFAULT_VERSION |
string |
Default version of channelData. By default 1.0.0. |
no |
| AURA_CHANNELDATA_LA_DEFAULT_VERSION |
string |
Default version of channelData for Latin America. By default 2.0.0. |
no |
| CONVERSATIONAL_SEARCH_MAX_TAGS |
number |
Default number of max tags to manage in the dialog. By default 4. |
no |
| CONVERSATIONAL_SEARCH_TAGS_SCORE_THRESHOLD |
number |
Default number with minimum score threshold required for a tag to be considered relevant in a TV Conversational Search. Value of this variable oscillates between 0 and 1. By default 0. |
no |
How it works
Steps
- The dialog starts by init bypass mode.
- Then, it checks if the iteration comes from the Triage recognizer, by setting the user’s text to the fixed phase of resource:
tv-conversational-search:command.recommend and then calling the AI service.
- If the iteration originated because there were no results, it will return the text obtained from the resource:
tv-conversational-search:command.no-results to the user.
- Then, it calls the AI service to get a generative response based on the intent and the current session ID. The session ID is updated in the context for future requests.
- Next, with the response obtained from the LLM, the user will be composed of the following:
- If the generative response returns command info, It will be checked if the command is
EXIT so the bypass will be closed and the resource: tv-conversational-search:command.exit will be returned to the user.
- If the generative response returns tags info, it calls the complex logic service to get a resolution based on the intent and tags from the generative response. If the tags are not valid or not meet a threshold or there are no results, the resource will be returned:
tv-conversational-search:command.no-results. Instead, ff content exists, it will be returned in the channel data, but the text of the result shown to the user will always be the one obtained from generative response.
- If the generative response returns text info, this text is included in response of user, unless there are no results, as we indicated in the previous paragraph, a specific resource will be returned.
- Finally, it sends the activity to the user and ends the dialog.
- The bypass will only be closed if these two conditions are met:
- The ‘EXIT’ command is detected.
- A new user intent configured that match those configured in the dialog in field:
recognizersBreakIntents.
Sequence diagram
sequenceDiagram
autonumber
participant User
participant Dialog
participant AI Services
participant Complex Logic
Dialog->>Dialog: Open dialog
Dialog->>Dialog: Init bypass mode and check interaction origin
alt interaction origin is no-results
Dialog->>User: Send activity to user with command no-results text
Dialog->>Dialog: End dialog
else interaction origin is triage
Dialog->>Dialog: set text to send LLM with command recommend.
end
Dialog->>Dialog: continue bypass
alt user intent recognized match with break intent configured
Dialog->>Dialog: Close bypass
Dialog->>User: Send activity to user with command exit text
else user intent is not break intent configured
Dialog->>Dialog: continue bypass
Dialog->>AI Services: Call AI service with intent and session ID
AI Services->>Dialog: Return generative response and session ID
alt generative response contains a 'EXIT' command
Dialog->>Dialog: Close bypass
Dialog->>User: Send activity to user with command exit text
Dialog->>Dialog: End dialog
else generative response contains tags
alt tags are valid
Dialog->>Complex Logic: Call complex logic service with intent and tags
Complex Logic->>Dialog: Return resolution
alt No content found in resolution
Dialog->>User: Send activity to user with command no-results text
else Content found
Dialog->>User: Send activity to user with text of generative response and resolution
end
else tags are invalid
Dialog->>User: Send activity to user with command no-results text
end
else generative response contains text
Dialog->>User: Send activity to user with text of generative response
end
end
Dialog->>Dialog: End dialog
2.2 - TV Conversational Search plugin
Complex Logic Framework plugin for the TV Conversational Search use case
TV Conversational Search plugin
Complex Logic Framework plugin for the TV Conversational Search use case
Introduction
The TV Conversational Search plugin resolves requests from a user to obtain personalized recommendations for audiovisual content from Telefónica catalogs.
- Intent:
intent.conversational.search
- Main result intents:
MEDIA.SEARCH (default), CHANNEL.PLAY (when zapping to a live channel).
This step validates that the input request fulfills all the requirements from the input schema.
If the input data is invalid, the resource returned is:
Entities used for search
The plugin works with the following entity types:
| Entity type |
Usage in search |
Notes |
ent.audiovisual_query |
Yes |
Free text query, multiple values accepted with ||. |
Multiple entities & values:
You can repeat the same entity type multiple times and/or provide several values in a single entity using the \|\| separator.
Building the search query
The plugin constructs two query strings:
-
search_query → technical query sent to Kernel API:
- Group query and channel entities in parentheses.
- Joins different entity types with
AND.
- Query: split on ||, trim each value, and join with OR inside the parentheses (no quotes).
- Example:
(mystery OR series)
-
search_query_response → a simplified, user-readable query string included in the payload and telemetry.
If no entities are present, the plugin returns a no results response.
API video query (Handler 4P)
Plugin calls Handler4P.tv_4p_handler.get_user_content_search(...) with the following parameters:
user_id: data[aura_user][user_id]
administrative_number: data[app_context][user][account_number]
access_token: data[aura_user][access_token]
scopes: data[aura_user][scopes]
purposes: data[aura_user][purposes]
device_type: data[app_context][device][type]
catalog_types:
- Default:
VOD, LIVE, L7D
- Allowed:
VOD, LIVE, L7D, LCH, LSR
- Filtered according to
allowed_catalog_types of the device
search_query: built as explained above
show_series: series
profile: data[app_context][user][video_profile_name] (optional; only if present to avoid API 501 errors)
commercialization_types: [SVOD]
max_quality: data[app_context][device][max_quality] (optional)
current_region: data[app_context][location][currentRegion] (optional)
order: personal
Response logic
Depending on the number and type of results, the plugin builds different responses:
1. No results
- Plays negative sound unless the channel is disabled in the
sound_disabled_channels configuration
result_intent: MEDIA.SEARCH
- Resource:
tv:video.conversational.search.no-results
- Status:
SUCCESS.NO_CONTENT
2. One result
- Live channel:
- Payload:
{ type: details, data: <channel info> }
- Action:
REMOTEON.ZAPTO (with params channelId and deviceId)
- Plays positive sound
result_intent: CHANNEL.PLAY
- Resource:
tv:video.conversational.search.single-result
- Non-live content (VOD, L7D, etc.):
- Payload: details of the single item
- Plays positive sound unless the channel is disabled in the
sound_disabled_channels configuration
result_intent: MEDIA.SEARCH
- Resource:
tv:video.conversational.search.by-default.simple-result
3. Multiple results
- Payload: list of items
- Plays positive sound unless the channel is disabled in the
sound_disabled_channels configuration
result_intent: MEDIA.SEARCH
- Resource:
tv:video.conversational.search.multiple-results (with param query_displayed)
Resources returned
The TV Recommend plugin may return the following resources:
tv:video.model-validation.request.error → input validation error
tv:video.api.answer.error → API Video error
tv:video.conversational.search.no-results → no content found
tv:video.conversational.search.by-default.simple-result → one non-live result
tv:video.conversational.search.multiple-results → multiple results
tv:video.conversational.search.display.single-result → one live channel (tune channel)
Payload and actions
-
Payload:
type: details (single item) or content_list (multiple items)
data: item(s) from Kernel API
- For multiple results: includes
search_query (human-readable string)
-
Actions:
- Sound feedback (positive/negative)
- For a single live channel:
{"name": "REMOTEON.ZAPTO", "params": {"channelId": "$channelId", "deviceId": "$deviceId"}, "target": "stb"}
Status codes
status: Final status request. This field includes the following parameters:
code: Status code with value: SUCCESS, SUCCESS.NO_CONTENT or ERROR.INTERNAL.
message: Status message, which describes the status code.
params: Parameter that sends details of status. This field does not appear if it is empty.
Example behavior
- “Recommend me something”
- for a single live channel result →
CHANNEL.PLAY tune channel with live channel.
- for a multiple results →
MEDIA.SEARCH with tv:video.conversational.search.multiple-results.
- for any results →
tv:video.conversational.search.no-results.
2.3 - TV Conversational Search UC resources
TV LLM Conversational Search UC resources
Resources used by the TV LLM Conversational Search UC
Introduction
The TV LLM Conversational Search UC will use three different types of resources:
Specific resources for the use case: TV LLM Conversational Search
In case the LLM Conversational Search does not return the text to be shown to the user, the resources from TV Conversational Search plugin would be used
The resources associated to aura-bot are defined below:
| Specific resources for TV LLM Conversational Search use case |
Definition |
Example |
Managed by |
Scope |
tv-conversational-search:command.exit |
Resource returned when the user sends a message to stop the dialog and launch a different UC |
Entendido. Recuerda que puedes volver a probarlo diciendo “Recomendador avanzado" |
conversational-search dialog |
Use case-specific |
tv-conversational-search:command.close.words |
Resource returned when the user sends a message to stop the dialog. By default, it is not configured. |
Salir, cerrar, goodbye, exit, quit |
conversational-search dialog dialog |
Use case-specific |
tv-conversational-search:command.no-results |
Resource returned in case there is no results |
Ahora mismo no encuentro resultados, pero si me dices un género o tu estado de ánimo te sugiero algo. |
conversational-search dialog |
Use case-specific |
tv-conversational-search:command.recommend |
Resource used to call the LLM with a fixed phrase when the request comes from triage |
Recomendación avanzada |
conversational-search dialog |
Use case-specific |
The resources associated to the TV LLM Conversational Search plugin are defined below:
| Specific resources for TV LLM Conversational Search use case |
Definition |
Example |
Managed by |
Scope |
tv:video.conversational.by-default.simple-result |
Resource returned when finds one result as recommendation |
Here is a suggestion |
tv.recommend plugin |
Use case-specific |
tv:video.conversational.multiple-results |
Resource returned when finds more than one result as recommendation |
Here are some suggestions |
tv.recommend plugin |
Use case-specific |
tv:video.conversational.display.single-result |
Resource returned when one live channel is recommended and starts playback |
Tuning to channel |
tv.recommend plugin |
Use case-specific |
tv:video.conversational.no-results |
Resource returned when does not find any result as recommendation |
Nothing found |
tv.recommend plugin |
Use case-specific |
2.4 - AI configuration by OB
AI configuration by OB
The following information applies to both Spain and Brazil; there will not be separate blocks for each OB.
Introduction
LLMs UCs are configured and located within the aura-config-provision repository. See the TV LLM Conversational Search Preset (notice that in the url, the field [ob] needs to be replaced by [es] or [br])
LLM use cases have been designed to provide a fallback mechanism for user requests that are not currently understood, i.e. return a ‘None’ intent, or when no content is found in the video platform related to it, offering a second chance for classification and response generation.
Intent
The Conversational Search use case has different invocation points:
- From triage: when the LLM identifies that the user’s intention is to perform an open search or to get an advanced recommendation (“Recomiéndame algo para ver”, “Quiero ver algo divertido”, “Ponme con el recomendador”)
- Fallback for the TV Search deterministic use case and for the TV LLM Search UC for user’s requests with 0 results or KO.
Once the user’s request is classified under intent.conversational.search, the user will enter into a conversation with the LLM Conversational Search agent. During this conversation, the agent will attempt to refine the user’s search criteria to try to lead the user to content that is available on the platform according to the available thematic categories also called tags (e.g., “Amor imposible”, “Persecuciones”, “Psicópatas”).
The conversation can be ended through various means:
- By breaking intents:
- ES:
intent.tv.display (contents & channels) and intent.navigation.section_show (sections, apps…)
- BR:
intent.tv.display (channels), intent.tv.app_open (apps/third party platforms) and intent.navigation.section_show (sections)
-
By breaking command: EXIT (“Salir”, “Abandonar”, “Quiero irme ya”, “Eu quero sair daqui”, “Terminei”)
-
When the user clicks on one of the contents that appears on the screen in response to their request
In the output format, the identified categories, their score, and the text for the user will be included without exceeding the 115-character limit.
The number of tags will vary depending on different cases:
- Returning 0 when it is identified that the user wants to leave the conversation (breaking command)
- Returning 1 when the category mentioned by the user matches one from the available list
- Returning 3 for cases such as:
- No categories are identified in the user’s request
- The user wants to see the full list of categories or any recommendation in general
The list of thematic categories is configured within the field tags in the preset (in args) with a format of comma-separated items enclosed in square brackets ([tag1, tag2, tag3, tag4…]).
Examples:
| Input |
Output |
| “Suficiente, quiero salir” |
{"name": "llm_conversational_search", "arguments": {"command": "EXIT"} |
| “Me apetece ver algo de amor” |
{"name": "llm_conversational_search", "arguments": {"text": "Aquí tienes algo sobre la temática: Amor", "command": "", "tags":[{ "tag": "Amor", "score": 0.98 }]}} |
| “Me gustaría ver contenido de aviones” |
{"name": "llm_conversational_search", "arguments": {"text": "No he encontrado nada relacionado pero puedes explorar categorías como: Épico, Bélico o Crimen fallido", "command": "", "tags":[{ "tag": "Épico", "score": 0.98 }, { "tag": "Bélico", "score": 0.92 }, { "tag": "Crimen fallido", "score": 0.89}]}} |
| “¿Qué categorías tienes disponibles?” |
{"name": "llm_conversational_search", "arguments": {"text": "Estas son algunas de las categorías que puedes explorar: Amor, Crisis de pareja o Reencuentros amorosos","command": "", "tags":[{ "tag": "Amor", "score": 0.93 }, { "tag": "Crisis de pareja", "score": 0.87 }, { "tag": "Reencuentros amorosos", "score": 0.77 }]}} |
3 - TV LLM Recommend UC
TV LLM Recommend UC
Global use case developed by Aura Platform Team that allows users to get personalized TV/video recommendations in Aura
Introduction
The video LLM Recommend use case is a global experience designed and developed by Aura Global Team that allows Telefónica customers to ask Aura for content recommendations (live channels and catalog items) using a voice interface.
Find additional information in the following documents:
Specifications
Kernel API
To resolve the user’s request, Aura uses the normalized Video Contents Kernel API.
Request-response model
The TV LLM Recommend UC is available only when using the normalized request-response model v3.
Available channels
The TV LLM Recommend UC can be enabled in any channel implementing the normalized v3 request-response model and TV-related payloads.
TV LLM Recommend features
The normalized TV LLM Recommend UC includes personalized recommendations:
- Suggest a single live channel (with a zap action).
- Suggest a single catalog item (e.g., VOD).
- Suggest a list of items when multiple results are available.
- Return no content when the API returns no results.
Current limitations
Currently, the TV LLM Recommend UC does not include:
- Fallback/contingency search (as in TV search).
- Filters customized (as persons, genres, participants, …).
- Third-party catalogs outside Aura/Kernel scope.
Use case development
The TV LLM Recommend UC includes these components:
Understanding features
- Intent:
intent.tv.recommend
Use case logic
Once Aura recognizes the user’s utterance, the UC is resolved via:
Response
The response follows the standard video plugin response schema.
Where:
-
intent: input intent.
-
entities: input entities as received.
-
result_intent: usually MEDIA.SEARCH; CHANNEL.PLAY is used when returning a single live channel.
-
resources: List of response resources that includes three main parameters:
type: Type of the response resource.
name: Name of the response resource. Example: tv:video.recommend.multiple-results, tv:video.recommend.by-default.simple-result, tv:video.recommend.display.single-result, tv:video.recommend.no-results.
params: This field returns any required parameter in the resource. Example: channelId or deviceId for tv:video.recommend.display.single-result.
-
payload: Information provided by the Kernel API, when we make the content get info request.
If we receive a response, this field includes the following parameters:
type: The value of this field depends on the type of data included in the field data (info returned by the API):
- If it is a value:
details
- If it is a list:
content_list
data: It returns the information provided by the Kernel API.
-
status: Final status request. This field includes the following parameters:
code: Status code.
message: Status message, which describes the status code.
params: Parameter that sends details of status. This field does not appear if it is empty.
-
actions: Actions to follow with the result of request. This plugin could include the following actions:
REMOTEON.ZAPTO: Used to tune a live channel on STB.
-
conditions: conditions for actions to be applied.
3.1 - Dialog configuration
Configuration of the generic-dialog for TV Recommend use case
How the generic-dialog must be configured for this use case
Specific configuration
The TV Recommend use case is triggered by the generic-dialog-v3.
For this use case, the required configuration is:
{
"id": "generic-dialog-v3",
"channelDataVersion": "v3",
"triggerConditions": [
{
"intent": "intent.tv.recommend",
"settings": {
"locales": {
"error": [
"core:flc.answer.error"
]
},
"needTvResolution": true,
"payloadType": "tv"
}
}
]
}
3.2 - TV Recommend plugin
Complex Logic Framework plugin for the TV Recommend use case
TV Recommend plugin
Complex Logic Framework plugin for the TV Recommend use case
Introduction
The TV Recommend plugin resolves requests from a user to obtain personalized recommendations for audiovisual content from Telefónica catalogs.
- Intent:
intent.tv.recommend
- Main result intents:
MEDIA.SEARCH (default), CHANNEL.PLAY (when zapping to a live channel).
This step validates that the input request fulfills all the requirements from the input schema.
If the input data is invalid, the resource returned is:
Entities used for search
The plugin works with the following entity types:
| Entity type |
Usage in search |
Notes |
ent.audiovisual_channel |
Yes |
Multiple values accepted, separated by ||. |
ent.audiovisual_person |
Yes |
For participants (actors, directors, presenters, etc.), multiple values accepted with ||. |
ent.audiovisual_query |
Yes |
Free text query, multiple values accepted with ||. |
Multiple entities & values:
You can repeat the same entity type multiple times and/or provide several values in a single entity using the \|\| separator.
Building the search query
The plugin constructs two query strings:
-
search_query → technical query sent to Kernel API:
-
search_query_response → a simplified, user-readable query string included in the payload and telemetry.
If no entities are present, the plugin returns a no results response.
API video query (Handler 4P)
Plugin calls Handler4P.tv_4p_handler.get_user_content_search(...) with the following parameters:
user_id: data[aura_user][user_id]
administrative_number: data[app_context][user][account_number]
access_token: data[aura_user][access_token]
scopes: data[aura_user][scopes]
purposes: data[aura_user][purposes]
device_type: data[app_context][device][type]
catalog_types:
- Default:
VOD, LIVE, L7D
- Allowed:
VOD, LIVE, L7D, LCH, LSR
- Filtered according to
allowed_catalog_types of the device
search_query: built as explained above
show_series: series
profile: data[app_context][user][video_profile_name] (optional; only if present to avoid API 501 errors)
commercialization_types: [SVOD]
max_quality: data[app_context][device][max_quality] (optional)
current_region: data[app_context][location][currentRegion] (optional)
order: personal
Response logic
Depending on the number and type of results, the plugin builds different responses:
1. No results
- Plays negative sound unless the channel is disabled in the
sound_disabled_channels configuration
result_intent: MEDIA.SEARCH
- Resource:
tv:video.recommend.no-results
- Status:
SUCCESS.NO_CONTENT
2. One result
- Live channel:
- Payload:
{ type: details, data: <channel info> }
- Action:
REMOTEON.ZAPTO (with params channelId and deviceId)
- Plays positive sound unless the channel is disabled in the
sound_disabled_channels configuration
result_intent: CHANNEL.PLAY
- Resource:
tv:video.recommend.display.single-result
- Non-live content (VOD, L7D, etc.):
- Payload: details of the single item
- Plays positive sound
result_intent: MEDIA.SEARCH
- Resource:
tv:video.recommend.by-default.simple-result
3. Multiple results
- Payload: content list and
search_query (search query response string)
- Plays positive sound unless the channel is disabled in the
sound_disabled_channels configuration
result_intent: MEDIA.SEARCH
- Resource:
tv:video.recommend.multiple-results (with param query_displayed)
Resources returned
The TV Recommend plugin may return the following resources:
tv:video.model-validation.request.error → input validation error
tv:video.api.answer.error → API Video error
tv:video.recommend.no-results → no content found
tv:video.recommend.by-default.simple-result → one non-live result
tv:video.recommend.multiple-results → multiple results
tv:video.recommend.display.single-result → one live channel (tune channel)
Payload and actions
-
Payload:
type: details (single item) or content_list (multiple items)
data: item(s) from Kernel API
- For multiple results: includes
search_query (human-readable string)
-
Actions:
- Sound feedback (positive/negative)
- For a single live channel:
{"name": "REMOTEON.ZAPTO", "params": {"channelId": "$channelId", "deviceId": "$deviceId"}, "target": "stb"}
Status codes
status: Final status request. This field includes the following parameters:
code: Status code with value: SUCCESS, SUCCESS.NO_CONTENT or ERROR.INTERNAL.
message: Status message, which describes the status code.
params: Parameter that sends details of status. This field does not appear if it is empty.
Example behavior
- “Recommend me something”
- for a single live channel result →
CHANNEL.PLAY tune channel with live channel.
- for a multiple results →
MEDIA.SEARCH with tv:video.recommend.multiple-results.
- for any results →
tv:video.recommend.no-results.
3.3 - TV LLM Recommend UC resources
TV LLM Recommend UC resources
Resources used by the TV LLM Recommend UC
Introduction
The TV LLM Recommend UC will use three different types of resources:
Specific resources for the use case: TV LLM Recommend
The resources associated to the TV LLM Recommend plugin are defined below:
| Specific resources for TV LLM Search use case |
Definition |
Example |
Managed by |
Scope |
tv:video.recommend.by-default.simple-result |
Resource returned when finds one result as recommendation |
Here is a suggestion |
tv.recommend plugin |
Use case-specific |
tv:video.recommend.multiple-results |
Resource returned when finds more than one result as recommendation |
Here are some suggestions |
tv.recommend plugin |
Use case-specific |
tv:video.recommend.display.single-result |
Resource returned when one live channel is recommended and starts playback |
Tuning to channel |
tv.recommend plugin |
Use case-specific |
tv:video.recommend.no-results |
Resource returned when does not find any result as recommendation |
Nothing found |
tv.recommend plugin |
Use case-specific |
3.4 - AI configuration by OB
AI configuration by OB
The following information applies to both Spain and Brazil; there will not be separate blocks for each OB.
Introduction
LLMs UCs are configured and located within the aura-config-provision repository. See the TV LLM Search Preset (notice that in the url, the field [ob] needs to be replaced by [es] or [br])
LLM use cases have been designed to provide a fallback mechanism for user requests that currently return a ‘None’ intent or zero results, offering a second chance for classification and response generation.
Intent
intent.tv.recommend: This intent will be returned when the user seeks TV content recommendations and explicitly refers to entities such as genres, subgenres, titles, sports-related content, directors, or actors. Example: “¿Qué documentales me recomiendas?”.
Entities
Three different entities can be returned if mentioned by the user:
entities.channel: This entity will be returned whenever there is a mention of a TV channel or a third-party TV platform in the user’s request.
entities.person: This entity will be returned whenever a proper name belonging to an actor, actress, director, driver, boxer, or other public figure is mentioned in the user’s request.
entities.query: This entity will be returned when any relevant information for performing a search on the platform is mentioned in the user’s request. (e.g., TV titles, genres, subgenres)
Examples:
| Input |
Output |
| “Recomiéndame algún documental sobre historia” |
{"intent": "intent.tv.recommend", "entities.query": "documental||historia"} |
| “¿Qué películas de acción me recomiendas?” |
{"intent": "intent.tv.recommend", "entities.query": "películas||acción"} |
4 - TV LLM Search UC
TV LLM Search UC
Global use case developed by Aura Platform Team that allows users to search specific TV content in Aura
Introduction
The video LLM Search use case is a global experience designed and developed by Aura Global Team that allows Telefónica customers to ask Aura for TV content (live content and catalog items) using a voice interface.
Find additional information in the following documents:
Specifications
Kernel API
To resolve the user’s request, Aura uses the normalized Video Contents Kernel API.
Request-response model
The TV LLM Search UC is adapted to the normalized request-response model v3.
Available channels
The TV LLM Search UC can be enabled in any channel implementing the normalized v3 request-response model and TV-related payloads.
TV LLM Search features
The normalized TV LLM Search UC includes basic retrieval features for entertainment content:
- Search by channel (including live channels and third-party streaming platforms).
- Search by person (e.g., presenters/actors).
- Search by free-form query strings. (e.g., TV content titles, genres, subgenres, …).
- Support for multiple values per entity.
When a single live content is unambiguously found, the plugin can trigger a channel tune action (REMOTEON.ZAPTO) to start playback on the STB.
Current limitations
Currently, the TV LLM Search UC does not include:
- Contingency/fallback search mode (no secondary search if zero results).
- Temporal filters (time intervals).
- Third-party catalogs outside Aura/Kernel scope.
Use case development
The TV LLM Search UC includes the following components:
Understanding features
| Entity |
Example (utterance) |
Notes |
ent.audiovisual_channel |
“Pon #0” / “Abrir Movistar LaLiga” |
Multiple channels allowed via canon with ` |
ent.audiovisual_person |
“Lo de Broncano” |
Multiple persons allowed via canon with ` |
ent.audiovisual_query |
“noticias Oviedo” |
Multiple tokens allowed via canon with ` |
⚠️ NLP should provide the canon field concatenated with || (double pipe) when multiple values are recognized (see NLP configuration)
⚠️ Other entities (e.g., time, devices, etc.) are not used by this plugin and should be omitted for this UC.
Use case logic
Once Aura recognizes the user’s utterance, the UC is resolved via:
Response
The response follows the standard video plugin response schema.
Where:
-
intent: input intent.
-
entities: input entities as received.
-
result_intent: usually MEDIA.SEARCH; CHANNEL.PLAY is used when returning a single live channel.
-
resources: List of response resources that includes three main parameters:
type: Type of the response resource.
name: Name of the response resource. Example: tv:video.retrieve.multiple-results, tv:video.retrieve.by-default.simple-result, tv:video.retrieve.display.single-result, tv:video.retrieve.no-results.
params: This field returns any required parameter in the resource. Example: queryDisplayed.
-
payload: Information provided by the Kernel API, when we make the content get info request.
If we receive a response, this field includes the following parameters:
type: The value of this field depends on the type of data included in the field data (info returned by the API):
- If it is a value:
details
- If it is a list:
content_list
data: It returns the information provided by the Kernel API.
-
status: Final status request. This field includes the following parameters:
code: Status code.
message: Status message, which describes the status code.
params: Parameter that sends details of status. This field does not appear if it is empty.
-
actions: Actions to follow with the result of request. This plugin could include the following actions:
REMOTEON.ZAPTO: Used to tune a live channel on STB.
-
conditions: conditions for actions to be applied.
4.1 - Dialog configuration
Configuration of the generic-ai-dialog for TV LLM Search UC
How the generic-ai-dialog must be configured for this use case
Specific configuration
The TV LLM Search UC is triggered by the generic-ai-dialog-v1 for channelData v1 or generic-ai-dialog-v3 for channelData v3.
For this use case, the required specific configuration is set below:
Example v1:
{
"id": "generic-ai-dialog-v3",
"onlyIn": [
"movistar-plus"
],
"triggerConditions": [
{
"intent": "intent.tv.retrieve",
"settings": {
"locales": {
"error": [
"tv:tv.error.fpaOrCognitive"
]
},
"payloadType": "tv"
}
}
]
}
Example v3:
{
"id": "generic-ai-dialog-v1",
"onlyIn": [
"movistar-plus"
],
"triggerConditions": [
{
"intent": "intent.tv.retrieve",
"settings": {
"locales": {
"error": [
"tv:tv.error.fpaOrCognitive"
]
},
"payloadType": "tv"
}
}
]
}
4.2 - TV Retrieve plugin for LLM Search UC
Complex Logic Framework TV Retrieve plugin for the TV LLM Search UC
TV Retrieve plugin for LLM Search UC
Complex Logic Framework TV Retrieve plugin for the TV LLM Search UC
Introduction
The TV Retrieve plugin for LLM Search UC resolves requests from a user to search and retrieve audiovisual content from Telefónica catalogs.
- Intent:
intent.tv.retrieve
- Main result intents:
MEDIA.SEARCH (default), CHANNEL.PLAY (when zapping to a live channel).
This step validates that the input request fulfills all the requirements from the input schema.
If the input data is invalid, the resource returned is:
Entities used for search
The plugin works with the following entity types:
| Entity type |
Usage in search |
Notes |
ent.audiovisual_channel |
Yes |
Multiple values accepted, separated by ||. |
ent.audiovisual_person |
Yes |
For participants (actors, directors, presenters, etc.), multiple values accepted with ||. |
ent.audiovisual_query |
Yes |
Free text query, multiple values accepted with ||. |
Multiple entities & values:
You can repeat the same entity type multiple times and/or provide several values in a single entity using the \|\| separator.
Building the search query
The plugin constructs two query strings:
-
search_query → technical query sent to Kernel API:
-
search_query_response → a simplified, user-readable query string included in the payload and telemetry.
If no entities are present, the plugin returns a no results response.
API video query (Handler 4P)
Plugin calls Handler4P.tv_4p_handler.get_user_content_search(...) with the following parameters:
user_id: data[aura_user][user_id]
administrative_number: data[app_context][user][account_number]
access_token: data[aura_user][access_token]
scopes: data[aura_user][scopes]
purposes: data[aura_user][purposes]
device_type: data[app_context][device][type]
catalog_types:
- Default:
VOD, LIVE, L7D
- Allowed:
VOD, LIVE, L7D, LCH, LSR
- Filtered according to
allowed_catalog_types of the device
search_query: built as explained above
show_series: series
profile: data[app_context][user][video_profile_name] (optional; only if present to avoid API 501 errors)
commercialization_types: [SVOD]
max_quality: data[app_context][device][max_quality] (optional)
current_region: data[app_context][location][currentRegion] (optional)
Response logic
Depending on the number and type of results, the plugin builds different responses:
1. No results
- Plays negative sound unless the channel is disabled in the
sound_disabled_channels configuration
result_intent: MEDIA.SEARCH
- Resource:
tv:video.retrieve.no-results
- Status:
SUCCESS.NO_CONTENT
2. One result
- Live channel:
- Payload:
{ type: details, data: <channel info> }
- Action:
REMOTEON.ZAPTO (with params channelId and deviceId)
- Plays positive sound unless the channel is disabled in the
sound_disabled_channels configuration
result_intent: CHANNEL.PLAY
- Resource:
tv:video.retrieve.display.single-result
- Non-live content (VOD, L7D, etc.):
- Payload: details of the single item
- Plays positive sound
result_intent: MEDIA.SEARCH
- Resource:
tv:video.retrieve.by-default.simple-result
3. Multiple results
- Payload: content list and
search_query (search query response string)
- Plays positive sound unless the channel is disabled in the
sound_disabled_channels configuration
result_intent: MEDIA.SEARCH
- Resource:
tv:video.retrieve.multiple-results (with param query_displayed)
Resources returned
The TV Retrieve plugin for LLM Search UC may return the following resources:
tv:video.model-validation.request.error → input validation error
tv:video.api.answer.error → API Video error
tv:video.retrieve.no-results → no content found
tv:video.retrieve.by-default.simple-result → one non-live result
tv:video.retrieve.multiple-results → multiple results
tv:video.retrieve.display.single-result → one live channel (tune channel)
Payload and actions
-
Payload:
type: details (single item) or content_list (multiple items)
data: item(s) from Kernel API
- For multiple results: includes
search_query (human-readable string)
-
Actions:
- Sound feedback (positive/negative)
- For a single live channel:
{"name": "REMOTEON.ZAPTO", "params": {"channelId": "$channelId", "deviceId": "$deviceId"}, "target": "stb"}
Status codes
status: Final status request. This field includes the following parameters:
code: Status code with value: SUCCESS, SUCCESS.NO_CONTENT or ERROR.INTERNAL.
message: Status message, which describes the status code.
params: Parameter that sends details of status. This field does not appear if it is empty.
Example behavior
-
“Put La 1” → detects ent.audiovisual_channel with value "La 1" → single live channel result → CHANNEL.PLAY tune channel with live channel.
-
“I want something with Brad Pitt” → detects ent.audiovisual_person with value "Brad Pitt" → multiple results → MEDIA.SEARCH with tv:video.retrieve.multiple-results.
-
“Mystery series” → detects audiovisual_query with value "Mystery series" → if no results → tv:video.retrieve.no-results.
4.3 - TV LLM Search UC resources
TV LLM Search UC resources
Resources used by the TV LLM Search UC
Introduction
The TV LLM Search UC will use three different types of resources:
Specific resources for the use case: TV LLM Search
The resources associated to the TV LLM Search plugin are defined below:
| Specific resources for TV LLM Search use case |
Definition |
Example |
Managed by |
Scope |
tv:video.retrieve.by-default.simple-result |
Resource returned when the search finds one result |
Here is the content I found |
tv.retrieve plugin |
Use case-specific |
tv:video.retrieve.multiple-results |
Resource returned when the search finds more than one result |
Here are the contents I found |
tv.retrieve plugin |
Use case-specific |
tv:video.retrieve.display.single-result |
Resource returned when the search finds a single live channel and starts playback |
Tuning to channel with live channel |
tv.retrieve plugin |
Use case-specific |
tv:video.retrieve.no-results |
Resource returned when the search does not find any result |
I haven’t found anything |
tv.retrieve plugin |
Use case-specific |
4.4 - AI configuration by OB
AI configuration by OB
The following information applies to both Spain and Brazil; there will not be separate blocks for each OB.
Introduction
LLMs UCs are configured and located within the aura-config-provision repository. See the TV LLM Search Preset (notice that in the url, the field [ob] needs to be replaced by [es] or [br])
LLM use cases have been designed to provide a fallback mechanism for user requests that currently return a ‘None’ intent or zero results, offering a second chance for classification and response generation.
Intents
Once the triage has classified the user’s petition under the intent intent.tv.retrieve, the user’s petition can be further classified into the following intents or UCs:
intent.tv.recommend: This intent will be returned when the user seeks TV content recommendations and explicitly refers to entities such as genres, subgenres, titles, sports-related content, directors, or actors. Example: “¿Qué documentales me recomiendas?”.
intent.tv.retrieve: This intent will be returned when the user is searching for either generic or specific TV content. Example: “Muestra películas dirigidas por Quentin Tarantino”.
intent.tv.none: This intent will be returned for any request that is not covered by the two use cases outlined above. Examples: “Cambia a Telecinco”, “Avanza 5 minutos”, “Pon una alarma”.
Entities
Three different entities can be returned if mentioned by the user:
entities.channel: This entity will be returned whenever there is a mention of a TV channel or a third-party TV platform in the user’s request.
entities.person: This entity will be returned whenever a proper name belonging to an actor, actress, director, driver, boxer, or other public figure is mentioned in the user’s request.
entities.query: This entity will be returned when any relevant information for performing a search on the platform is mentioned in the user’s request. (e.g., TV titles, genres, subgenres)
In the output format, the only mandatory field is that of the intent.
Entities are optional, as they may or may not be mentioned in the user’s request. If multiple values are present for an entity type, values must be separated by a double pipe “||”.
Examples:
| Input |
Output |
| “Pon películas de Netflix de Almodovar y Tarantino” |
{"intent": "intent.tv.retrieve", "entities.channel": "Netflix", "entities.person": "Almodovar||Tarantino", "entities.query": "películas"} |
| “Pon la película Titanic” |
{"intent": "intent.tv.retrieve", "entities.query": "película||Titanic"} |
| “Pon antena 3” |
{"intent": "intent.tv.none", "entities.channel": "antena 3"} |
| “¿Qué películas de acción me recomiendas?” |
{"intent": "intent.tv.recommend", "entities.query": "películas||acción"} |
5 - TV LLM Triage UC
TV LLM Triage UC
Global use case developed by Aura Platform Team that routes unanswered or unclassified requests to different LLMs
Introduction
The video LLM Triage use case is a global experience designed and developed by Aura Global Team that routes unanswered or unclassified requests to different LLMs to improve the chances of returning relevant results to the user.
Find additional information in the following documents:
5.1 - AI configuration by OB
AI configuration by OB
The following information applies to both Spain and Brazil; there will not be separate blocks for each OB.
Introduction
LLMs UCs are configured and located within the aura-config-provision repository. See the TV LLM Triage Preset (notice that in the url, the field [ob] needs to be replaced by [es] or [br])
LLM use cases have been designed to provide a fallback mechanism for user requests that currently return a ‘None’ intent or zero results, offering a second chance for classification and response generation.
Intents
This UC can classify the user’s query into three different intents:
intent.tv.retrieve: This intent will be returned when the user is searching for either generic or specific TV content or when the user seeks TV content recommendations and explicitly refers to TV content entities. Examples: “Muestra películas dirigidas por Quentin Tarantino”, “¿Qué documentales me recomiendas?”.
intent.conversational.search: This intent will be returned for user queries involving generic searches or advanced suggestions that do not explicitly reference TV content entities. Examples: “Recomendaciones avanzadas”, “Quiero ver algo en la tele”.
intent.none: This intent will be returned for any request that is not covered by the two use cases outlined above. Examples: “Cambia a Telecinco”, “Avanza 5 minutos”, “Pon una alarma”.
Examples:
| Input |
Output |
| “Recomendador avanzado” |
{"intent": "intent.conversational.search"} |
| “Pon películas de Netflix de Almodovar y Tarantino” |
{"intent": "intent.tv.retrieve"} |
| “Patatas fritas” |
{"intent": "intent.none"} |
6 - TV Custom Recommendation UC
TV Custom Recommendation UC
Global use case developed by Aura Platform Team that allows users to launch a custom recommendation based on Large Language Models (LLMs), through the use of ATRIA
Introduction
The TV Custom Recommendation use case is a global experience designed and developed by Aura Global Team that allows Telefónica customers to ask Aura for a TV recommendation based on their mood and likes, using a vocal interface.
Find additional information in the following documents:
Specifications
Kernel API
In order to resolve the user’s request, Aura uses Video Contents normalized Kernel API.
Request-response model
TV custom recommendation UC is available for use in both the deprecated request-response model v1 and the current request-response model v3.
Available channels
The TV Custom Recommendation UC is available for STB channel both in Spain and in Brazil.
Custom recommendation features
Currently, the TV custom recommendation use case includes:
- A conversation flow to identify the user’s likes and mood
- Once all the information is captured and treated by the LLM, a search by topic is launched to the TV APIs
Use case development
The TV custom recommendation use case development includes these components:
Understanding features
- TV custom recommendation use case intent:
intent.tv.custom-recommendation
In order to understand users’ requests (utterances), Aura is trained with:
- NLP expression to recognize the user’s utterance and detect the user’s intention.
Use case logic
Once Aura has recognized the user’s utterance based on NLP components, the use case should be resolved based on:
Use case configuration
Check the section Configuration of the TV Custom Recommendation use case in order to know the required configuration for the TV Custom Recommendation experience for each OB.
6.1 - Dialog configuration
Configuration of the tv-custom-recommendation-dialog
How the tv-custom-recommendation-dialog must be configured for this use case
Specific configuration
The tv-custom-recommendation-dialog is specifically designed to resolve the advanced TV recommendation, using LLMs in ATRIA.
Currently, this dialog is available for Aura channelData V1 and V3 versions.
For this use case, the required specific configuration is set below:
{
"id": "tv-custom-recommendation",
"channelDataVersion": "v3", // Only in Aura channelData V3 version
"triggerConditions": [
{
"intent": "intent.tv.custom_recommendation"
}
],
"bypass": {
"duration": 4,
"payloadName": "openai",
"initialData": {},
"recognizersEnabled": true,
"recognizersBreakIntents": {
"intent.tv.display": [
"[Display Channel]",
"[Display Contents]"
],
"intent.navigation.section_show": [
"[Sections]"
]
}
}
}
Specific values
| Key |
Value |
Description |
| bypass.duration |
4 (minutes) |
This value overwrites the default aura-bot value for bypass lasting 10 minutes. |
| bypass.payloadName |
openai |
Name of the interface that will be used as bypass payload for this dialog. |
| bypass.initialData |
empty |
It should contain any data needed by the dialog to be initialized. |
| bypass.recognizersEnabled |
true |
This value overwrites the default aura-bot way of working with recognizers when it is in bypass mode. If it is set to true, recognizers are executed, and their result is stored in the bypass payload to be used, if needed, afterwards. |
| bypass.recognizersBreakIntents |
Array of intents and their tagged topic matches |
Used to handle when the user requested any other use case during the execution of the advanced custom recommendation. |
Environment variables
| Property |
Type |
Description |
Modifiable by OB? |
| AURA_GATEWAY_API_ENDPOINT |
URI string |
Endpoint to access the locally deployed ATRIA aura-gateway-api |
NO |
| AURA_GATEWAY_API_ISSUER_URL |
string |
Aura issuer URL. It is automatically fulfilled by the installer. |
NO |
| TVCUSTOMRECOMMENDATION_COMMAND_REGEXP |
string |
Regex to match the command for TV custom recommendation |
NO |
| TVCUSTOMRECOMMENDATION_GET_TOPIC_REGEXP |
string |
Regex to match the topic command for TV custom recommendation |
NO |
| TVCUSTOMRECOMMENDATION_CLEAN_TOPIC_REGEXP |
string |
Regex to replace the command by text for TV custom recommendation response |
NO |
| TVCUSTOMRECOMMENDATION_MAX_ITERATIONS |
number |
Maximum number of question and answer cycles allowed by the dialog, to avoid an infinite conversation between the user and the LLM. By default, 5. |
YES |
Configuration by channel
From Prince’s release onwards, the configuration of applicationId and presetId per channel and intent has been added to the channel model.
For this use case, the required specific configuration per channel is set below (added dialogs section under atria property at Main-Recognizer-Video-Triage-29855):
...,
"atria": {
"dialogs": {
"intent.tv.custom_recommendation": {
"applicationId": "816bdab6-3ea3-4a77-bdea-12945d6d7053",
"presetId": "ef3d0603-3fef-4109-a577-0ab92f9060df"
}
}
}
Specific values by channel
| Intent |
Key |
Value |
Description |
Modifiable by OB? |
| intent.tv.custom_recommendation |
applicationId |
816bdab6-3ea3-4a77-bdea-12945d6d7053 |
ATRIA application identifier |
NO |
| intent.tv.custom_recommendation |
presetId |
ef3d0603-3fef-4109-a577-0ab92f9060df |
ATRIA preset identifier to be used within the use case. |
NO |
Dialog flows
The following diagrams are a simplification of the whole flow, this means that not all the components of Aura or Kernel are included, for the sake of the readability of the diagrams.
Please, take into account, that:
- AuraBot includes DirectLine, aura-groot and aura-bot components.
- ATRIA includes aura-gateway-api, atria-model-gw and OpenAI models calls.
- AuraTVAPI includes the calls to Kernel.
Standard execution
actor User
participant STB #ebdff7
participant AuraBot
participant AuraNLP
participant Atria
participant AuraTVAPI
User -> STB ++: Recomendación personalizada
STB -> AuraBot ++: sendActivity("Recomendación personalizada")
AuraBot -> STB: 200 OK
AuraBot -> AuraNLP ++: recognize("Recomendación personalizada")
AuraNLP -> AuraBot --: 200 OK (intent.tv.custom_recommendation)
AuraBot -> AuraBot: openDialog("custom_recommendation")
group custom_recommendation dialog
AuraBot -> AuraBot: init bypass mode
AuraBot -> Atria ++: prompt(app, preset, "custom_recommendation")
Atria -> AuraBot: "¡Hola! ¿En qué puedo ayudarte hoy? ¿Qué tipo de contenido estás buscando?" 200 OK
AuraBot -> AuraBot: sendToUser("¡Hola! ¿En qué puedo ayudarte hoy? ¿Qué tipo de contenido estás buscando?")
end
AuraBot -> STB: sendActivity("¡Hola! ¿En qué puedo ayudarte hoy? ¿Qué tipo de contenido estás buscando?")
User -> STB: Estoy tristón y quiero animarme
STB -> AuraBot: sendActivity("Estoy tristón y quiero animarme")
AuraBot -> STB: 200 OK
group custom_recommendation dialog
AuraBot -> Atria: prompt(app, preset, "Estoy tristón y quiero animarme")
Atria -> AuraBot: "¿Te gustaría ver algo emocionante o prefieres algo más relajado?" 200 OK
AuraBot -> AuraBot: sendToUser("¿Te gustaría ver algo emocionante o prefieres algo más relajado?")
end
AuraBot -> STB: sendActivity("¿Te gustaría ver algo emocionante o prefieres algo más relajado?")
User -> STB: Emocionante
STB -> AuraBot: sendActivity("Emocionante")
AuraBot -> STB: 200 OK
group custom_recommendation dialog
AuraBot -> Atria: prompt(app, preset, "Emocionante")
Atria -> AuraBot: "¿Te gustan las historias de héroes o tal vez algo de alto voltaje? O quizás prefieres persecuciones y carreras." 200 OK
AuraBot -> AuraBot: sendToUser("¿Te gustan las historias de héroes o tal vez algo de alto voltaje? O quizás prefieres persecuciones y carreras.")
end
AuraBot -> STB: sendActivity("¿Te gustan las historias de héroes o tal vez algo de alto voltaje? O quizás prefieres persecuciones y carreras.")
User -> STB: Héroes
STB -> AuraBot: sendActivity("Héroes")
AuraBot -> STB: 200 OK
group custom_recommendation dialog
AuraBot -> Atria: prompt(app, preset, "Héroes")
Atria -> AuraBot: "¿Quieres ver algo sobre héroes salvando el mundo o más bien sobre héroes en situaciones peligrosas?" 200 OK
AuraBot -> AuraBot: sendToUser("¿Quieres ver algo sobre héroes salvando el mundo o más bien sobre héroes en situaciones peligrosas?")
end
AuraBot -> STB: sendActivity("¿Quieres ver algo sobre héroes salvando el mundo o más bien sobre héroes en situaciones peligrosas?")
User -> STB: Salvando el mundo
STB -> AuraBot: sendActivity("Salvando el mundo")
AuraBot -> STB: 200 OK
group custom_recommendation dialog
AuraBot -> Atria: prompt(app, preset, "Salvando el mundo")
Atria -> AuraBot --: "[RESULT TAG]" 200 OK
AuraBot -> AuraTVAPI ++: searchTVContentByTag("[RESULT TAG]")
AuraTVAPI -> AuraBot --: contents 200 OK
AuraBot -> AuraBot: sendToUser("Este es el contenido que puedo recomendarte", contents)
end
AuraBot -> STB: sendActivity("Este es el contenido que puedo recomendarte", contents)
The user requests another use case while the recommendation dialog is open
actor User
participant STB #ebdff7
participant AuraBot
participant AuraNLP
participant Atria
participant AuraTVAPI
User -> STB ++: Recomendación personalizada
STB -> AuraBot ++: sendActivity("Recomendación personalizada")
AuraBot -> STB: 200 OK
AuraBot -> AuraNLP ++: recognize("Recomendación personalizada")
AuraNLP -> AuraBot --: 200 OK (intent.tv.custom_recommendation)
AuraBot -> AuraBot: openDialog("custom_recommendation")
group custom_recommendation dialog
AuraBot -> AuraBot: init bypass recognizing mode
AuraBot -> Atria ++: prompt(app, preset, "custom_recommendation")
Atria -> AuraBot: "¿Qué tipo de emociones prefieres experimentar al ver una película o serie?" 200 OK
AuraBot -> AuraBot: sendToUser("¿Qué tipo de emociones prefieres experimentar al ver una película o serie?")
end
AuraBot -> STB: sendActivity("¿Qué tipo de emociones prefieres experimentar al ver una película o serie?")
User -> STB: Emociones fuertes
STB -> AuraBot: sendActivity("Emociones fuertes")
AuraBot -> STB: 200 OK
AuraBot -> AuraNLP ++: recognize("Emociones fuertes")
AuraNLP -> AuraBot --: None 200 OK
AuraBot -> AuraBot: storeIntentResolutionInContext(None)
group custom_recommendation dialog
AuraBot -> Atria: prompt(app, preset, "Emociones fuertes")
Atria -> AuraBot: "¿Prefieres historias de acción intensa o situaciones peligrosas en las que los protagonistas tienen que luchar por sobrevivir?" 200 OK
AuraBot -> AuraBot: sendToUser("¿Prefieres historias de acción intensa o situaciones peligrosas en las que los protagonistas tienen que luchar por sobrevivir?")
end
AuraBot -> STB: sendActivity("¿Prefieres historias de acción intensa o situaciones peligrosas en las que los protagonistas tienen que luchar por sobrevivir?")
User -> STB: Abre Netflix por favor
STB -> AuraBot: sendActivity("Abre Netflix por favor")
AuraBot -> STB: 200 OK
AuraBot -> AuraNLP ++: recognize("Abre Netflix por favor")
AuraNLP -> AuraBot --: {intent: intent.navigation.section_show, entities: [section: netflix]} 200 OK
AuraBot -> AuraBot: storeIntentResolutionInContext({intent: intent.navigation.section_show, entities: [section: netflix]})
group custom_recommendation dialog
AuraBot -> Atria: prompt(app, preset, "Abre Netflix por favor")
Atria -> AuraBot: "[Sections]" 200 OK
AuraBot -> AuraBot: redirectToDialog({intent: intent.navigation.section_show, entities: [section: netflix]})
end
group section_show dialog
AuraBot -> AuraBot: sendToUser(openSectionNetflix)
end
AuraBot -> STB: sendActivity(openSectionNetflix)
6.2 - TV Custom Recommendation resources
TV Custom Recommendation use case resources
Resources used by the TV Custom Recommendation use case
Introduction
The TV Custom Recommendation use case will use three different types of resources:
Specific resources for the use case: tv.custom_recommendation
The resources associated to the TV Custom Recommendation plugin are defined below:
| Specific resources for tv.custom-recommendation use case |
Definition |
Example |
Managed by |
Scope |
tv-custom-recommendation:command.exit |
Resource returned when the user sends a message to stop the dialog and launch a different UC |
Entendido. Recuerda que puedes volver a probarlo diciendo “Recomendador avanzado" |
tv.custom_recommendation dialog |
Use case-specific |
tv-custom-recommendation:command.close.words |
Resource returned when the user sends a message to stop the dialog. By default, it is not configured. |
Salir, cerrar, goodbye, exit, quit |
tv.custom_recommendation dialog |
Use case-specific |
tv-custom-recommendation:error.message |
Resource returned in the happening of an error |
Algo no ha ido bien, inténtalo de nuevo |
tv.custom_recommendation dialog |
Use case-specific |
tv-custom-recommendation:command.none |
Resource returned when ATRIA does not recognize what the user is saying and returns a topic of “[None]” |
Uy, no tengo claro a qué te refieres |
tv.custom_recommendation dialog |
Use case-specific |
tv-custom-recommendation:command.unknown-error |
Resource returned when ATRIA returns a tagged topic that is not matched in the dialog. |
Algo no ha ido bien, inténtalo de nuevo |
tv.custom_recommendation dialog |
Use case-specific |
6.3 - NLP configuration by OB
NLP configuration by OB
NLP configuration by OB for the TV Custom Recommendation use case
Introduction
The current document includes the configuration of the NLP model for the normalized TV Custom Recommendation use case in the OBs where it is available.
Spain
The TV Custom Recommendation use case is accessible in STB channel.
Intent
intent.tv.custom_recommendation
Entities
No entities are handled for this intent.
Pipeline stages
Since there is a closed list of commands that could trigger this UC, the stage involved in its recognition is a deterministic one:
- “ExactMatchRecognizerWrapper”
The whole pipeline.jsonfile is available at https://github.com/Telefonica/aura-nlpdata-es/blob/master/data/es-es/stb/pipeline.json
Commands
Currently, the commands that trigger this intent are:
"Abre el recomendador avanzado",
"Abre el recomendador personalizado",
"Abre la recomendación avanzada",
"Abre la recomendación personalizada",
"Abre recomendación avanzada",
"Abre recomendación personalizada",
"Abre recomendador avanzado",
"Abre recomendador personalizado",
"Abrir el recomendador avanzado",
"Abrir el recomendador personalizado",
"Abrir la recomendación avanzada",
"Abrir la recomendación personalizada",
"Abrir recomendación avanzada",
"Abrir recomendación personalizada",
"Abrir recomendador avanzado",
"Abrir recomendador personalizado",
"Recomendación avanzada",
"Recomendación personalizada",
"Recomendador avanzado",
"Recomendador personalizado"
Brazil
The aura-nlpdata repository structure in Brazil is organized by channel: aura-nlpdata-br-[channel]. Each repository will contain the files for the available use cases in this channel.
The following configuration corresponds to the STB channel, which is included in the repository: https://github.com/Telefonica/aura-nlpdata-br-stb
Intent
intent.tv.custom_recommendation
Entities
No entities are handled for this intent.
Pipeline stages
Since there is a closed list of commands that could trigger this UC, the stage involved in its recognition is a deterministic one:
- “ExactMatchRecognizerWrapper”
The whole pipeline.jsonfile is available at: https://github.com/Telefonica/aura-nlpdata-br-stb/blob/master/data/pt-br/stb/pipeline.json
Commands
Currently, the commands that trigger this intent are:
"Abra o recomendador avançado",
"Abra o recomendador personalizado",
"Abra a recomendação avançada",
"Abra a recomendação personalizada",
"Abra recomendação avançada",
"Abra recomendação personalizada",
"Abra recomendador avançado",
"Abra recomendador personalizado",
"Abrir o recomendador avançado",
"Abrir o recomendador personalizado",
"Abrir a recomendação avançada",
"Abrir a recomendação personalizada",
"Abrir recomendação avanzada",
"Abrir recomendação personalizada",
"Abrir recomendador avançado",
"Abrir recomendador personalizado",
"Recomendação avançada",
"Recomendação personalizada",
"Recomendador avançado",
"Recomendador personalizado"
6.4 - NLP configuration by OB
NLP configuration by OB
NLP configuration by OB for the TV Custom Recommendation use case
Introduction
The current document includes the configuration of the NLP model for the normalized TV Custom Recommendation use case in the OBs where it is available.
Spain
The TV Custom Recommendation use case is accessible in STB channel.
Intent
intent.tv.custom_recommendation
Entities
No entities are handled for this intent.
Pipeline stages
Since there is a closed list of commands that could trigger this UC, the stage involved in its recognition is a deterministic one:
- “ExactMatchRecognizerWrapper”
The whole pipeline.jsonfile is available at https://github.com/Telefonica/aura-nlpdata-es/blob/master/data/es-es/stb/pipeline.json
Commands
Currently, the commands that trigger this intent are:
"Abre el recomendador avanzado",
"Abre el recomendador personalizado",
"Abre la recomendación avanzada",
"Abre la recomendación personalizada",
"Abre recomendación avanzada",
"Abre recomendación personalizada",
"Abre recomendador avanzado",
"Abre recomendador personalizado",
"Abrir el recomendador avanzado",
"Abrir el recomendador personalizado",
"Abrir la recomendación avanzada",
"Abrir la recomendación personalizada",
"Abrir recomendación avanzada",
"Abrir recomendación personalizada",
"Abrir recomendador avanzado",
"Abrir recomendador personalizado",
"Recomendación avanzada",
"Recomendación personalizada",
"Recomendador avanzado",
"Recomendador personalizado"
Brazil
The aura-nlpdata repository structure in Brazil is organized by channel: aura-nlpdata-br-[channel]. Each repository will contain the files for the available use cases in this channel.
The following configuration corresponds to the STB channel, which is included in the repository: https://github.com/Telefonica/aura-nlpdata-br-stb
Intent
intent.tv.custom_recommendation
Entities
No entities are handled for this intent.
Pipeline stages
Since there is a closed list of commands that could trigger this UC, the stage involved in its recognition is a deterministic one:
- “ExactMatchRecognizerWrapper”
The whole pipeline.jsonfile is available at: https://github.com/Telefonica/aura-nlpdata-br-stb/blob/master/data/pt-br/stb/pipeline.json
Commands
Currently, the commands that trigger this intent are:
"Abra o recomendador avançado",
"Abra o recomendador personalizado",
"Abra a recomendação avançada",
"Abra a recomendação personalizada",
"Abra recomendação avançada",
"Abra recomendação personalizada",
"Abra recomendador avançado",
"Abra recomendador personalizado",
"Abrir o recomendador avançado",
"Abrir o recomendador personalizado",
"Abrir a recomendação avançada",
"Abrir a recomendação personalizada",
"Abrir recomendação avanzada",
"Abrir recomendação personalizada",
"Abrir recomendador avançado",
"Abrir recomendador personalizado",
"Recomendação avançada",
"Recomendação personalizada",
"Recomendador avançado",
"Recomendador personalizado"