Search in sources :

Example 11 with Slot

use of com.amazon.speech.slu.Slot in project amos-ss17-alexa by c-i-ber.

the class StandingOrderService method askForDDeletionConfirmation.

private SpeechletResponse askForDDeletionConfirmation(Intent intent, Session session) {
    Map<String, Slot> slots = intent.getSlots();
    Slot numberSlot = slots.get("Number");
    LOGGER.info("NumberSlot: " + numberSlot.getValue());
    session.setAttribute("StandingOrderToDelete", numberSlot.getValue());
    // Create the plain text output
    PlainTextOutputSpeech speech = new PlainTextOutputSpeech();
    speech.setText("Moechtest du den Dauerauftrag mit der Nummer " + numberSlot.getValue() + " wirklich loeschen?");
    // Create reprompt
    Reprompt reprompt = new Reprompt();
    reprompt.setOutputSpeech(speech);
    return SpeechletResponse.newAskResponse(speech, reprompt);
}
Also used : Reprompt(com.amazon.speech.ui.Reprompt) Slot(com.amazon.speech.slu.Slot) PlainTextOutputSpeech(com.amazon.speech.ui.PlainTextOutputSpeech)

Example 12 with Slot

use of com.amazon.speech.slu.Slot in project amos-ss17-alexa by c-i-ber.

the class StandingOrderService method getStandingOrdersInfoResponse.

/**
 * Creates a {@code SpeechletResponse} for the standing orders intent.
 *
 * @return SpeechletResponse spoken and visual response for the given intent
 */
private SpeechletResponse getStandingOrdersInfoResponse(Intent intent, Session session) {
    LOGGER.info("StandingOrdersResponse called.");
    Map<String, Slot> slots = intent.getSlots();
    Collection<StandingOrder> standingOrdersCollection = AccountAPI.getStandingOrdersForAccount(ACCOUNT_NUMBER);
    // Create the Simple card content.
    SimpleCard card = new SimpleCard();
    card.setTitle("Daueraufträge");
    // Create the plain text output.
    PlainTextOutputSpeech speech = new PlainTextOutputSpeech();
    if (standingOrdersCollection == null || standingOrdersCollection.isEmpty()) {
        card.setContent("Keine Daueraufträge vorhanden.");
        speech.setText("Keine Dauerauftraege vorhanden.");
        return SpeechletResponse.newTellResponse(speech, card);
    }
    standingOrders = new ArrayList<>(standingOrdersCollection);
    // Check if user requested to have their stranding orders sent to their email address
    Slot channelSlot = slots.get("Channel");
    boolean sendPerEmail = channelSlot != null && channelSlot.getValue() != null && channelSlot.getValue().toLowerCase().replace(" ", "").equals("email");
    StringBuilder builder = new StringBuilder();
    if (sendPerEmail) {
        StringBuilder standingOrderMailBody = new StringBuilder();
        for (StandingOrder so : standingOrders) {
            standingOrderMailBody.append(so.getSpeechOutput() + "\n");
        }
        EMailClient.SendEMail("Daueraufträge", standingOrderMailBody.toString());
        builder.append("Ich habe eine Übersicht deiner ").append(standingOrders.size()).append(" Daueraufträge an deine E-Mail-Adresse gesendet.");
    } else {
        // We want to directly return standing orders here
        Slot payeeSlot = slots.get("Payee");
        String payee = (payeeSlot == null ? null : payeeSlot.getValue());
        if (payee != null) {
            // User specified a recipient
            standingOrders.clear();
            // Find closest standing orders that could match the request.
            for (int i = 0; i < standingOrders.size(); i++) {
                if (StringUtils.getLevenshteinDistance(payee, standingOrders.get(i).getPayee()) <= standingOrders.get(i).getPayee().length() / 3) {
                    standingOrders.add(standingOrders.get(i));
                }
            }
            builder.append(standingOrders.size() == 1 ? "Es wurde ein Dauerauftrag gefunden. " : "Es wurden " + standingOrders.size() + " Dauerauftraege gefunden. ");
            for (int i = 0; i <= 1; i++) {
                builder.append(standingOrders.get(i).getSpeechOutput());
            }
            if (standingOrders.size() > 2) {
                return askForFurtherStandingOrderEntry(session, builder, 2);
            }
        } else {
            // Just return all standing orders
            builder.append("Du hast momentan ").append(standingOrders.size() == 1 ? "einen Dauerauftrag. " : standingOrders.size() + " Dauerauftraege. ");
            for (int i = 0; i <= 1; i++) {
                builder.append(standingOrders.get(i).getSpeechOutput());
            }
            if (standingOrders.size() > 2) {
                return askForFurtherStandingOrderEntry(session, builder, 2);
            }
        }
    }
    String text = builder.toString();
    card.setContent(text);
    speech.setText(text);
    return SpeechletResponse.newTellResponse(speech, card);
}
Also used : StandingOrder(model.banking.StandingOrder) SimpleCard(com.amazon.speech.ui.SimpleCard) Slot(com.amazon.speech.slu.Slot) PlainTextOutputSpeech(com.amazon.speech.ui.PlainTextOutputSpeech)

