Platon Data Intelligence.
Vertikal søgning & Ai.

Brug Amazon Lex til at fange vejadresser

Dato:

Amazon Lex leverer teknologier til automatisk talegenkendelse (ASR) og naturlig sprogforståelse (NLU) til at transskribere brugerinput, identificere arten af ​​deres anmodning og effektivt styre samtaler. Lex lader dig skabe sofistikerede samtaler, strømline din brugeroplevelse for at forbedre kundetilfredshedsscore (CSAT) og øge indeslutningen i dine kontaktcentre.

Naturlige, effektive kundeinteraktioner kræver, at den virtuelle Lex-agent fortolker de oplysninger, som kunden giver, nøjagtigt. Et scenarie, der kan være særligt udfordrende, er at fange en adresse under et opkald. Overvej for eksempel en kunde, der for nylig er flyttet til en ny by og ringer ind for at opdatere deres adresse til deres trådløse konto. Selv et enkelt postnummer i USA kan indeholde en lang række gadenavne. Det kan være svært at få den rigtige adresse over telefonen, selv for menneskelige agenter.

I dette indlæg vil vi demonstrere, hvordan du kan bruge Amazon Lex og Amazon Location Service at give en effektiv brugeroplevelse til at fange deres adresse via tale eller tekst.

Løsningsoversigt

Til dette eksempel vil vi bruge en Amazon Lex-bot, der giver selvbetjeningsfunktioner som en del af en Amazon Connect kontakt flow. Når brugeren ringer ind på deres telefon, kan de bede om at ændre deres adresse, og botten vil bede dem om deres kundenummer og deres nye adresse. I mange tilfælde vil den nye adresse blive fanget korrekt i første forsøg. For mere udfordrende adresser kan botten bede dem om at gentage deres vejnavn, stave deres vejnavn eller gentage deres postnummer eller adressenummer for at fange den korrekte adresse.

Her er et eksempel på brugerinteraktion til modellering af vores Lex-bot:

IVR: Hej, velkommen til ACME bank kundeservice. Hvordan kan jeg hjælpe? Du kan tjekke kontosaldi, bestille checks eller ændre din adresse.

Bruger: Jeg vil ændre min adresse.

IVR: Kan du venligst fortælle mig dit kundenummer?

Bruger: 123456.

IVR: Tak. Fortæl mig venligst dit nye postnummer.

Bruger: 32312.

IVR: OK, hvad er din nye adresse?

Bruger: 6800 Thomasville Road, Suite 1-oh-1.

IVR: Tak skal du have. For at være sikker på, at jeg får det rigtigt, kan du så fortælle mig navnet på din gade?

Bruger: Thomasville Road.

IVR: OK, din nye adresse er 6800 Thomasville Road, Suite 101, Tallahassee Florida 32312, USA. Er det rigtigt?

Bruger: Ja.

IVR: OK, din adresse er blevet opdateret. Er der andet jeg kan hjælpe med?

Bruger: Nej tak.

IVR: Tak fordi du tog fat. Hav en god dag!

Som en alternativ tilgang kan du fange hele adressen i en enkelt omgang i stedet for at bede om postnummeret først:

IVR: Hej, velkommen til ACME bank kundeservice. Hvordan kan jeg hjælpe? Du kan tjekke kontosaldi, bestille checks eller ændre din adresse.

Bruger: Jeg vil gerne opdatering min adresse.

IVR: Kan du venligst fortælle mig dit kundenummer?

Bruger: 123456.

IVR: Tak. Fortæl mig venligst din nye adresse, inklusive gade, by, stat og postnummer.

Bruger: 6800 Thomasville Road, Suite 1-oh-1, Tallahassee Florida, 32312.

IVR: Tak skal du have. For at være sikker på, at jeg får det rigtigt, kan du så fortælle mig navnet på din gade?

Bruger: Thomasville Road.

IVR: OK, din nye adresse er 6800 Thomasville Road, Suite 101, Tallahassee Florida 32312, US. Er det rigtigt?

Bruger: Ja.

IVR: OK, din adresse er blevet opdateret. Er der andet jeg kan hjælpe med?

Bruger: Nej tak.

IVR: Tak fordi du tog fat. Hav en god dag!

Løsningsarkitektur

Vi bruger en Amazon Lex-bot integreret med Amazon Connect i denne løsning. Når brugeren ringer ind og oplyser sin nye adresse, bruger Lex automatisk talegenkendelse til at transskribere sin tale til tekst. Derefter bruger den en AWS Lambda opfyldelsesfunktion til at sende den transskriberede tekst til Amazon Location Service, som udfører adresseopslag og returnerer en normaliseret adresse.

