Platon Data Intelligence.
Vertikalt søk og Ai.

Bruk Amazon Lex til å fange gateadresser

Dato:

Amazon Lex tilbyr teknologier for automatisk talegjenkjenning (ASR) og naturlig språkforståelse (NLU) for å transkribere brukerinndata, identifisere arten av forespørselen deres og effektivt administrere samtaler. Lex lar deg lage sofistikerte samtaler, strømlinjeforme brukeropplevelsen din for å forbedre kundetilfredshet (CSAT)-score og øke inneslutningen i kontaktsentrene dine.

Naturlige, effektive kundeinteraksjoner krever at Lex virtuelle agent tolker informasjonen gitt av kunden nøyaktig. Et scenario som kan være spesielt utfordrende er å fange en gateadresse under en samtale. Tenk for eksempel på en kunde som nylig har flyttet til en ny by og ringer inn for å oppdatere gateadressen for sin trådløse konto. Selv et enkelt postnummer i USA kan inneholde et bredt spekter av gatenavn. Å få riktig adresse over telefon kan være vanskelig, selv for menneskelige agenter.

I dette innlegget viser vi hvordan du kan bruke Amazon Lex og Amazon Location Service for å gi en effektiv brukeropplevelse for å fange adressen deres via tale eller tekst.

Løsningsoversikt

For dette eksempelet vil vi bruke en Amazon Lex-bot som gir selvbetjeningsfunksjoner som en del av en Amazon Connect kontaktflyt. Når brukeren ringer inn på telefonen sin, kan de be om å endre adressen sin, og boten vil be dem om kundenummeret og den nye adressen. I mange tilfeller vil den nye adressen fanges opp riktig i første forsøk. For mer utfordrende adresser kan roboten be dem om å angi gatenavnet på nytt, stave gatenavnet eller gjenta postnummeret eller adressenummeret for å fange opp den riktige adressen.

Her er et eksempel på brukerinteraksjon for å modellere vår Lex-bot:

IVR: Hei, velkommen til ACME banks kundeservice. Hvordan kan jeg hjelpe? Du kan sjekke kontosaldo, bestille sjekker eller endre adressen din.

Bruker: Jeg vil endre adressen min.

IVR: Kan du fortelle meg kundenummeret ditt?

Bruker: 123456.

IVR: Takk. Fortell meg ditt nye postnummer.

Bruker: 32312.

IVR: OK, hva er den nye gateadressen din?

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

IVR: Takk skal du ha. For å være sikker på at jeg får det riktig, kan du fortelle meg bare navnet på gaten din?

Bruker: Thomasville Road.

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

Bruker: Ja.

IVR: OK, adressen din har blitt oppdatert. Er det noe annet jeg kan hjelpe med?

Bruker: Nei takk.

IVR: Takk for at du tok kontakt. Ha en flott dag!

Som en alternativ tilnærming kan du fange hele adressen i en enkelt sving, i stedet for å be om postnummeret først:

IVR: Hei, velkommen til ACME banks kundeservice. Hvordan kan jeg hjelpe? Du kan sjekke kontosaldo, bestille sjekker eller endre adressen din.

Bruker: Jeg vil Oppdater min adresse.

IVR: Kan du fortelle meg kundenummeret ditt?

Bruker: 123456.

IVR: Takk. Fortell meg den nye adressen din, inkludert gate, by, delstat og postnummer.

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

IVR: Takk skal du ha. For å være sikker på at jeg får det riktig, kan du fortelle meg bare navnet på gaten din?

Bruker: Thomasville Road.

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

Bruker: Ja.

IVR: OK, adressen din har blitt oppdatert. Er det noe annet jeg kan hjelpe med?

Bruker: Nei takk.

IVR: Takk for at du tok kontakt. Ha en flott dag!

Løsningsarkitektur

Vi vil bruke en Amazon Lex-bot integrert med Amazon Connect i denne løsningen. Når brukeren ringer inn og oppgir sin nye adresse, bruker Lex automatisk talegjenkjenning for å transkribere talen til tekst. Deretter bruker den en AWS Lambda oppfyllelsesfunksjon for å sende den transkriberte teksten til Amazon Location Service, som utfører adresseoppslag og returnerer en normalisert adresse.

Som en del av AWS skyformasjon stabel, kan du også lage en valgfri Amazon CloudWatch-logger logggruppe for å fange Lex-samtalelogger, som kan brukes til å lage et dashbord for samtaleanalyse for å visualisere resultatene (se innlegget Bygg et business intelligence-dashbord for Amazon Lex-robotene dine for én måte å gjøre dette på).

