Amazon web services AWS';LEX bot在要求履行时期待什么?

Amazon web services AWS';LEX bot在要求履行时期待什么?,amazon-web-services,aws-lambda,Amazon Web Services,Aws Lambda,我有和AWS LEX Bot,需要从dynamoDB表中提取一些数据 我在Java中创建了一个Lambda函数来实现这一点 我能够成功调用lambda函数,但无法在聊天窗口中显示输出 为了使响应正确打印,需要使用什么格式 import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; import com.amazonaws.AmazonClientException; import com.ama

我有和AWS LEX Bot,需要从dynamoDB表中提取一些数据

我在Java中创建了一个Lambda函数来实现这一点

我能够成功调用lambda函数,但无法在聊天窗口中显示输出

为了使响应正确打印,需要使用什么格式

import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;

import com.amazonaws.AmazonClientException;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.EnvironmentVariableCredentialsProvider;
import com.amazonaws.regions.Region;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient;
import com.amazonaws.services.dynamodbv2.model.AttributeValue;
import com.amazonaws.services.dynamodbv2.model.ComparisonOperator;
import com.amazonaws.services.dynamodbv2.model.Condition;
import com.amazonaws.services.dynamodbv2.model.ScanRequest;
import com.amazonaws.services.dynamodbv2.model.ScanResult;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;

public class LambdaFunctionHandler implements RequestHandler<Map<String, Object>, String> {

    private static final String RESPONSE = "RESPONSE";

    @Override
    public String handleRequest(Map<String, Object> request, Context context) {
        @SuppressWarnings("unchecked")
        Map<String, Map<String,String>> currentIntent = (Map<String, Map<String,String>>) request.get("currentIntent");
        Map<String, String> slots = currentIntent.get("slots");
        String countryName = slots.get("COUNTRY");
        AWSCredentials credentials = null;
        try {
            credentials = new EnvironmentVariableCredentialsProvider().getCredentials();
        } catch (Exception e) {
            throw new AmazonClientException("Cannot load the credentials from the credential profiles file.", e);
        }
        AmazonDynamoDBClient dynamoDB = new AmazonDynamoDBClient(credentials);
        Region region = Region.getRegion(Regions.US_EAST_1);
        dynamoDB.setRegion(region);

        HashMap<String, Condition> scanFilter = new HashMap<String, Condition>();
        Condition condition = new Condition()
                .withComparisonOperator(ComparisonOperator.EQ)
                .withAttributeValueList(new AttributeValue().withS(countryName));
        scanFilter.put("name", condition);
        ScanRequest scanRequest = new ScanRequest("MigrateCountry").withScanFilter(scanFilter);
        ScanResult scanResult = dynamoDB.scan(scanRequest);

        String responseText;
        if (scanResult.getCount() == 0) {
            responseText = "I'm sorry, I don't have any information about "+countryName+".";
        } else {
            responseText = "Here's a fun fact about "+countryName+": "+scanResult.getItems().get(0).get("funFact")+".";
        }
        context.getLogger().log("RESPONSE: "+responseText);
        return responseText;
    }
import java.util.HashMap;
导入java.util.LinkedHashMap;
导入java.util.Map;
导入com.amazonaws.AmazonClientException;
导入com.amazonaws.auth.AWSCredentials;
导入com.amazonaws.auth.EnvironmentVariableCredentialsProvider;
导入com.amazonaws.regions.Region;
导入com.amazonaws.regions.regions;
导入com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient;
导入com.amazonaws.services.dynamodbv2.model.AttributeValue;
导入com.amazonaws.services.dynamodbv2.model.ComparisonOperator;
导入com.amazonaws.services.dynamodbv2.model.Condition;
导入com.amazonaws.services.dynamodbv2.model.ScanRequest;
导入com.amazonaws.services.dynamodbv2.model.ScanResult;
导入com.amazonaws.services.lambda.runtime.Context;
导入com.amazonaws.services.lambda.runtime.RequestHandler;
公共类lambdFunctionHandler实现RequestHandler{
私有静态最终字符串RESPONSE=“RESPONSE”;
@凌驾
公共字符串handleRequest(映射请求、上下文){
@抑制警告(“未选中”)
Map currentIntent=(Map)request.get(“currentIntent”);
Map slots=currentIntent.get(“slots”);
String countryName=slots.get(“国家”);
AWSCredentials凭证=null;
试一试{
凭据=新环境VariableCredentialsProvider().getCredentials();
}捕获(例外e){
抛出新的AmazonClientException(“无法从凭据配置文件加载凭据。”,e);
}
AmazonDynamoDBClient dynamoDB=新的AmazonDynamoDBClient(凭证);
Region Region=Region.getRegion(Regions.US\u EAST\u 1);
发电机设置区域(区域);
HashMap scanFilter=新的HashMap();
条件条件=新条件()
.带ComparisonOperator(ComparisonOperator.EQ)
.WithAttributeValue列表(新的AttributeValue().withS(countryName));
scanFilter.put(“名称”,条件);
ScanRequest ScanRequest=新的ScanRequest(“MigrateCountry”)。使用scanFilter(scanFilter);
ScanResult ScanResult=dynamoDB.scan(扫描请求);
字符串响应文本;
if(scanResult.getCount()==0){
responseText=“对不起,我没有关于“+countryName+”的任何信息”;
}否则{
responseText=“这里有一个关于“+countryName+”的有趣事实:“+scanResult.getItems().get(0.get)(“funFact”)+”;
}
context.getLogger().log(“响应:+responseText”);
返回响应文本;
}

中提供了响应格式

文档示例:

"dialogAction": {
  "type": "Close",
  "fulfillmentState": "Fulfilled or Failed",
  "message": {
    "contentType": "PlainText or SSML",
    "content": "Message to convey to the user. For example, Thanks, your pizza has been ordered."
  },
 "responseCard": {
    "version": integer-value,
    "contentType": "application/vnd.amazonaws.card.generic",
    "genericAttachments": [
        {
           "title":"card-title",
           "subTitle":"card-sub-title",
           "imageUrl":"URL of the image to be shown",
           "attachmentLinkUrl":"URL of the attachment to be associated with the card",
           "buttons":[ 
               {
                  "text":"button-text",
                  "value":"Value sent to server on button click"
               }
            ]
         } 
     ] 
   }
}
注意:如果您不使用这些字段,其中许多字段可以留空