Как мне использовать Диалоговые Директивы Алексы в Java? - PullRequest
0 голосов
/ 18 сентября 2018

В Интернете почти нет информации, которую я могу найти по этой теме.Я не знаю, как получить доступ к намерениям или использовать их для возврата ответа, если определенные параметры удовлетворены этим намерением.Я пытаюсь создать диалог, который может быть таким простым:

Я: «Добавить юнит»

Алекса: «Как называется юнит?»

Я: "Инжиниринг"

Алекса: "Хорошо, добавил юнит" Инжиниринг ".

В настоящее время все, что я умею делать, - это выполнять действие после вызова навыка, независимо от того, что сказано,Так, например, я мог бы буквально сказать,

Me: «Alexa, open StudyPal»

Alexa: «Что-то, что возвращается всякий раз, когда умение активировано»

или...

Я: «Алекса, спроси StudyPal о моих юнитах»

Алекса: «Что-то, что возвращается, когда умение активировано»

Любая помощь будет принята.Для справки, это часть моего кода ...

public class StudyPalHandler implements RequestStreamHandler {
private final Skill skill;
private final JacksonSerializer serializer;

public StudyPalHandler() {
    skill = new StandardSkillBuilder()
            .addRequestHandler(new StudyPalExtraHandler())
            .build();
    serializer = new JacksonSerializer();
}

@Override
public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) throws IOException {
    String request = IOUtils.toString(inputStream);
    RequestEnvelope requestEnvelope = serializer.deserialize(request, RequestEnvelope.class);
    ResponseEnvelope responseEnvelope = skill.invoke(requestEnvelope);
    byte[] response = serializer.serialize(responseEnvelope).getBytes(StandardCharsets.UTF_8);
    outputStream.write(response);
}
}

public class StudyPalExtraHandler implements RequestHandler {
@Override
public boolean canHandle(HandlerInput handlerInput) {
    return true;
}

@Override
public Optional<Response> handle(HandlerInput handlerInput) {
    return handlerInput.getResponseBuilder().withSpeech("Something that is returned whenever the skill is activated").build();
}
}

1 Ответ

0 голосов
/ 18 сентября 2018

Вы должны использовать canHandle() метод связанного класса обработчика, чтобы проверить, может ли этот конкретный обработчик обработать этот запрос.

Пример: если вы хотите обработать StudyPalIntent, то

public class StudyPalIntentHandler implements RequestHandler {

@Override
public boolean canHandle(HandlerInput input) {
    return input.matches(intentName("StudyPalIntent"));
}

@Override
public Optional<Response> handle(HandlerInput input) {
    return input.getResponseBuilder()
            .withSpeech("your response speech here")
            .withReprompt("your re prompt here")              
            .build();
}

Из исходного кода SDK вы можете использовать диалоговые директивы, подобные этой

return input.getResponseBuilder()
   .withSpeech("your response speech here")
   .withReprompt("your re prompt here") 
   .addDelegateDirective(updatedIntent)              
   .build();

Другие вспомогательные методы диалоговых директив:

addElicitSlotDirective(String slotName, Intent updatedIntent)
addConfirmSlotDirective(String slotName, Intent updatedIntent)
addConfirmIntentDirective(Intent updatedIntent)

Проверьте это ResponseBuilder.java class

...