

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Menggunakan skor kepercayaan diri untuk meningkatkan akurasi percakapan
<a name="confidence-scores"></a>

Ada dua langkah yang digunakan Amazon Lex V2 untuk menentukan apa yang dikatakan pengguna. Yang pertama, pengenalan suara otomatis (ASR), membuat transkrip ucapan audio pengguna. Yang kedua, pemahaman bahasa alami (NLU), menentukan arti ucapan pengguna untuk mengenali maksud pengguna atau nilai slot.

Secara default, Amazon Lex V2 mengembalikan hasil yang paling mungkin dari ASR dan NLU. Kadang-kadang mungkin sulit bagi Amazon Lex V2 untuk menentukan hasil yang paling mungkin. Dalam hal ini, ia mengembalikan beberapa hasil yang mungkin bersama dengan *skor kepercayaan* yang menunjukkan seberapa besar kemungkinan hasilnya benar. Skor kepercayaan adalah peringkat yang diberikan Amazon Lex V2 yang menunjukkan kepercayaan relatif yang dimilikinya dalam hasilnya. Skor kepercayaan berkisar dari 0,0 hingga 1,0.

Anda dapat menggunakan pengetahuan domain Anda dengan skor kepercayaan untuk membantu menentukan interpretasi yang benar dari hasil ASR atau NLU.

Skor kepercayaan ASR, atau transkripsi, adalah peringkat tentang seberapa yakin Amazon Lex V2 bahwa transkripsi tertentu benar. Skor kepercayaan NLU, atau maksud, adalah peringkat tentang seberapa yakin Amazon Lex V2 bahwa maksud yang ditentukan oleh transkripsi teratas adalah benar. Gunakan skor kepercayaan yang paling sesuai dengan aplikasi Anda.

**Topics**
+ [Menggunakan skor keyakinan niat untuk meningkatkan pemilihan maksud dengan Lex V2](using-intent-confidence-scores.md)
+ [Menggunakan skor kepercayaan transkripsi suara untuk meningkatkan percakapan dengan bot Lex V2 Anda](using-transcript-confidence-scores.md)

# Menggunakan skor keyakinan niat untuk meningkatkan pemilihan maksud dengan Lex V2
<a name="using-intent-confidence-scores"></a>

Saat pengguna mengucapkan ucapan, Amazon Lex V2 menggunakan pemahaman bahasa alami (NLU) untuk memahami permintaan pengguna dan mengembalikan maksud yang tepat. Secara default Amazon Lex V2 mengembalikan maksud yang paling mungkin ditentukan oleh bot Anda.

Dalam beberapa kasus mungkin sulit bagi Amazon Lex V2 untuk menentukan maksud yang paling mungkin. Misalnya, pengguna mungkin membuat ucapan ambigu, atau mungkin ada dua maksud yang serupa. Untuk membantu menentukan maksud yang tepat, Anda dapat menggabungkan pengetahuan domain Anda dengan *skor kepercayaan NLU* dalam daftar interpretasi. Skor kepercayaan diri adalah peringkat yang diberikan Amazon Lex V2 yang menunjukkan betapa yakinnya bahwa niat adalah niat yang benar.

Untuk menentukan perbedaan antara dua maksud dalam interpretasi, Anda dapat membandingkan skor kepercayaan mereka. Misalnya, jika satu niat memiliki skor kepercayaan 0,95 dan yang lain memiliki skor 0,65, maksud pertama mungkin benar. Namun, jika satu maksud memiliki skor 0,75 dan yang lain memiliki skor 0,72, ada ambiguitas antara dua maksud yang mungkin dapat Anda bedakan menggunakan pengetahuan domain dalam aplikasi Anda.

