

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Erfassung von Slot-Werten mit Rechtschreibstilen während der Konversation
<a name="spelling-styles"></a>

Amazon Lex V2 bietet integrierte Steckplätze zur Erfassung benutzerspezifischer Informationen wie Vorname, Nachname, E-Mail-Adresse oder alphanumerische Identifikatoren. Sie können den `AMAZON.LastName` Slot beispielsweise verwenden, um Nachnamen wie „Jackson“ oder „Garcia“ zu erfassen. Amazon Lex V2 kann jedoch mit Nachnamen verwechselt werden, die schwer auszusprechen sind oder in einem bestimmten Land nicht üblich sind, wie z. B. „Xiulan“. Um solche Namen zu erfassen, können Sie den Benutzer bitten, die Eingabe buchstabenweise * oder * * buchstabenweise vorzunehmen. *

Amazon Lex V2 bietet drei verschiedene Arten der * Slot-Erfassung, * die Sie verwenden können. Wenn Sie einen Stil für die Slot-Erfassung festlegen, ändert sich dadurch die Art und Weise, wie Amazon Lex V2 die Benutzereingaben interpretiert.

**Buchstabenweise ** — Mit diesem Stil können Sie den Bot anweisen, nicht auf die gesamte Phrase, sondern auf Schreibweisen zu achten. Um beispielsweise einen Nachnamen wie „Xiulan“ zu erfassen, können Sie den Benutzer anweisen, seinen Nachnamen buchstabenweise zu buchstabieren. Der Bot erfasst die Schreibweise und löst die Buchstaben zu einem Wort auf. Wenn der Benutzer beispielsweise „x i u l a n“ sagt, erfasst der Bot den Nachnamen als „Xiulan“.

**Buchstabieren für Wort ** — In Sprachgesprächen, insbesondere am Telefon, gibt es einige Buchstaben, wie „t“, „b“, „p“, die ähnlich klingen. Wenn die Erfassung alphanumerischer Werte oder die Rechtschreibung von Namen zu einem falschen Wert führt, können Sie den Benutzer auffordern, zusammen mit dem Buchstaben ein identifizierendes Wort anzugeben. Wenn die Sprachantwort auf eine Anfrage nach einer Buchungs-ID beispielsweise „abp123“ lautet, erkennt Ihr Bot stattdessen möglicherweise stattdessen den Ausdruck „ab ** b ** 123". Wenn dies ein falscher Wert ist, können Sie den Benutzer bitten, die Eingabe als „a wie in Alpha b wie in boy p wie in peter eins zwei drei“ einzugeben. Der Bot löst die Eingabe in „abp123“ auf.

Wenn Sie buchstabenweise verwenden, können Sie die folgenden Formate verwenden:

Für Englisch (USA), Englisch (UK) und Englisch (Australien):
+ „wie in“ (wie in Apple)
+ „für“ (a für Apfel)
+ „wie“ (ein wie Apfel)

Für Deutsch (de-DE):
+ „Wein“ (auf einer Weinpizza)
+ „für“ (p für Pizza)

Für Französisch (fr-FR):
+ „comme“ (p comme paris)
+ „pour“ (p pour Paris)

Für Spanisch (es-419, es-US, es-ES):
+ „como“ (u como union)
+ „de“ (u de union)

**Standard ** — Dies ist der natürliche Stil der Slot-Erfassung mithilfe der Wortaussprache. Zum Beispiel können Namen wie „John Stiles“ auf natürliche Weise erfasst werden. Wenn kein Slot-Auslösestil angegeben ist, verwendet der Bot den Standardstil. Für die Typen `AMAZON.AlphaNumeric` und `AMAZON.UKPostal` Code-Slot unterstützt der Standardstil die Buchstaben-für-Buchstaben-Eingabe.

Wenn der Name „Xiulan“ mit einer Mischung aus Buchstaben und Wörtern gesprochen wird, z. B. „x wie in X-ray i u l wie in lion a n“, muss für das Auslesen des Spielautomaten der Stil „Buchstab-für-Wort“ gewählt werden. Der Buchstaben-für-Buchstaben-Stil erkennt ihn nicht.

Für ein besseres Erlebnis sollten Sie eine Sprachschnittstelle erstellen, die Slot-Werte in einem natürlichen Gesprächsstil erfasst. Bei Eingaben, die im natürlichen Stil nicht korrekt erfasst werden, können Sie den Benutzer erneut auffordern und den Slot-Ausrufstil auf buchstabenweise oder buchstabenweise festlegen.

