Amazon lex error发生错误:Lambda响应无效:从Lambda接收到错误响应:未处理

2024-09-26 22:07:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用lex开发一个聊天机器人。我创建了一个名为“latestdetails”的意图和一个插槽“uniquename”。我想验证插槽“uniquename”,以便它不接受字母表,并在输入错误时询问消息“请再次输入”。下面是我用python编写的代码

在测试lambda函数时,我得到了正确的响应,但是当lambda函数通过初始化和验证代码钩子与lex连接时,我在bot上得到了以下错误:“Amazon-lex-error-a-error-a-error-accurrence:Invalid lambda-response:Received error-response from lambda:Unhandled”

我在stackoverflow中看到了相关问题,但我无法获得所需的解决方案

import os
import time
import json
import logging

logger = logging.getLogger()
logger.setLevel(logging.DEBUG)


def get_slots(event):
    return event['currentIntent']['slots']
    
def elicit_slot(intent_name, slots, slot_to_elicit ,message):
    
    response =  {
    "dialogAction":
    {
        "type":"ElicitSlot",
        "intentName": intent_name,
        "slots": slots,
        "slotToElicit": slot_to_elicit,
         "message": {
            "content": message,
            "contentType": "PlainText"
                    }
        
        
    }
                    
                }
    return response      
def delegate(slots):

    response =  {
    "dialogAction":
    {
        "type":"Delegate",
        "slots": slots
        
    }
                    
                }
    return response
def close():
    response =  {
    "dialogAction":
    {
        "fulfillmentState":"Fulfilled",
        "type":"Close",
        "message":
            {
                "contentType":"PlainText",
                "content": "Hey your ticket has been raised"
            }
    }
                    
                }
                
    return response

def dispatch(event):
    intent_name=event['currentIntent']['name']
    if intent_name == 'latestdetails':            
        source = event['invocationSource']                        
        if source == 'DialogCodeHook':
    
                    slots= get_slots(event)
                    uniquename = event["currentIntent"]["slots"]["uniquename"]                                                                      
                    if  uniquename.isalpha():
                        
                        return elicit_slot(intent_name,'uniquename','uniquename','please enteragain')
                                    
                    return delegate(slots)
                    return close('Fulfilled')
        elif source == 'FulfillmentCodeHook':               
                    return close()



def lambda_handler(event, context):
    return dispatch(event)
    
   

Tags: lambdanameimporteventmessagereturnresponsedef

热门问题