Som en del af AWS CloudFormation stak, kan du også oprette en valgfri Amazon CloudWatch-logfiler loggruppe til at fange Lex-samtalelogfiler, som kan bruges til at oprette et samtaleanalyse-dashboard for at visualisere resultaterne (se indlægget Opbygning af et business intelligence-dashboard til dine Amazon Lex-bots for én måde at gøre dette på).

Sådan fungerer det

Denne løsning kombinerer flere teknikker for at skabe en effektiv brugeroplevelse, herunder:

  • Amazon Lex automatisk talegenkendelsesteknologi til at konvertere tale til tekst.
  • Integration med Amazon Location Service til adresseopslag og normalisering.
  • Lex stavemåder, for at implementere en "say-spell"-tilgang, når stemmeinput ikke er tydelige (bed for eksempel brugeren om at sige deres vejnavn og derefter om nødvendigt at stave det).

Det første trin er at sikre, at de nødvendige slots er blevet fanget.

I det første kodeafsnit, der følger, beder vi brugeren om deres postnummer og adresse ved hjælp af Lex ElicitSlot dialoghandling. Det elicit_slot_with_retries() funktion spørger brugeren baseret på et sæt konfigurerbare prompter.

 
    # check for ZipCode code slot; if not available; elicit it
    zip_code = None
    zipCode = slot_values.get('ZipCode', None)
    if zipCode is not None:
        zip_code = zipCode['value'].get('interpretedValue', None)
    else:
        response = helpers.elicit_slot_with_retries( intent, activeContexts, sessionAttributes, 'ZipCode', requestAttributes)
        return response		
    # check for StreetAddress slot
    street_address = None
    streetAddress = slot_values.get('StreetAddress', None)
    if streetAddress is not None:
        street_address = streetAddress['value'].get('interpretedValue', None)
    else:
        # give the caller extra time for this response
        sessionAttributes['x-amz-lex:audio:end-timeout-ms:' + intent_name + ':StreetAddress'] = 2000
        response = helpers.elicit_slot_with_retries( intent, activeContexts, sessionAttributes, 'StreetAddress', requestAttributes)
        return response
    street_address = parse_address.parse(street_address)
    sessionAttributes['inputAddress'] = street_address

Det sidste afsnit af koden ovenfor bruger en hjælpefunktion parse_address.parse() der konverterer talte tal til cifre (for eksempel konverterer den "otteogtres hundrede" til "6800").

Derefter sender vi brugerens ytring til Amazon Location Service og inspicerer svaret. Vi kasserer alle poster, der ikke har en vej, et vejnummer eller har et forkert postnummer. I tilfælde, hvor vi er nødt til at bede om et vejnavn eller -nummer igen, kasserer vi også tidligere foreslåede adresser.

# validate the address using the AWS Location Service
    location_response = locationClient.search_place_index_for_text(IndexName='explore.place', Text=street_address)
    # inspect the response from Amazon Location Service
    if location_response.get('Results', None) is not None:
        for address in location_response['Results']:
            if address.get('Place', None) is not None:
                addressLabel = address['Place'].get('Label', None)
                addressNumber = address['Place'].get('AddressNumber', None)
                street = address['Place'].get('Street', None)
                postalCode = address['Place'].get('PostalCode', None)
                if street is None:
                    continue                    
                if addressNumber is None:
                    continue                    
                if zip_code is not None:
                    if postalCode[:len(zip_code)] != zip_code:
                        continue
                already_tried = False
                prior_suggestions = helpers.get_all_values('suggested_address', sessionAttributes)
                for prior_suggestion in prior_suggestions:
                    if addressLabel == prior_suggestion:
                        already_tried = True
                        break                    
                if already_tried:
                    continue
                # the first entry with a valid street that was not already tried is the next best guess
                resolvedAddress = addressLabel
                break

Når vi har en løst adresse, bekræfter vi den med brugeren.

if (event.get('inputMode') == 'Speech'):
        response_string = '<speak>OK, your new address is <say-as interpret-as="address">'
        response_string += resolvedAddress + '</say-as>. Is that right?</speak>'
        response_message = helpers.format_message_array(response_string, 'SSML')
    else:
       response_string = 'OK, your new address is ' + resolvedAddress + '. Is that right?'
        response_message = helpers.format_message_array(response_string, 'PlainText')
    intent['state'] = 'Fulfilled'
    response = helpers.confirm(intent, activeContexts, sessionAttributes, response_message, requestAttributes)
    return response