Sie können für die folgenden Slot-Typen in den Sprachen Englisch (US), Englisch (UK), Englisch (Australien), Deutsch (de-DE), Französisch (fr-FR) und Spanisch (es-419, es-US, es-ES) die Stile „Buchstabenweise“ und „Buchstabenweise“ verwenden: 
+  [AMAZON.AlphaNumeric](built-in-slot-alphanumeric.md) 
+  [AMAZON.EmailAddress](built-in-slot-email.md) 
+  [AMAZON.FirstName](built-in-slot-first-name.md) 
+  [AMAZON.LastName](built-in-slot-last-name.md) 
+  [AMAZON.UKPostalCode](built-in-slot-uk-postal-code.md)(Nur Englisch (US), Englisch (UK) und Englisch (Australien)) 
+  [Benutzerdefinierte Slot-Typen ](custom-slot-types.md) 

## Rechtschreibung aktivieren
<a name="spelling-enable"></a>

Sie aktivieren Buchstaben-für-Wort und Buchstaben-für-Wort zur Laufzeit, wenn Sie dem Benutzer Slots entlocken. Sie können den Rechtschreibstil mit der Operation,, oder festlegen. [ PutSession ](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_PutSession.html) [ RecognizeText ](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_RecognizeText.html) [ RecognizeUtterance ](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_RecognizeUtterance.html) [ StartConversation ](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_StartConversation.html) Mithilfe einer Lambda-Funktion können Sie auch die buchstabenweise und die buchstabenweise buchstabenweise buchstabenweise Funktion aktivieren.

Sie legen den Rechtschreibstil mithilfe des `dialogAction` Felds in der Anforderung einer der `sessionState` oben genannten API-Operationen oder bei der Konfiguration der Lambda-Antwort fest (weitere Informationen finden Sie unter). [AWS LambdaAntwortformat für Lex V2](lambda-response-format.md) Sie können den Stil nur festlegen, wenn der Aktionstyp „Dialog“ lautet `ElicitSlot` und wenn es sich bei dem aufzurufenden Slot um einen der unterstützten Slot-Typen handelt.

Der folgende JSON-Code zeigt das `dialogAction` Feld, das so eingerichtet ist, dass es den buchstabenweisen Stil verwendet:

```
"dialogAction": {
    "slotElicitationStyle": "SpellByWord",
    "slotToElicit": "BookingId",
    "type": "ElicitSlot"
}
```

Das Feld `slotElicitationStyle` kann auf `SpellByLetter`, `SpellByWord` oder `Default` gesetzt werden. Wenn Sie keinen Wert angeben, wird der Wert auf gesetzt. `Default`

**Anmerkung**  
Sie können über die Konsole keine Stile für die buchstabenweise oder buchstabenweise Erfassung aktivieren.

## Beispielcode mit Lambda und Lex V2
<a name="spelling-example"></a>

Das Ändern des Rechtschreibstils erfolgt normalerweise, wenn der erste Versuch, einen Slot-Wert zu lösen, nicht funktioniert hat. Das folgende Codebeispiel ist eine Python-Lambda-Funktion, die beim zweiten Versuch, einen Slot zu lösen, den Spell-by-Word-Stil verwendet.

Um den Beispielcode verwenden zu können, benötigen Sie:
+ Ein Bot mit einer Sprache, Englisch (GB) (en\_GB). 
+ Eine Absicht, "CheckAccount" mit einer Beispieläußerung, „Ich möchte mein Konto überprüfen“. Vergewissern Sie sich, dass im ** Abschnitt ** Code-Hooks der Intent-Definition die Option Eine Lambda-Funktion für Initialisierung und Validierung ** verwenden ausgewählt ** ist.
+ Die Absicht sollte einen Slot, "PostalCode„, vom Typ „`AMAZON.UKPostalCode`eingebaut“ haben.
+ Ein Alias mit definierter Lambda-Funktion. Weitere Informationen finden Sie unter [Eine AWS Lambda Funktion für Ihren Amazon Lex V2-Bot erstellen](lambda-attach.md).



