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);
}
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);
}
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);
}
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;
}
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);
}
Aggregations