Anda juga dapat menggunakan skor kepercayaan untuk membuat aplikasi pengujian yang menentukan apakah perubahan pada ucapan maksud membuat perbedaan dalam perilaku bot. Misalnya, Anda bisa mendapatkan skor kepercayaan untuk maksud bot menggunakan serangkaian ucapan, lalu memperbarui maksud dengan ucapan baru. Anda kemudian dapat memeriksa skor kepercayaan diri untuk melihat apakah ada peningkatan.

Skor kepercayaan yang dikembalikan Amazon Lex V2 adalah nilai komparatif. Anda tidak harus mengandalkan mereka sebagai skor absolut. Nilai dapat berubah berdasarkan peningkatan Amazon Lex V2.

Amazon Lex V2 mengembalikan maksud yang paling mungkin dan hingga 4 maksud alternatif dengan skor terkait dalam `interpretations` struktur di setiap respons. Kode JSON berikut menunjukkan `interpretations` struktur dalam respon dari [RecognizeText](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_RecognizeText.html)operasi:

```
   "interpretations": [
      {
         "intent": {
            "confirmationState": "string",
            "name": "string",
            "slots": {
               "string" : {
                  "value": {
                     "interpretedValue": "string",
                     "originalValue": "string",
                     "resolvedValues": [ "string" ]
                  }
               }
            },
            "state": "string"
         },
         "nluConfidence": number
      }
   ]
```

## AMAZON. FallbackIntent
<a name="nluconfidence-fallbackintent"></a>

Amazon Lex V2 kembali `AMAZON.FallbackIntent` sebagai tujuan utama dalam dua situasi:

1.  Jika skor kepercayaan dari semua maksud yang mungkin kurang dari ambang kepercayaan. Anda dapat menggunakan ambang batas default atau Anda dapat mengatur ambang batas Anda sendiri. Jika Anda memiliki `AMAZON.KendraSearchIntent` konfigurasi, Amazon Lex V2 mengembalikannya juga dalam situasi ini. 

1.  Jika keyakinan interpretasi untuk `AMAZON.FallbackIntent` lebih tinggi dari kepercayaan interpretasi dari semua maksud lainnya. 

 Perhatikan bahwa Amazon Lex V2 tidak menampilkan skor kepercayaan untuk`AMAZON.FallbackIntent`. 

## Menetapkan dan mengubah ambang kepercayaan
<a name="nluconfidence-threshold"></a>

Ambang batas kepercayaan harus berupa angka antara 0,00 dan 1,00. Anda dapat mengatur ambang batas untuk setiap bahasa di bot Anda dengan cara berikut:

**Menggunakan konsol Amazon Lex V2**
+  Untuk mengatur ambang batas saat Anda menambahkan bahasa ke bot Anda dengan **Tambahkan bahasa**, Anda dapat memasukkan nilai yang Anda inginkan di panel **ambang skor Keyakinan**. 
+  Untuk memperbarui ambang batas, Anda dapat memilih **Edit** di panel **Detail bahasa** dalam bahasa untuk bot Anda. Kemudian masukkan nilai yang Anda inginkan di panel **ambang skor Keyakinan**. 

**Menggunakan operasi API**
+  Untuk mengatur ambang batas, atur `nluIntentConfidenceThreshold` parameter [CreateBotLocale](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateBotLocale.html)operasi.
+  Untuk memperbarui ambang kepercayaan, atur `nluIntentConfidenceThreshold` parameter [UpdateBotLocale](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_UpdateBotLocale.html)operasi. 

## Manajemen Sesi
<a name="confidence-scores-session-management"></a>

Untuk mengubah maksud yang digunakan Amazon Lex V2 dalam percakapan dengan pengguna, Anda dapat menggunakan respons dari fungsi Lambda kait kode dialog, atau Anda dapat menggunakan APIs manajemen sesi di aplikasi kustom Anda. 

### Menggunakan fungsi Lambda dengan bot Lex V2 Anda
<a name="session-management-lambda"></a>

