我正在迁移到Java的ASK SDK v2,在SDK v2中,每个onLaunch
,onSessionEnded
和ontIntent
情况都被分隔到一个不同的处理程序中。
如何将我的输入传递到handle(HandlerInput input)
的LaunchRequestHandler
以及如何从我的代码中调用handle(HandlerInput input)
的LaunchRequestHandler
?
而且,在V2中,SpeechletRequestEnvelope
类已被删除,因此如何创建requestEnvelope
以获取Request
和Session
详细信息?
public class LaunchRequestHandler implements RequestHandler {
@Override
public boolean canHandle(HandlerInput input) {
return input.matches(Predicates.requestType(LaunchRequest.class));
}
@Override
public Optional<Response> handle(HandlerInput input) {
String speechText = "Welcome to the Alexa Skills Kit, you can say hello";
return input.getResponseBuilder()
.withSpeech(inputString)
.withSimpleCard("HelloWorld", inputString)
.withReprompt(inputString)
.build();
}
}
呼叫地点:
String body = myO ject.getAdditionalProperties().get("request").toString();
byte[] myRequest = URLDecoder.decode(body, StandardCharsets.UTF_8.name()).getBytes();
如何将myRequest
传递到handle()
的LaunchRequestHandler
以及如何调用相同的handle()
方法?
关于您的与请求和会话详细信息有关的第二个问题
public ResponseEntity<String> handleAlexaRequest(HttpServletRequest request) {
RequestEnvelope requestEnvelope;
ServletRequest servletRequest;
byte[] serializedRequestEnvelope;
try {
serializedRequestEnvelope = IOUtils.toByteArray(request.getInputStream());
RequestEnvelope deserializedRequestEnvelope = this.serializer.deserialize(new String(serializedRequestEnvelope, StandardCharsets.UTF_8), RequestEnvelope.class);
servletRequest = new ServletRequest(request,serializedRequestEnvelope,deserializedRequestEnvelope);
requestEnvelope = verifier.verify(alexaHttpRequest);
}
requestEnvelope.getRequest();
requestEnvelope.getSession()