Hvordan fungerer det

Denne løsningen kombinerer flere teknikker for å skape en effektiv brukeropplevelse, inkludert:

  • Amazon Lex automatisk talegjenkjenningsteknologi for å konvertere tale til tekst.
  • Integrasjon med Amazon Location Service for adresseoppslag og normalisering.
  • Lex stavemåter, for å implementere en «say-spell»-tilnærming når stemmeinndata ikke er klare (be for eksempel brukeren om å si gatenavnet sitt, og deretter om nødvendig stave det).

Det første trinnet er å sørge for at de nødvendige sporene har blitt fanget.

I den første kodedelen som følger ber vi brukeren om postnummer og gateadresse ved å bruke Lex ElicitSlot dialoghandling. De elicit_slot_with_retries() funksjonen ber brukeren basert på et sett med konfigurerbare spørsmål.

 
    # 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

Den siste delen av koden ovenfor bruker en hjelpefunksjon parse_address.parse() som konverterer talte tall til sifre (for eksempel konverterer den "sekstiåttehundre" til "6800").

Deretter sender vi brukerens ytring til Amazon Location Service og inspiserer svaret. Vi forkaster alle oppføringer som ikke har en gate, et gatenummer eller har feil postnummer. I tilfeller der vi må be om et gatenavn eller nummer på nytt, forkaster vi også tidligere foreslåtte 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, bekrefter vi den med brukeren.

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 tilbake fra Amazon Location Service, eller hvis brukeren sier at adressen vi foreslo ikke var riktig, ber vi om litt tilleggsinformasjon og prøver på nytt. Ekstra informasjonsplasser inkluderer:

  • Gatenavn: sportype AMAZON.StreetName
  • SpelledStreetName: sportype AMAZON.AlphaNumeric (ved hjelp av Amazon Lex stavemåter)
  • StreetAddressNumber: sportype AMAZON.Number

Logikken for å spørre på nytt styres av next_retry() funksjon, som viser 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."
       }
    }
]

De next_retry() funksjonen vil prøve disse handlingene i rekkefølge. Du kan endre rekkefølgen av ledetekster ved å endre rekkefølgen i RETRY_ACTIONS liste. Du kan også konfigurere forskjellige spørsmål for scenarier der Amazon Location Service ikke finner en treff, kontra når brukeren sier at den foreslåtte adressen ikke var riktig. Som du kan se, kan vi be brukeren om å angi gatenavnet på nytt, og hvis det ikke er det, stave det ved å bruke Amazon Lex-stavestiler. Vi omtaler dette som en «si-troll»-tilnærming, og den ligner på hvordan en menneskelig agent vil samhandle med en kunde i dette scenariet.

For å se dette i aksjon, kan du distribuere det i AWS-kontoen din.

Forutsetninger

Du kan bruke CloudFormation-lenken som følger for å distribuere løsningen i din egen AWS-konto. Før du distribuerer denne løsningen, bør du bekrefte at du har følgende forutsetninger:

  • En tilgjengelig AWS-konto hvor du kan distribuere løsningen.
  • Tilgang til følgende AWS-tjenester:
    • Amazon Lex
    • AWS Lambda, for integrasjon med Amazon Location Service
    • Amazon Location Service, for adresseoppslag
    • AWS identitets- og tilgangsadministrasjon (IAM), for å lage nødvendige retningslinjer og roller
    • CloudWatch-logger, for å lage logggrupper for Lambda-funksjonen og eventuelt for å fange Lex-samtalelogger
    • CloudFormation for å lage stabelen
  • En Amazon Connect-forekomst (for instruksjoner om hvordan du konfigurerer en, se Opprett en Amazon Connect-forekomst).

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

Utplassering av prøveløsningen

Logg deg på AWS-administrasjonskonsoll i AWS-kontoen din, og velg følgende kobling for å distribuere eksempelløsningen:

Dette vil opprette en ny CloudFormation-stabel.

Skriv inn et Stabelnavn, Eksempel lex-update-address-example. Skriv inn ARN (Amazon Resource Name) for Amazon Connect-forekomsten som du skal bruke til å teste løsningen. Du kan beholde standardverdiene for de andre parameterne, eller endre dem for å passe dine behov. Velge neste, og legg til eventuelle tagger du måtte ønske for stabelen din (valgfritt). Velge neste igjen, se gjennom stabeldetaljene, merk av i avmerkingsboksen for å bekrefte at IAM-ressurser vil bli opprettet, og velg deretter Lag stabel.