Saat Anda menggunakan fungsi Lambda, Amazon Lex V2 memanggilnya dengan struktur JSON yang berisi input ke fungsi tersebut. Struktur JSON berisi bidang bernama `currentIntent` yang berisi maksud yang diidentifikasi Amazon Lex V2 sebagai maksud yang paling mungkin untuk ucapan pengguna. Struktur JSON juga mencakup `alternativeIntents` bidang yang berisi hingga empat intent tambahan yang dapat memenuhi maksud pengguna. Setiap intent menyertakan bidang yang disebut `nluIntentConfidenceScore` yang berisi skor kepercayaan yang ditetapkan Amazon Lex V2 untuk maksud tersebut.

Untuk menggunakan intent alternatif, Anda menentukannya dalam `ConfirmIntent` atau tindakan `ElicitSlot` dialog dalam fungsi Lambda Anda.

Untuk informasi selengkapnya, lihat [Mengintegrasikan AWS Lambda fungsi ke bot Amazon Lex V2 Anda](lambda.md).

### Menggunakan Session Management API dengan bot Lex V2
<a name="session-management-API"></a>

Untuk menggunakan intent yang berbeda dari intent saat ini, gunakan operasi. [PutSession](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_PutSession.html) Misalnya, jika Anda memutuskan bahwa alternatif pertama lebih disukai daripada maksud yang dipilih Amazon Lex V2, Anda dapat menggunakan `PutSession` operasi untuk mengubah maksud sehingga maksud berikutnya yang berinteraksi dengan pengguna adalah yang Anda pilih.

Lihat informasi yang lebih lengkap di [Memahami sesi bot Amazon Lex V2](managing-sessions.md).

# Menggunakan skor kepercayaan transkripsi suara untuk meningkatkan percakapan dengan bot Lex V2 Anda
<a name="using-transcript-confidence-scores"></a>

 Saat pengguna membuat ucapan suara, Amazon Lex V2 menggunakan pengenalan suara otomatis (ASR) untuk mentranskripsikan permintaan pengguna sebelum ditafsirkan. Secara default, Amazon Lex V2 menggunakan transkripsi audio yang paling mungkin untuk interpretasi. 

Dalam beberapa kasus mungkin ada lebih dari satu kemungkinan transkripsi audio. Misalnya, pengguna mungkin membuat ucapan dengan suara ambigu, seperti “Nama saya John” yang mungkin dipahami sebagai “Nama saya Juan.” Dalam hal ini, Anda dapat menggunakan teknik disambiguasi atau menggabungkan pengetahuan domain Anda dengan *skor kepercayaan transkripsi* untuk membantu menentukan transkripsi mana dalam daftar transkripsi yang benar. 

Amazon Lex V2 menyertakan transkripsi teratas dan hingga dua transkripsi alternatif untuk input pengguna dalam permintaan ke fungsi kait kode Lambda Anda. Setiap transkripsi berisi skor kepercayaan bahwa itu adalah transkripsi yang benar. Setiap transkripsi juga mencakup nilai slot apa pun yang disimpulkan dari input pengguna.

Anda dapat membandingkan skor kepercayaan dari dua transkripsi untuk menentukan apakah ada ambiguitas di antara keduanya. Misalnya, jika satu transkripsi memiliki skor kepercayaan 0,95 dan yang lainnya memiliki skor kepercayaan 0,65, transkripsi pertama mungkin benar dan ambiguitas di antara keduanya rendah. Jika kedua transkripsi memiliki skor kepercayaan 0,75 dan 0,72, ambiguitas di antara keduanya tinggi. Anda mungkin dapat membedakan antara mereka menggunakan pengetahuan domain Anda.

Misalnya, jika nilai slot yang disimpulkan dalam dua transkrip dengan skor kepercayaan 0,75 dan 0,72 adalah “John” dan “Juan”, Anda dapat menanyakan pengguna di database Anda untuk keberadaan nama-nama ini dan menghilangkan salah satu transkripsi. Jika “John” bukan pengguna di database Anda dan “Juan” adalah, Anda dapat menggunakan hook kode dialog untuk mengubah nilai slot yang disimpulkan untuk nama depan menjadi “Juan.”