Example 13 with Slot

use of com.amazon.speech.slu.Slot in project amos-ss17-alexa by c-i-ber.

the class AmosAlexaSpeechlet method bankTransfer.

/**
     * Transfers money and returns response with
     *
     * @return SpeechletResponse spoken and visual response for the given intent
     */
private SpeechletResponse bankTransfer(Map<String, Slot> slots) {
    Slot amountSlot = slots.get("amount");
    Slot nameSlot = slots.get("name");
    String amount = amountSlot.getValue();
    String name = nameSlot.getValue();
    //getting response regarding account balance
    this.getAccountBalanceResponse();
    //transfering money
    String url = "http://amos-bank-lb-723794096.eu-central-1.elb.amazonaws.com/api/v1_0/transactions";
    String urlParams = "{\n" + "  \"amount\" : " + amount + ",\n" + "  \"sourceAccount\" : \"DE23100000001234567890\",\n" + "  \"destinationAccount\" : \"DE60643995205405578292\",\n" + "  \"valueDate\" : \"2017-05-16\",\n" + "  \"description\" : \"Beschreibung\"\n" + "}";
    ApiHelper.sendPost(url, urlParams);
    //reply message
    String speechText = "Die " + amount + " wurden zu " + name + " überwiesen";
    // Create the Simple card content.
    SimpleCard card = new SimpleCard();
    card.setTitle("CreditLimit");
    card.setContent(speechText);
    // Create the plain text output.
    PlainTextOutputSpeech speech = new PlainTextOutputSpeech();
    speech.setText(speechText);
    // Create reprompt
    Reprompt reprompt = new Reprompt();
    reprompt.setOutputSpeech(speech);
    return SpeechletResponse.newAskResponse(speech, reprompt, card);
}
Also used : SimpleCard(com.amazon.speech.ui.SimpleCard) Reprompt(com.amazon.speech.ui.Reprompt) Slot(com.amazon.speech.slu.Slot) PlainTextOutputSpeech(com.amazon.speech.ui.PlainTextOutputSpeech)

Example 14 with Slot

use of com.amazon.speech.slu.Slot in project amos-ss17-alexa by c-i-ber.

the class BalanceLimitService method onIntent.

@Override
public SpeechletResponse onIntent(SpeechletRequestEnvelope<IntentRequest> requestEnvelope) throws SpeechletException {
    Intent intent = requestEnvelope.getRequest().getIntent();
    Session session = requestEnvelope.getSession();
    SessionStorage.Storage sessionStorage = SessionStorage.getInstance().getStorage(session.getSessionId());
    model.db.User user = (User) DynamoDbMapper.getInstance().load(model.db.User.class, USER_ID);
    if (intent.getName().equals(SET_BALANCE_LIMIT_INTENT)) {
        Map<String, Slot> slots = intent.getSlots();
        Slot balanceLimitAmountSlot = slots.get("BalanceLimitAmount");
        if (balanceLimitAmountSlot == null || balanceLimitAmountSlot.getValue() == null) {
            return getAskResponse(CARD_TITLE, "Auf welchen Betrag möchtest du dein Kontolimit setzen?");
        }
        String balanceLimitAmount = balanceLimitAmountSlot.getValue();
        if (balanceLimitAmount.equals("?")) {
            return getErrorResponse("Der angegebene Betrag ist ungültig.");
        }
        sessionStorage.put(NEW_BALANCE_LIMIT, balanceLimitAmount);
        return getAskResponse(CARD_TITLE, "Möchtest du dein Kontolimit wirklich auf " + balanceLimitAmount + " Euro setzen?");
    } else if (intent.getName().equals(GET_BALANCE_LIMIT_INTENT)) {
        return getResponse(CARD_TITLE, "Dein aktuelles Kontolimit beträgt " + user.getBalanceLimit() + " Euro.");
    } else if (intent.getName().equals(YES_INTENT)) {
        if (!sessionStorage.containsKey(NEW_BALANCE_LIMIT)) {
            return getErrorResponse();
        }
        String balanceLimitAmount = (String) sessionStorage.get(NEW_BALANCE_LIMIT);
        user.setBalanceLimit(Integer.parseInt(balanceLimitAmount));
        DynamoDbMapper.getInstance().save(user);
        return getResponse(CARD_TITLE, "Okay, dein Kontolimit wurde auf " + balanceLimitAmount + " Euro gesetzt.");
    } else if (intent.getName().equals(NO_INTENT)) {
        return getResponse(CARD_TITLE, "");
    }
    return null;
}
Also used : User(model.db.User) User(model.db.User) Slot(com.amazon.speech.slu.Slot) Intent(com.amazon.speech.slu.Intent) SessionStorage(amosalexa.SessionStorage) Session(com.amazon.speech.speechlet.Session)