```
import json
import time
import os
import logging

logger = logging.getLogger()
logger.setLevel(logging.DEBUG)

# --- Helpers that build all of the responses ---

def get_slots(intent_request):
    return intent_request['sessionState']['intent']['slots']

def get_session_attributes(intent_request):
    sessionState = intent_request['sessionState']
    if 'sessionAttributes' in sessionState:
        return sessionState['sessionAttributes']
    return {}

def get_slot(intent_request, slotName):
    slots = get_slots(intent_request)
    if slots is not None and slotName in slots and slots[slotName] is not None:
        logger.debug('resolvedValue={}'.format(slots[slotName]['value']['resolvedValues']))
        return slots[slotName]['value']['resolvedValues']
    else:
        return None

def elicit_slot(session_attributes, intent_request, slots, slot_to_elicit, slot_elicitation_style, message):
    return {'sessionState': {'dialogAction': {'type': 'ElicitSlot',
                                              'slotToElicit': slot_to_elicit,
                                              'slotElicitationStyle': slot_elicitation_style
                                              },
                             'intent': {'name': intent_request['sessionState']['intent']['name'],
                                        'slots': slots,
                                        'state': 'InProgress'
                                        },
                             'sessionAttributes': session_attributes,
                             'originatingRequestId': 'REQUESTID'
                             },
            'sessionId': intent_request['sessionId'],
            'messages': [ message ],
            'requestAttributes': intent_request['requestAttributes']
            if 'requestAttributes' in intent_request else None
            }

def build_validation_result(isvalid, violated_slot, slot_elicitation_style, message_content):
    return {'isValid': isvalid,
            'violatedSlot': violated_slot,
            'slotElicitationStyle': slot_elicitation_style,
            'message': {'contentType': 'PlainText', 
            'content': message_content}
            }

def GetItemInDatabase(postal_code):
    """
    Perform database check for transcribed postal code. This is a no-op
    check that shows that postal_code can't be found in the database.
    """
    return None

def validate_postal_code(intent_request):

    postal_code = get_slot(intent_request, 'PostalCode')

    if GetItemInDatabase(postal_code) is None:
        return build_validation_result(
            False,
            'PostalCode',
            'SpellByWord',
            "Sorry, I can't find your information. " +
            "To try again, spell out your postal " +
            "code using words, like a as in apple."
        )
    return {'isValid': True}

def check_account(intent_request):
    """
    Performs dialog management and fulfillment for checking an account
    with a postal code. Besides fulfillment, the implementation for this 
    intent demonstrates the following:
    1) Use of elicitSlot in slot validation and re-prompting.
    2) Use of sessionAttributes to pass information that can be used to
        guide a conversation.
    """
    slots = get_slots(intent_request)
    postal_code = get_slot(intent_request, 'PostalCode')
    session_attributes = get_session_attributes(intent_request)

    if intent_request['invocationSource'] == 'DialogCodeHook':
        # Validate the PostalCode slot. If any aren't valid, 
        # re-elicit for the value.
        validation_result = validate_postal_code(intent_request)
        if not validation_result['isValid']:
            slots[validation_result['violatedSlot']] = None
            return elicit_slot(
                session_attributes,
                intent_request,
                slots,
                validation_result['violatedSlot'],
                validation_result['slotElicitationStyle'],
                validation_result['message']
            )
    
        return close(
            intent_request,
            session_attributes,
            'Fulfilled',
            {'contentType': 'PlainText',
             'content': 'Thanks'
             }
        )

def close(intent_request, session_attributes, fulfillment_state, message):
    intent_request['sessionState']['intent']['state'] = fulfillment_state
    return {
        'sessionState': {
            'sessionAttributes': session_attributes,
            'dialogAction': {
                'type': 'Close'
            },
            'intent': intent_request['sessionState']['intent'],
            'originatingRequestId': 'xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
        },
        'messages': [ message ],
        'sessionId': intent_request['sessionId'],
        'requestAttributes': intent_request['requestAttributes'] if 'requestAttributes' in intent_request else None
    }

# --- Intents ---

def dispatch(intent_request):
    """
    Called when the user specifies an intent for this bot.
    """
    intent_name = intent_request['sessionState']['intent']['name']
    response = None

    # Dispatch to your bot's intent handlers
    if intent_name == 'CheckAccount':
        response = check_account(intent_request)

    return response

# --- Main handler ---

def lambda_handler(event, context):
    """
    Route the incoming request based on the intent.

    The JSON body of the request is provided in the event slot.
    """

    # By default, treat the user request as coming from 
    # Eastern Standard Time.
    os.environ['TZ'] = 'America/New_York'
    time.tzset()

    logger.debug('event={}'.format(json.dumps(event)))
    response = dispatch(event)
    logger.debug("response={}".format(json.dumps(response)))

    return response
```