Skor kepercayaan yang dikembalikan Amazon Lex V2 adalah nilai komparatif. Jangan mengandalkan mereka sebagai skor absolut. Nilai dapat berubah berdasarkan peningkatan Amazon Lex V2.

Skor kepercayaan transkripsi audio hanya tersedia dalam bahasa Inggris (GB) (en\$1GB) dan Inggris (AS) (en\$1US). Skor kepercayaan hanya didukung untuk input audio 8 kHz. Skor kepercayaan transkripsi tidak disediakan untuk input audio dari [jendela pengujian](https://docs.aws.amazon.com/lexv2/latest/dg/test-bot.html) di konsol Amazon Lex V2 karena menggunakan input audio 16 kHz.

**catatan**  
Sebelum Anda dapat menggunakan skor kepercayaan transkripsi audio dengan bot yang ada, Anda harus membangun kembali bot terlebih dahulu. Versi bot yang ada tidak mendukung skor kepercayaan transkripsi. Anda harus membuat versi baru bot untuk menggunakannya.

Anda dapat menggunakan skor kepercayaan diri untuk beberapa pola desain percakapan:
+ Jika skor kepercayaan tertinggi turun di bawah ambang batas karena lingkungan yang bising atau kualitas sinyal yang buruk, Anda dapat meminta pengguna dengan pertanyaan yang sama untuk menangkap audio berkualitas lebih baik.
+ Jika beberapa transkripsi memiliki skor kepercayaan yang sama untuk nilai slot, seperti “John” dan “Juan,” Anda dapat membandingkan nilai dengan database yang sudah ada sebelumnya untuk menghilangkan input, atau Anda dapat meminta pengguna untuk memilih salah satu dari dua nilai tersebut. Misalnya, “katakan 1 untuk Yohanes atau katakan 2 untuk Juan.”
+ Jika logika bisnis Anda memerlukan pengalihan maksud berdasarkan kata kunci tertentu dalam transkrip alternatif dengan skor kepercayaan dekat dengan transkrip teratas, Anda dapat mengubah maksud menggunakan fungsi Lambda kait kode dialog atau menggunakan operasi manajemen sesi. Untuk informasi selengkapnya, lihat [Manajemen sesi](#transcription-confidence-session-management).

Amazon Lex V2 mengirimkan struktur JSON berikut dengan hingga tiga transkripsi untuk masukan pengguna ke fungsi kait kode Lambda Anda:

```
    "transcriptions": [
        {
            "transcription": "string",
            "rawTranscription": "string",
            "transcriptionConfidence": "number",
            },
            "resolvedContext": {
                "intent": "string"
            },
            "resolvedSlots": {
                "string": {
                    "shape": "List",
                    "value": {
                        "originalValue": "string",
                        "resolvedValues": [
                            "string"
                        ]
                    },
                    "values": [
                        {
                            "shape": "Scalar",
                            "value": {
                                "originalValue": "string",
                                "resolvedValues": [
                                    "string"
                                ]
                            }
                        },
                        {
                            "shape": "Scalar",
                            "value": {
                                "originalValue": "string",
                                "resolvedValues": [
                                    "string"
                                ]
                            }
                        }
                    ]
                }
            }
        }
    ]
```

Struktur JSON berisi teks transkripsi, maksud yang diselesaikan untuk ucapan, dan nilai untuk setiap slot yang terdeteksi dalam ucapan. Untuk input pengguna teks, transkripsi berisi transkrip tunggal dengan skor kepercayaan 1.0.

Isi transkrip tergantung pada pergantian percakapan dan maksud yang diakui. 

Untuk giliran pertama, elisitasi maksud, Amazon Lex V2 menentukan tiga transkripsi teratas. Untuk transkripsi teratas, ia mengembalikan maksud dan nilai slot yang disimpulkan dalam transkripsi.

Pada belokan berikutnya, elisitasi slot, hasilnya tergantung pada maksud yang disimpulkan untuk masing-masing transkripsi, sebagai berikut.
+ Jika maksud yang disimpulkan untuk transkrip teratas sama dengan giliran sebelumnya dan semua transkrip lainnya memiliki maksud yang sama, maka
  + Semua transkrip berisi nilai slot yang disimpulkan.

     
+ Jika maksud yang disimpulkan untuk transkrip teratas berbeda dari giliran sebelumnya dan semua transkrip lainnya memiliki maksud sebelumnya, maka
  + Transkrip teratas berisi nilai slot yang disimpulkan untuk maksud baru.
  + Transkrip lain memiliki maksud sebelumnya dan nilai slot yang disimpulkan untuk maksud sebelumnya.

     
+ Jika maksud yang disimpulkan untuk transkrip teratas berbeda dari giliran sebelumnya, satu transkrip sama dengan maksud sebelumnya, dan satu transkrip adalah maksud yang berbeda, maka
  + Transkrip teratas berisi maksud baru yang disimpulkan dan nilai slot yang disimpulkan dalam ucapan.
  + Transkrip yang memiliki maksud yang disimpulkan sebelumnya berisi nilai slot yang disimpulkan untuk maksud tersebut.
  + Transkrip dengan maksud yang berbeda tidak memiliki nama maksud yang disimpulkan dan tidak ada nilai slot yang disimpulkan.

     
+ Jika maksud yang disimpulkan untuk transkrip teratas berbeda dari giliran sebelumnya dan semua transkrip lainnya memiliki maksud yang berbeda, maka
  + Transkrip teratas berisi maksud baru yang disimpulkan dan nilai slot yang disimpulkan dalam ucapan.
  + Transkrip lain tidak mengandung maksud yang disimpulkan dan tidak ada nilai slot yang disimpulkan.

     
+ Jika maksud yang disimpulkan untuk dua transkrip teratas adalah sama dan berbeda dari giliran sebelumnya, dan transkrip ketiga adalah maksud yang berbeda, maka
  + Dua transkrip teratas berisi maksud baru yang disimpulkan dan nilai slot yang disimpulkan dalam ucapan.
  + Transkrip ketiga tidak memiliki nama maksud dan tidak ada nilai slot yang diselesaikan.

## Manajemen sesi
<a name="transcription-confidence-session-management"></a>

Untuk mengubah maksud yang digunakan Amazon Lex V2 dalam percakapan dengan pengguna, gunakan respons dari fungsi Lambda kait kode dialog Anda. Atau Anda dapat menggunakan manajemen sesi APIs dalam aplikasi khusus Anda.

### Menggunakan fungsi Lambda dengan bot Lex V2 Anda
<a name="transcription-confidence-lambda"></a>

Saat Anda menggunakan fungsi Lambda, Amazon Lex V2 memanggilnya dengan struktur JSON yang berisi input ke fungsi tersebut. Struktur JSON berisi bidang yang disebut `transcriptions` yang berisi kemungkinan transkripsi yang telah ditentukan Amazon Lex V2 untuk ucapan tersebut. `transcriptions`Bidang berisi satu hingga tiga kemungkinan transkripsi, masing-masing dengan skor kepercayaan.

Untuk menggunakan intent dari transkripsi alternatif, Anda menentukannya dalam `ConfirmIntent` atau tindakan `ElicitSlot` dialog dalam fungsi Lambda Anda. Untuk menggunakan nilai slot dari transkripsi alternatif, tetapkan nilai di `intent` bidang dalam respons fungsi Lambda Anda. Untuk informasi selengkapnya, lihat [Mengintegrasikan AWS Lambda fungsi ke bot Amazon Lex V2 Anda](lambda.md).

#### Contoh kode menggunakan Lambda dengan Lex V2
<a name="asr-lambda-function"></a>

Contoh kode berikut adalah fungsi Lambda Python yang menggunakan transkripsi audio untuk meningkatkan pengalaman percakapan bagi pengguna. 

Untuk menggunakan kode contoh, Anda harus memiliki:
+ Bot dengan satu bahasa, baik Inggris (GB) (en\$1GB) atau Inggris (AS) (en\$1US).
+ Satu niat, OrderBirthStone. Pastikan bahwa **fungsi Use a Lambda untuk inisialisasi dan validasi** dipilih di bagian **Code hooks dari definisi intent**.
+ Maksudnya harus memiliki dua slot, "BirthMonth" dan “Nama,” keduanya jenis`AMAZON.AlphaNumeric`.
+ Sebuah alias dengan fungsi Lambda didefinisikan. Untuk informasi selengkapnya, lihat [Membuat AWS Lambda fungsi untuk bot Amazon Lex V2 Anda](lambda-attach.md).

```
import time
import os
import logging

logger = logging.getLogger()
logger.setLevel(logging.DEBUG)


# --- Helpers that build all of the responses ---

def elicit_slot(session_attributes, intent_request, slots, slot_to_elicit, message):
    return {
        'sessionState': {
            'dialogAction': {
                'type': 'ElicitSlot',
                'slotToElicit': slot_to_elicit
            },
            'intent': {
                'name': intent_request['sessionState']['intent']['name'],
                'slots': slots,
                'state': 'InProgress'
            },
            'sessionAttributes': session_attributes,
            'originatingRequestId': 'e3ab4d42-fb5f-4cc3-bb78-caaf6fc7cccd'
        },
        'sessionId': intent_request['sessionId'],
        'messages': [message],
        'requestAttributes': intent_request['requestAttributes'] if 'requestAttributes' in intent_request else None
    }


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': '3ab4d42-fb5f-4cc3-bb78-caaf6fc7cccd'
        },
        'messages': [message],
        'sessionId': intent_request['sessionId'],
        'requestAttributes': intent_request['requestAttributes'] if 'requestAttributes' in intent_request else None
    }


def delegate(intent_request, session_attributes):
    return {
        'sessionState': {
            'dialogAction': {
                'type': 'Delegate'
            },
            'intent': intent_request['sessionState']['intent'],
            'sessionAttributes': session_attributes,
            'originatingRequestId': 'abc'
        },
        'sessionId': intent_request['sessionId'],
        'requestAttributes': intent_request['requestAttributes'] if 'requestAttributes' in intent_request else None
    }


def get_session_attributes(intent_request):
    sessionState = intent_request['sessionState']
    if 'sessionAttributes' in sessionState:
        return sessionState['sessionAttributes']

    return {}


def get_slots(intent_request):
    return intent_request['sessionState']['intent']['slots']


""" --- Functions that control the behavior of the bot --- """


def order_birth_stone(intent_request):
    """
    Performs dialog management and fulfillment for ordering a birth stone.
    Beyond fulfillment, the implementation for this intent demonstrates the following:
    1) Use of N best transcriptions to re prompt user when confidence for top transcript is below a threshold
    2) Overrides resolved slot for birth month from a known fixed list if the top transcript
    is not accurate.
    """

    transcriptions = intent_request['transcriptions']

    if intent_request['invocationSource'] == 'DialogCodeHook':
        # Disambiguate if there are multiple transcriptions and the top transcription
        # confidence is below a threshold (0.8 here)
        if len(transcriptions) > 1 and transcriptions[0]['transcriptionConfidence'] < 0.8:
            if transcriptions[0]['resolvedSlots'] is not {} and 'Name' in transcriptions[0]['resolvedSlots'] and \
                    transcriptions[0]['resolvedSlots']['Name'] is not None:
                return prompt_for_name(intent_request)
            elif transcriptions[0]['resolvedSlots'] is not {} and 'BirthMonth' in transcriptions[0]['resolvedSlots'] and \
                    transcriptions[0]['resolvedSlots']['BirthMonth'] is not None:
                return validate_month(intent_request)

    return continue_conversation(intent_request)


def prompt_for_name(intent_request):
    """
    If the confidence for the name is not high enough, re prompt the user with the recognized names
    so it can be confirmed.
    """
    resolved_names = []
    for transcription in intent_request['transcriptions']:
        if transcription['resolvedSlots'] is not {} and 'Name' in transcription['resolvedSlots'] and \
                transcription['resolvedSlots']['Name'] is not None:
            resolved_names.append(transcription['resolvedSlots']['Name']['value']['originalValue'])
    if len(resolved_names) > 1:
        session_attributes = get_session_attributes(intent_request)
        slots = get_slots(intent_request)
        return elicit_slot(session_attributes, intent_request, slots, 'Name',
                           {'contentType': 'PlainText',
                            'content': 'Sorry, did you say your name is {} ?'.format(" or ".join(resolved_names))})
    else:
        return continue_conversation(intent_request)


def validate_month(intent_request):
    """
    Validate month from an expected list, if not valid looks for other transcriptions and to see if the month
    recognized there has an expected value. If there is, replace with that and if not continue conversation.
    """

    expected_months = ['january', 'february', 'march']
    resolved_months = []
    for transcription in intent_request['transcriptions']:
        if transcription['resolvedSlots'] is not {} and 'BirthMonth' in transcription['resolvedSlots'] and \
                transcription['resolvedSlots']['BirthMonth'] is not None:
            resolved_months.append(transcription['resolvedSlots']['BirthMonth']['value']['originalValue'])

    for resolved_month in resolved_months:
        if resolved_month in expected_months:
            intent_request['sessionState']['intent']['slots']['BirthMonth']['resolvedValues'] = [resolved_month]
            break

    return continue_conversation(intent_request)


def continue_conversation(event):
    session_attributes = get_session_attributes(event)

    if event["invocationSource"] == "DialogCodeHook":
        return delegate(event, session_attributes)


# --- Intents ---


def dispatch(intent_request):
    """
    Called when the user specifies an intent for this bot.
    """

    logger.debug('dispatch sessionId={}, intentName={}'.format(intent_request['sessionId'],
                                                               intent_request['sessionState']['intent']['name']))

    intent_name = intent_request['sessionState']['intent']['name']

    # Dispatch to your bot's intent handlers
    if intent_name == 'OrderBirthStone':
        return order_birth_stone(intent_request)

    raise Exception('Intent with name ' + intent_name + ' not supported')


# --- Main handler ---


def lambda_handler(event, context):
    """
    Route the incoming request based on intent.
    The JSON body of the request is provided in the event slot.

    """
    # By default, treat the user request as coming from the America/New_York time zone.
    os.environ['TZ'] = 'America/New_York'
    time.tzset()
    logger.debug('event={}'.format(event))

    return dispatch(event)
```

### Menggunakan API manajemen sesi untuk memilih intent atau nilai slot yang berbeda
<a name="transcription-confidence-session"></a>

Untuk menggunakan intent yang berbeda dari intent saat ini, gunakan operasi. [PutSession](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_PutSession.html) Misalnya, jika Anda memutuskan bahwa alternatif pertama lebih disukai daripada maksud yang dipilih Amazon Lex V2, Anda dapat menggunakan `PutSession` operasi untuk mengubah maksud. Dengan begitu maksud berikutnya yang berinteraksi dengan pengguna akan menjadi yang Anda pilih.

Anda juga dapat menggunakan `PutSession` operasi untuk mengubah nilai slot dalam `intent` struktur untuk menggunakan nilai dari transkripsi alternatif.

Lihat informasi yang lebih lengkap di [Memahami sesi bot Amazon Lex V2](managing-sessions.md).