Hvis vi ikke får en løst adresse tilbage fra Amazon Location Service, eller hvis brugeren siger, at den adresse, vi foreslog, ikke var rigtig, så beder vi igen om nogle yderligere oplysninger og prøver igen. De ekstra informationspladser inkluderer:

  • Gadenavn: slot type AMAZON.StreetName
  • SpelledStreetName: slottype AMAZON.AlphaNumeric (ved hjælp af Amazon Lex stavemåder)
  • StreetAddressNumber: slottype AMAZON.Number

Logikken til at genbede er styret af next_retry() funktion, som konsulterer en liste over handlinger, du kan prøve:

RETRY_ACTIONS = [
    { "street_name": {
          "method": elicit_street_name,
          "style": None,
          "no-match": "Thank you. To make sure I get it right, can you tell me just the name of your street?",
          "incorrect": "Let's try again. Can you tell me just the name of your street?"
       }
    },
    { "street_name_spelled_by_letter": {
          "method": elicit_spelled_street, 
          "style": "SpellByLetter",
          "no-match": "Let's try a different way. Can you please spell just the name of your street?",
          "incorrect": "Let's try a different way. Can you please spell just the name of your street?"
       }
    },
    { "street_address_number": {
          "method": elicit_street_address_number, 
          "style": None,
          "no-match": "I didn't find a matching address. Can you please tell me your street address number?",
          "incorrect": "OK, let's try your street address number. Can you tell me that once more?"
       }
    },
    { "street_name_spelled_by_word": {
          "method": elicit_spelled_street, 
          "style": "SpellByWord",
          "no-match": "Let's try one last time. Please spell the name of your street. You can use words for letters, such as a as in apple, or b like bob.",
          "incorrect": "Let's try one last time. Please spell the name of your street. You can use words for letters, such as a as in apple, or b like bob."
       }
    },
    { "agent": {
          "method": route_to_agent, 
          "style": None,
          "no-match": "Sorry, I was not able to find a match for your address. Let me get you to an agent.",
          "incorrect": "Sorry, I was not able to find a match for your address. Let me get you to an agent."
       }
    }
]

next_retry() funktion vil prøve disse handlinger i rækkefølge. Du kan ændre rækkefølgen af ​​prompter ved at ændre rækkefølgen i RETRY_ACTIONS liste. Du kan også konfigurere forskellige prompter for scenarier, hvor Amazon Location Service ikke finder et match, kontra når brugeren siger, at den foreslåede adresse ikke var korrekt. Som du kan se, kan vi bede brugeren om at gengive deres gadenavn, og hvis det ikke er tilfældet, at stave det ved hjælp af Amazon Lex stavemåder. Vi omtaler dette som en "say-spell"-tilgang, og den svarer til, hvordan en menneskelig agent ville interagere med en kunde i dette scenarie.

For at se dette i aktion kan du implementere det på din AWS-konto.

Forudsætninger

Du kan bruge CloudFormation-linket, der følger, til at implementere løsningen på din egen AWS-konto. Før du implementerer denne løsning, skal du bekræfte, at du har følgende forudsætninger:

  • En tilgængelig AWS-konto hvor du kan implementere løsningen.
  • Adgang til følgende AWS-tjenester:
    • Amazon Lex
    • AWS Lambda, til integration med Amazon Location Service
    • Amazon Location Service, til adresseopslag
    • AWS identitets- og adgangsstyring (IAM), for at skabe de nødvendige politikker og roller
    • CloudWatch-logfiler, for at oprette loggrupper til Lambda-funktionen og eventuelt til optagelse af Lex-samtalelogfiler
    • CloudFormation for at oprette stakken
  • En Amazon Connect-instans (for instruktioner om opsætning af en, se Opret en Amazon Connect-instans).

Følgende AWS-regioner understøtter Amazon Lex, Amazon Connect og Amazon Location Service: US East (N. Virginia), US West (Oregon), Europa (Frankfurt), Asia Pacific (Singapore), Asia Pacific (Sydney) Region og Asien Stillehavet (Tokyo).

Implementering af prøveopløsningen

Log ind på AWS Management Console i din AWS-konto, og vælg følgende link for at implementere eksempelløsningen:

Dette vil oprette en ny CloudFormation-stak.

Indtast en Staknavn, Såsom lex-update-address-example. Indtast ARN (Amazon Resource Name) for Amazon Connect-forekomsten, som du skal bruge til at teste løsningen. Du kan beholde standardværdierne for de andre parametre eller ændre dem, så de passer til dine behov. Vælge Næste, og tilføj de tags, du måtte ønske til din stak (valgfrit). Vælge Næste igen, gennemgå stakdetaljerne, marker afkrydsningsfeltet for at bekræfte, at IAM-ressourcer vil blive oprettet, og vælg derefter Opret stak.

