es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo imprimir una lista de atributos de una tabla de DynamoDB en un bot de Lex?

Creé un bot de lex y una tabla de dynamodb. La tabla tiene tres columnas: Carname (Columna A), Color (Columna B) y Precio (Columna C). Si el usuario escribe ‘Carname’, quiero que el bot sugiera los colores disponibles de la tabla al usuario para que pueda seleccionar el color y obtener el precio para el Carname y el color elegidos.

¿Cómo puedo hacer que el bot muestre los colores disponibles para el ‘Carname’ elegido?

Por ejemplo, el usuario dice ‘Impala’. En la tabla de DynamoDB, hay dos entradas para ‘Impala’: en una entrada, encontrarás ‘azul’ en la columna B, en la segunda entrada, encontrarás ‘negro’ en la columna B.

El bot debería extraer los colores disponibles de la columna B y proponérselos al usuario. En el siguiente paso del diálogo, el usuario selecciona un color. Después de esto, el bot responde con el precio correspondiente (columna C).

Si pudieras indicarme en la dirección correcta, se agradecería mucho.

““
import json
import boto3
from boto3.dynamodb.conditions import Key, Attr
dynamodb = boto3.resource(‘dynamodb’)
client = boto3.client(‘dynamodb’)
result = {}
intent=””
Carname=””
Color=””
table = dynamodb.Table(‘mytable’)

def lambda_handler(event, context):
intent=(event[‘currentIntent’][‘name’])
#print(‘the intent is : ‘,intent)
Carname=(event[‘currentIntent’][‘slots’][‘Carname_slot’])
#print(‘carname is : ‘,Carname)
if intent==’Carname_intent’:
colorenquiry(Carname)
return result

Esta función debería averiguar qué colores están disponibles para el nombre de coche.

def colorenquiry(Carname):
response = table.query(
IndexName=’Carname-index’,
TableName=’mytable’,
KeyConditionExpression=Key(‘Carname’).eq(Carname))

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Después de consultar la tabla para un carname específico, puedes extraer los colores disponibles de los elementos devueltos y presentarlos como opciones al usuario. Para lograr esto, puedes modificar la función colorenquiry de la siguiente manera:

    def colorenquiry(Carname):
        response = table.query(
            IndexName='Carname-index',
            TableName='mytable',
            KeyConditionExpression=Key('Carname').eq(Carname)
        )
    
        colors = []
    
        for item in response['Items']:
            if item['Color'] not in colors:
                colors.append(item['Color'])
    
        if len(colors) > 0:
            message = "Los colores disponibles para {} son: {}\nPor favor, elige un color".format(Carname, ", ".join(colors))
            result['dialogAction'] = {
                'type': 'ElicitSlot',
                'intentName': intent,
                'slots': {
                    'Carname_slot': Carname,
                    'Color_slot': None
                },
                'slotToElicit': 'Color_slot',
                'message': {
                    'contentType': 'PlainText',
                    'content': message
                }
            }
        else:
            message = "Lo siento, no hay colores disponibles para {}".format(Carname)
            result['dialogAction'] = {
                'type': 'Close',
                'fulfillmentState': 'Failed',
                'message': {
                    'contentType': 'PlainText',
                    'content': message
                }
            }
    

    Esta función primero consulta la tabla para el carname especificado y recorre los elementos devueltos para extraer los colores disponibles. Luego verifica si hay colores disponibles y crea un mensaje con los colores disponibles como opciones. Este mensaje se devuelve como una respuesta ElicitSlot, que solicita al usuario que seleccione un color. Si no hay colores disponibles, se devuelve un mensaje de error como respuesta Close.

    Ten en cuenta que esta función asume que el slot para el carname se llama ‘Carname_slot’ y el slot para el color se llama ‘Color_slot’. Es posible que debas ajustar estos nombres para que coincidan con tu implementación.

Comments are closed.