Example 15 with Slot

use of com.amazon.speech.slu.Slot in project amos-ss17-alexa by c-i-ber.

the class StandingOrderService method getCorrectionResponse.

/**
 * Creates a {@code SpeechletResponse} that asks the user if he wants to correct his previous input.
 * Should be called after an Amazon.NoIntent
 *
 * @return SpeechletResponse spoken and visual response for the given intent
 */
private SpeechletResponse getCorrectionResponse(Intent intent, Session session) {
    String dialogContext = (String) session.getAttribute(DIALOG_CONTEXT);
    LOGGER.info("Context: " + dialogContext);
    Map<String, Slot> slots = intent.getSlots();
    LOGGER.info("Slots: " + slots);
    String standingOrderToModify = (String) session.getAttribute("StandingOrderToModify");
    // Default
    String answer = "Okay, bitte wiederhole die Anweisung oder breche den Vorgang ab, indem du \"Alexa, Stop!\" sagst.";
    if (dialogContext.equals("StandingOrderDeletion")) {
        answer = "Okay, sage die Nummer des Dauerauftrags, den du stattdessen loeschen willst oder " + "breche den Vorgang ab, indem du \"Alexa, Stop!\" sagst.";
    } else if (dialogContext.equals("StandingOrderModification")) {
        answer = "Okay, den Betrag, auf den du Dauerauftrag Nummer " + standingOrderToModify + " stattdessen" + " aendern willst, wiederhole die gesamte Aenderungsanweisung oder breche den Vorgang ab, indem du" + " \"Alexa, Stop!\" sagst.";
    }
    answer = "<speak>\n" + "    <emphasis level=\"reduced\">" + answer + "</emphasis> \n" + "</speak>";
    SsmlOutputSpeech speech = new SsmlOutputSpeech();
    speech.setSsml(answer);
    // Create reprompt
    Reprompt reprompt = new Reprompt();
    reprompt.setOutputSpeech(speech);
    return SpeechletResponse.newAskResponse(speech, reprompt);
}
Also used : Reprompt(com.amazon.speech.ui.Reprompt) Slot(com.amazon.speech.slu.Slot) SsmlOutputSpeech(com.amazon.speech.ui.SsmlOutputSpeech)

Aggregations

Slot (com.amazon.speech.slu.Slot)22 Reprompt (com.amazon.speech.ui.Reprompt)10 PlainTextOutputSpeech (com.amazon.speech.ui.PlainTextOutputSpeech)8 SimpleCard (com.amazon.speech.ui.SimpleCard)4 Category (model.db.Category)4 SsmlOutputSpeech (com.amazon.speech.ui.SsmlOutputSpeech)3 StandingOrder (model.banking.StandingOrder)3 ApiHelper (amosalexa.ApiHelper)1 SessionStorage (amosalexa.SessionStorage)1 Item (amosalexa.services.pricequery.aws.model.Item)1 Offer (amosalexa.services.pricequery.aws.model.Offer)1 Intent (com.amazon.speech.slu.Intent)1 Session (com.amazon.speech.speechlet.Session)1 SpeechletException (com.amazon.speech.speechlet.SpeechletException)1 JSONException (com.amazonaws.util.json.JSONException)1 ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper)1 IOException (java.io.IOException)1 DateFormat (java.text.DateFormat)1 SimpleDateFormat (java.text.SimpleDateFormat)1 LinkedList (java.util.LinkedList)1