Etter noen minutter vil stabelen din være fullført og inkludere følgende ressurser:

  • En Lex-bot, inkludert en publisert versjon med et alias (Development-Alias)
  • En Lambda-oppfyllingsfunksjon for boten (BotHandler)
  • En CloudWatch-logggruppe for Lex-samtalelogger
  • Nødvendige Amazon IAM-roller
  • En tilpasset ressurs som legger til en prøvekontaktflyt til Connect-forekomsten

På dette tidspunktet kan du prøve eksempelinteraksjonen ovenfor i Lex V2-konsollen. Du bør se prøveroboten med navnet du spesifiserte i CloudFormation-malen (f.eks. update-address-bot).

Velg denne boten, velg Bot-versjoner i navigasjonspanelet på venstre side, velg versjon 1 versjon, og velg deretter hensikter i panelet på venstre side. Du vil se listen over hensikter, samt en Test knapp.

For å teste, velg Test -knappen, velg Development-Alias, Og velg deretter Bekrefte for å åpne testvinduet.

Prøv «Jeg vil endre adressen min» for å komme i gang. Dette vil bruke UpdateAddressZipFirst hensikt å fange opp en adresse, begynne med å be om postnummeret, og deretter be om gateadressen.

Du kan også si «Jeg vil Oppdater min adresse" for å prøve UpdateAddress hensikt, som fanger opp en adresse på en gang med en enkelt ytring.

Tester med Amazon Connect

La oss nå prøve dette med stemmen ved å bruke en Connect-forekomst. En prøvekontaktflyt var allerede konfigurert i Connect-forekomsten:

Alt du trenger å gjøre er å sette opp et telefonnummer og knytte det til denne kontaktflyten. For å gjøre dette, følg disse trinnene:

  • Start Amazon Connect i AWS-konsollen.
  • Åpne Connect-forekomsten ved å velge Tilgang URL, og logge på instansen.
  • I Dashboard velger du Vis telefonnumre.
  • Plukke ut Krev et tall, velg et land fra Land rullegardinmenyen, og velg et tall.
  • Skriv inn en beskrivelse, for eksempel "Eksempelflyt for å oppdatere en adresse med Amazon Lex", og velg kontaktflyten du nettopp opprettet.
  • Velg Spar.

Nå er du klar til å ringe til Connect-forekomsten din for å teste boten din ved hjelp av stemmen. Bare slå nummeret på telefonen din, og prøv noen amerikanske adresser. For å prøve postnummeret først, si "endre adressen min". For å prøve å endre adressen i en omgang, si "oppdater adressen min". Du kan også bare si "min nye adresse er", etterfulgt av en gyldig amerikansk adresse.

Men vent ... det er mer

Et annet utfordrende bruksområde for talescenarier er å fange opp en brukers e-postadresse. Dette er ofte nødvendig for brukerverifiseringsformål, eller rett og slett for å la brukeren endre e-postadressen sin. Lex har innebygd støtte for e-postadresser som bruker den innebygde sportypen AMAZON.EmailAddress, som også støtter Lex-stavestiler.

Å bruke en "say-spell"-tilnærming for å fange e-postadresser kan være svært effektiv, og siden tilnærmingen ligner brukeropplevelsen i scenariene for gateadressefangst som vi beskrev ovenfor, har vi inkludert den her. Gi det et forsøk!

Rydd opp

Det kan være lurt å rydde opp i ressursene som er opprettet som en del av CloudFormation-malen når du er ferdig med å bruke boten for å unngå påløpende kostnader. For å gjøre dette, slett CloudFormation Stack.

konklusjonen

Amazon Lex tilbyr kraftig automatisert talegjenkjenning og naturlig språkforståelse som kan brukes til å fange opp informasjonen som trengs fra brukerne dine for å gi automatisert, selvbetjent funksjonalitet. Å fange en kundes adresse via talegjenkjenning kan være utfordrende på grunn av utvalget av navn på gater, byer og tettsteder. Du kan imidlertid enkelt integrere Amazon Lex med Amazon Location Service for å slå opp riktig adresse, basert på kundens input. Du kan inkorporere denne teknikken i dine egne Lex-samtaleflyter.


om forfatteren

Brian Yost er senior teknisk programleder på AWS Lex-teamet. På fritiden liker han terrengsykling, hjemmebrygging og å fikle med teknologi.

spot_img

Siste etterretning

spot_img

Chat med oss

Hei der! Hvordan kan jeg hjelpe deg?