Efter et par minutter vil din stak være færdig og inkludere følgende ressourcer:

  • En Lex-bot, inklusive en offentliggjort version med et alias (Development-Alias)
  • En Lambda-opfyldelsesfunktion til botten (BotHandler)
  • En CloudWatch Logs-loggruppe til Lex-samtalelogfiler
  • Nødvendige Amazon IAM-roller
  • En tilpasset ressource, der tilføjer et eksempel på kontaktflow til din Connect-instans

På dette tidspunkt kan du prøve eksempelinteraktionen ovenfor i Lex V2-konsollen. Du bør se prøve-bot med det navn, du har angivet i CloudFormation-skabelonen (f.eks. update-address-bot).

Vælg denne bot, vælg Bot versioner i navigationspanelet til venstre skal du vælge Version 1 version, og vælg derefter Hensigter i panelet til venstre. Du vil se listen over hensigter samt en Test .

For at teste skal du vælge Test Knappen, vælg Development-Alias, Og vælg derefter Bekræfte for at åbne testvinduet.

Prøv "Jeg vil ændre min adresse" for at komme i gang. Dette vil bruge UpdateAddressZipFirst hensigt om at fange en adresse, begyndende med at bede om postnummeret og derefter bede om gadeadressen.

Du kan også sige "Jeg vil gerne opdatering min adresse" for at prøve UpdateAddress hensigt, som fanger en adresse på én gang med en enkelt ytring.

Test med Amazon Connect

Lad os nu prøve dette med stemme ved hjælp af en Connect-instans. Et eksempel på kontaktflow var allerede konfigureret i din Connect-instans:

Alt du skal gøre er at oprette et telefonnummer og knytte det til dette kontaktflow. For at gøre dette skal du følge disse trin:

  • Start Amazon Connect i AWS-konsollen.
  • Åbn din Connect-instans ved at vælge Adgang til URL, og logge ind på instansen.
  • Vælg i Dashboard Se telefonnumre.
  • Type Gør krav på et nummer, vælg et land fra Land rullemenuen, og vælg et tal.
  • Indtast en beskrivelse, såsom "Eksempel flow for at opdatere en adresse med Amazon Lex", og vælg det kontaktflow, du lige har oprettet.
  • Vælg Gem.

Nu er du klar til at ringe ind til din Connect-instans for at teste din bot ved hjælp af stemme. Indtast blot nummeret på din telefon, og prøv nogle amerikanske adresser. For at prøve postnummeret først, sig "skift min adresse". For at prøve at ændre adressen i én omgang, sig "opdater min adresse". Du kan også bare sige "min nye adresse er", efterfulgt af en gyldig amerikansk adresse.

Men vent… der er mere

Et andet udfordrende anvendelsestilfælde for stemmescenarier er at fange en brugers e-mailadresse. Dette er ofte nødvendigt for brugerverifikationsformål eller blot for at lade brugeren ændre deres e-mail-adresse. Lex har indbygget understøttelse af e-mail-adresser ved hjælp af AMAZON.EmailAddress indbygget slot-type, som også understøtter Lex stavestile.

Det kan være meget effektivt at bruge en "say-spell"-tilgang til at indfange e-mail-adresser, og da tilgangen ligner brugeroplevelsen i scenarierne for gadeadressefangst, som vi beskrev ovenfor, har vi inkluderet det her. Giv det en chance!

Ryd op

Du ønsker måske at rydde op i de ressourcer, der er oprettet som en del af CloudFormation-skabelonen, når du er færdig med at bruge botten for at undgå at pådrage dig løbende gebyrer. For at gøre dette skal du slette CloudFormation-stakken.

Konklusion

Amazon Lex tilbyder kraftfuld automatiseret talegenkendelse og naturlige sprogforståelsesfunktioner, der kan bruges til at fange de nødvendige oplysninger fra dine brugere for at levere automatiseret, selvbetjeningsfunktionalitet. At fange en kundes adresse via talegenkendelse kan være udfordrende på grund af rækken af ​​navne på gader, byer og byer. Du kan dog nemt integrere Amazon Lex med Amazon Location Service for at finde den korrekte adresse, baseret på kundens input. Du kan inkorporere denne teknik i dine egne Lex-samtaleflows.


Om forfatteren

Brian Yost er en Senior Technical Program manager på AWS Lex-teamet. I sin fritid nyder han at cykle på mountainbike, hjemmebrygning og at pille ved teknologi.

spot_img

Seneste efterretninger

spot_img

Chat med os

Hej! Hvordan kan jeg hjælpe dig?