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:

  1. 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”).
  2. 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.

LLM output format

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).

Validate input request

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:


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:

  1. 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)
      
  2. 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:

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:

  1. 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”)
  2. 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:

  1. 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)
  1. By breaking command: EXIT (“Salir”, “Abandonar”, “Quiero irme ya”, “Eu quero sair daqui”, “Terminei”)

  2. When the user clicks on one of the contents that appears on the screen in response to their request

LLM output format

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:

  1. Returning 0 when it is identified that the user wants to leave the conversation (breaking command)
  2. Returning 1 when the category mentioned by the user matches one from the available list
  3. 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).

Validate input request

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:


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:

  1. 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).
    • Channel: trim each value, wrap each value in quotes, and join with OR inside the parentheses.
    • Person: trim each value, wrap each value in quotes, and join with AND (no group parentheses).
    • Example:
      ("La 1" OR "La 2") AND "Brad Pitt" AND (mystery OR series)
      
  2. 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)

LLM output format

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

  • Intent: intent.tv.retrieve

  • Entities consumed by the plugin:

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).

Validate input request

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:


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:

  1. 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).
    • Channel: trim each value, wrap each value in quotes, and join with OR inside the parentheses.
    • Person: trim each value, wrap each value in quotes, and join with AND (no group parentheses).
    • Example:
      ("La 1" OR "La 2") AND "Brad Pitt" AND (mystery OR series)
      
  2. 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:

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)

LLM output format

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”.

LLM output format

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"