过去,我设置了两个用 Java 编写的独立 AWS lambda。一种用于 Alexa,一种用于 Api.ai。他们只是将“Hello world”返回给每个助手 api。因此,尽管它们很简单,但它们可以工作。随着我开始为每个代码编写越来越多的代码,我开始看到我的 java 代码有多么相似,我只是通过拥有两个单独的 lambda 来重复自己。
快进到今天。
我现在正在做的是拥有一个可以处理来自 Alexa 和 Api.ai 的输入的单个 AWS lambda,但我遇到了一些麻烦。目前,我的想法是,当 lambda 运行时,会有一个简单的 if 语句,如下所示:
以下不是真正的代码,只是我认为我可以做的
if (figureOutIfInputType.equals("alexa")){
runAlexaCode();
} else if (figureOutIfInputType.equals("api.ai")){
runApiAiCode();
}
现在问题是我需要以某种方式判断该函数是由 alexa 还是 api.ai 调用的。
这是我现在的实际java:
public class App implements RequestHandler<Object, String> {
@Override
public String handleRequest(Object input, Context context) {
System.out.println("myLog: " + input.toString());
return "Hello from AWS";
}
然后我从 Alexa 和 Api.ai 运行 lambda,看看在 java 中会生成什么对象输入。
API.ai
{id=asdf-6801-4a9b-a7cd-asdffdsa, timestamp=2017-07-
28T02:21:15.337Z, lang=en, result={source=agent, resolvedQuery=hi how
are you, action=, actionIncomplete=false, parameters={}, contexts=[],
metadata={intentId=asdf-3a2a-49b6-8a45-97e97243b1d7,
webhookUsed=true, webhookForSlotFillingUsed=false,
webhookResponseTime=182, intentName=myIntent}, fulfillment=
{messages=[{type=0, speech=I have failed}]}, score=1}, status=
{code=200, errorType=success}, sessionId=asdf-a7ac-43c8-8ae8-
bc1bf5ecaad0}
亚历克斯
{version=1.0, session={new=true, sessionId=amzn1.echo-api.session.asdf-
7e03-4c35-9d98-d416eefc5b23, application=
{applicationId=amzn1.ask.skill.asdf-a02e-4938-a747-109ea09539aa}, user=
{userId=amzn1.ask.account.asdf}}, context={AudioPlayer=
{playerActivity=IDLE}, System={application=
{applicationId=amzn1.ask.skill.07c854eb-a02e-4938-a747-109ea09539aa},
user={userId=amzn1.ask.account.asdf}, device=
{deviceId=amzn1.ask.device.asdf, supportedInterfaces={AudioPlayer={}}},
apiEndpoint=https://api.amazonalexa.com}}, request={type=IntentRequest,
requestId=amzn1.echo-api.request.asdf-5de5-4930-8f04-9acf2130e6b8,
timestamp=2017-07-28T05:07:30Z, locale=en-US, intent=
{name=HelloWorldIntent, confirmationStatus=NONE}}}
所以现在我有我的 Alexa 和 Api.ai 输出,它们是不同的。所以这很好。我将能够分辨出哪个是哪个。但我被困住了。我不确定是否应该尝试创建一个 AlexaInput 对象和一个 ApiAIinput 对象。
我做这一切都错了吗?试图让一个 lambda 满足来自多个服务(Alexa 和 ApiAI)的“助手”请求,我错了吗?
任何帮助,将不胜感激。当然,其他人必须在 AWS 中编写他们的助手功能,并希望将他们的代码重用于两个“助手”平台。