Інформація про дані Платона.
Вертикальний пошук і штучний інтелект.

Використовуйте Amazon Lex для запису вуличних адрес

Дата:

Амазон Лекс забезпечує технології автоматичного розпізнавання мовлення (ASR) і розуміння природної мови (NLU) для транскрипції введених користувачами даних, визначення природи їхнього запиту та ефективного керування розмовами. Lex дозволяє створювати складні розмови, оптимізувати взаємодію з користувачем, щоб підвищити показники задоволеності клієнтів (CSAT) і збільшити обмеження у ваших контакт-центрах.

Природна ефективна взаємодія з клієнтом вимагає, щоб віртуальний агент Lex точно інтерпретував інформацію, надану клієнтом. Одним із сценаріїв, який може бути особливо складним, є запис адреси під час дзвінка. Наприклад, розглянемо клієнта, який нещодавно переїхав до нового міста та дзвонить, щоб оновити свою вуличну адресу для свого бездротового облікового запису. Навіть один поштовий індекс Сполучених Штатів може містити широкий діапазон назв вулиць. Отримати правильну адресу по телефону може бути важко навіть для агентів.

У цій публікації ми продемонструємо, як ви можете використовувати Amazon Lex і Служба локації Amazon щоб забезпечити ефективну взаємодію з користувачем для захоплення їхньої адреси через голос або текст.

Огляд рішення

У цьому прикладі ми використаємо бота Amazon Lex, який надає можливості самообслуговування як частину Amazon Connect контактний потік. Коли користувач дзвонить на своєму телефоні, він може попросити змінити свою адресу, і бот запитає його номер клієнта та нову адресу. У багатьох випадках нова адреса буде зафіксована правильно з першої спроби. Для більш складних адрес бот може попросити їх повторно назвати свою вулицю, написати назву вулиці або повторити свій поштовий індекс чи номер адреси, щоб зафіксувати правильну адресу.

Ось зразок взаємодії з користувачем для моделювання нашого бота Lex:

IVR: Привіт! Ласкаво просимо до служби підтримки клієнтів банку ACME. Чим я можу допомогти? Ви можете перевірити баланс рахунку, замовити чеки або змінити адресу.

користувач: Я хочу змінити адресу.

IVR: Чи можете ви сказати мені свій номер клієнта?

користувач: 123456.

IVR: Дякую. Будь ласка, скажіть мені свій новий поштовий індекс.

користувач: 32312.

IVR: Добре, яка твоя нова вулиця?

користувач: 6800 Thomasville Road, Suite 1-oh-1.

IVR: Дякую тобі. Щоб переконатися, що я правильно зрозумів, чи можете ви сказати мені назву вашої вулиці?

користувач: Thomasville Road.

IVR: Добре, ваша нова адреса: 6800 Thomasville Road, Suite 101, Tallahassee Florida 32312, USA. Це так?

користувач: Так.

IVR: Добре, вашу адресу оновлено. Чи можу я ще чимось допомогти?

користувач: Ні, дякую.

IVR: Дякуємо, що звернулися. Гарного дня!

Як альтернативний підхід, ви можете захопити всю адресу за один хід, а не запитувати спочатку поштовий індекс:

IVR: Привіт! Ласкаво просимо до служби підтримки клієнтів банку ACME. Чим я можу допомогти? Ви можете перевірити баланс рахунку, замовити чеки або змінити адресу.

користувач: Я хочу оновлення мою адресу.

IVR: Чи можете ви сказати мені свій номер клієнта?

користувач: 123456.

IVR: Дякую. Будь ласка, повідомте мені свою нову адресу, включаючи вулицю, місто, штат і поштовий індекс.

користувач: 6800 Thomasville Road, Suite 1-oh-1, Tallahassee Florida, 32312.

IVR: Дякую тобі. Щоб переконатися, що я правильно зрозумів, чи можете ви сказати мені назву вашої вулиці?

користувач: Thomasville Road.

IVR: Добре, ваша нова адреса: 6800 Thomasville Road, Suite 101, Tallahassee Florida 32312, US. Це так?

користувач: Так.

IVR: Добре, вашу адресу оновлено. Чи можу я ще чимось допомогти?

користувач: Ні, дякую.

IVR: Дякуємо, що звернулися. Гарного дня!

Архітектура рішення

У цьому рішенні ми використаємо бота Amazon Lex, інтегрованого з Amazon Connect. Коли користувач дзвонить і повідомляє свою нову адресу, Lex використовує автоматичне розпізнавання мовлення, щоб транскрибувати його мову в текст. Потім він використовує an AWS Lambda функцію виконання, щоб надіслати транскрибований текст до служби розташування Amazon, яка виконує пошук адреси та повертає нормалізовану адресу.

