Как передать Input в handle() и как вызвать handle() из LaunchRequestHandler в alexa SDK V2 для Java?
Я перехожу на ASK SDK v2 для Java, где в SDK v2 каждый onLaunch
, onSessionEnded
, а также ontIntent
case разделен на другой обработчик.
Вопрос:
Как передать мой вклад в 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()
метод?
0 ответов
Для вашего второго вопроса, связанного с деталями запроса и сеанса
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()