У рамках AWS CloudFormation стек, ви також можете створити необов’язковий Журнали Amazon CloudWatch група журналів для запису журналів розмов Lex, які можна використовувати для створення інформаційної панелі аналітики розмов для візуалізації результатів (див. публікацію Створення інформаційної панелі бізнес-аналітики для ваших ботів Amazon Lex для одного способу зробити це).

Як це працює?

Це рішення поєднує кілька методів для створення ефективної взаємодії з користувачем, зокрема:

  • Технологія автоматичного розпізнавання мовлення Amazon Lex для перетворення мовлення в текст.
  • Інтеграція з Amazon Location Service для пошуку та нормалізації адреси.
  • Lex стилі написання, щоб застосувати підхід «скажи-заклинай», коли голосовий ввід нечіткий (наприклад, попроси користувача назвати назву своєї вулиці, а потім, якщо необхідно, написати її по буквах).

Перший крок — переконатися, що необхідні слоти були захоплені.

У першому наступному розділі коду ми пропонуємо користувачеві ввести його поштовий індекс і адресу за допомогою Lex ElicitSlot діалогова дія. The elicit_slot_with_retries() функція запитує користувача на основі набору настроюваних підказок.

 
    # 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

Останній розділ коду вище використовує допоміжну функцію parse_address.parse() який перетворює промовлені числа на цифри (наприклад, він перетворює «шістдесят вісімсот» на «6800»).

Потім ми надсилаємо висловлювання користувача в Amazon Location Service і перевіряємо відповідь. Ми відхиляємо будь-які записи, які не містять вулиці, номеру вулиці або мають неправильний поштовий індекс. У випадках, коли нам потрібно повторно запитати назву вулиці чи номер, ми також відхиляємо будь-які раніше запропоновані адреси.

# 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

Коли ми маємо вирішену адресу, ми підтверджуємо її з користувачем.

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

Якщо ми не отримуємо визначену адресу від служби визначення місцезнаходження Amazon або якщо користувач каже, що запропонована нами адреса неправильна, ми знову запитуємо додаткову інформацію та повторюємо спробу. Додаткові інформаційні слоти включають:

  • StreetName: тип слота AMAZON.StreetName
  • SpelledStreetName: тип слота AMAZON.AlphaNumeric (з використанням Amazon Lex стилі написання)
  • StreetAddressNumber: тип слота AMAZON.Number

Логіка повторного запиту контролюється next_retry() функція, яка переглядає список дій, які слід спробувати:

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() функція спробує ці дії по порядку. Ви можете змінити послідовність підказок, змінивши порядок у RETRY_ACTIONS список. Ви також можете налаштувати різні підказки для сценаріїв, коли Amazon Location Service не знаходить збігів, а не коли користувач каже, що запропонована адреса неправильна. Як бачите, ми можемо попросити користувача повторити назву своєї вулиці, а якщо це не вийде, написати її за допомогою стилів правопису Amazon Lex. Ми називаємо це підходом «скажи-заклинай», і це схоже на те, як агент-людина взаємодіятиме з клієнтом у цьому сценарії.

Щоб побачити це в дії, ви можете розгорнути його у своєму обліковому записі AWS.

Передумови

Ви можете скористатися наведеним нижче посиланням CloudFormation, щоб розгорнути рішення у своєму обліковому записі AWS. Перш ніж розгортати це рішення, ви повинні підтвердити, що у вас є такі передумови:

  • Доступний Обліковий запис AWS де можна розгорнути рішення.
  • Доступ до таких служб AWS:
    • Амазон Лекс
    • AWS Lambda для інтеграції зі службою розташування Amazon
    • Служба визначення місцезнаходження Amazon для пошуку адреси
    • Управління ідентифікацією та доступом AWS (IAM), для створення необхідних політик і ролей
    • Журнали CloudWatch для створення груп журналів для функції Lambda та, за бажанням, для запису журналів розмов Lex
    • CloudFormation для створення стека
  • Примірник Amazon Connect (інструкції щодо його налаштування див Створіть екземпляр Amazon Connect).

Наступні регіони AWS підтримують Amazon Lex, Amazon Connect і Amazon Location Service: Схід США (Північна Вірджинія), Захід США (Орегон), Європа (Франкфурт), Азіатсько-Тихоокеанський регіон (Сінгапур), Азіатсько-Тихоокеанський регіон (Сідней) та Азія Тихоокеанський (Токіо).

Розгортання зразка рішення

Увійдіть у Консоль управління AWS у вашому обліковому записі AWS і виберіть таке посилання, щоб розгорнути приклад рішення:

Це створить новий стек CloudFormation.

Введіть Назва стека, Такі, як lex-update-address-example. Введіть ARN (назва ресурсу Amazon) для екземпляра Amazon Connect, який ви використовуватимете для тестування рішення. Ви можете залишити стандартні значення для інших параметрів або змінити їх відповідно до своїх потреб. Виберіть МАЙБУТНІі додайте будь-які теги, які вам можуть знадобитися для вашого стека (необов’язково). Виберіть МАЙБУТНІ ще раз перегляньте деталі стеку, установіть прапорець, щоб підтвердити, що ресурси IAM будуть створені, а потім виберіть Створити стек.

Через кілька хвилин ваш стек буде завершено та включатиме такі ресурси:

  • Бот Lex, включаючи опубліковану версію з псевдонімом (Development-Alias)
  • Функція виконання Lambda для бота (BotHandler)
  • Група журналів CloudWatch Logs для журналів розмов Lex
  • Необхідні ролі Amazon IAM
  • Спеціальний ресурс, який додає зразок потоку контактів до вашого екземпляра Connect

На цьому етапі ви можете спробувати наведений вище приклад взаємодії на консолі Lex V2. Ви повинні побачити зразок бота з іменем, указаним у шаблоні CloudFormation (наприклад, update-address-bot).

Вибирайте цього бота, вибирайте Версії бота на панелі навігації ліворуч виберіть версія 1 версію, а потім виберіть Наміри на панелі зліва. Ви побачите список намірів, а також a Тест кнопки.

Щоб перевірити, виберіть Тест Кнопка, виберіть Development-Alias, А потім виберіть підтвердити щоб відкрити тестове вікно.

Спробуйте «Я хочу змінити свою адресу», щоб почати. Це буде використовувати UpdateAddressZipFirst намір захопити адресу, починаючи із запиту поштового індексу, а потім запитуючи адресу вулиці.

Ви також можете сказати: «Я хочу оновлення моя адреса», щоб спробувати UpdateAddress намір, який фіксує всю адресу одним словом.

Тестування з Amazon Connect

Тепер давайте спробуємо це з голосом за допомогою екземпляра Connect. Зразок потоку контактів уже налаштовано у вашому екземплярі Connect:

Все, що вам потрібно зробити, це налаштувати номер телефону та пов’язати його з цим потоком контактів. Для цього виконайте такі дії:

  • Запустіть Amazon Connect у консолі AWS.
  • Відкрийте екземпляр Connect, вибравши URL доступу, і ввійти в екземпляр.
  • На інформаційній панелі виберіть Переглянути номери телефонів.
  • Select Заявіть номер, виберіть країну з Країна і виберіть номер.
  • Введіть опис, як-от «Приклад потоку оновлення адреси за допомогою Amazon Lex», і виберіть щойно створений цикл контактів.
  • Вибирати зберегти.

Тепер ви готові зателефонувати до свого екземпляра Connect, щоб перевірити свого бота за допомогою голосу. Просто наберіть номер на телефоні та спробуйте адреси в США. Щоб спробувати перший підхід із поштовим індексом, скажіть «змінити мою адресу». Щоб спробувати змінити адресу за один хід, скажіть «оновити мою адресу». Ви також можете просто сказати «моя нова адреса», а потім дійсну адресу в США.

Але почекайте… є ще

Іншим складним випадком використання голосових сценаріїв є захоплення електронної адреси користувача. Це часто потрібно для перевірки користувача або просто для того, щоб користувач міг змінити свою адресу електронної пошти у файлі. Lex має вбудовану підтримку адрес електронної пошти за допомогою типу вбудованого слота AMAZON.EmailAddress, який також підтримує стилі орфографії Lex.

Використання підходу «скажи-заклинай» для захоплення адрес електронної пошти може бути дуже ефективним, і оскільки цей підхід схожий на досвід користувача в сценаріях захоплення адреси, які ми описали вище, ми включили його сюди. Спробувати!

Прибирати

Ви можете очистити ресурси, створені як частина шаблону CloudFormation, коли закінчите використовувати бота, щоб уникнути поточних платежів. Для цього видаліть стек CloudFormation.

Висновок

Amazon Lex пропонує потужні можливості автоматичного розпізнавання мовлення та розуміння природної мови, які можна використовувати для збору інформації, необхідної від ваших користувачів, для надання автоматизованих функцій самообслуговування. Захопити адресу клієнта за допомогою розпізнавання мовлення може бути складно через діапазон назв вулиць, міст і селищ. Однак ви можете легко інтегрувати Amazon Lex зі службою розташування Amazon, щоб шукати правильну адресу на основі даних клієнта. Ви можете включити цю техніку у власні потоки розмов Lex.


Про автора

Браян Йост є старшим менеджером технічної програми в команді AWS Lex. У вільний час він захоплюється катанням на гірських велосипедах, пивоварінням і займається технікою.

spot_img

Остання розвідка

spot_img

Зв'яжіться з нами!

Привіт! Чим я можу вам допомогти?