Langkah 5 (Opsional): Tinjau Rincian Aliran Informasi (Konsol) - Amazon Lex V1

Jika Anda menggunakan Amazon Lex V2, lihat panduan Amazon Lex V2 sebagai gantinya.

 

Jika Anda menggunakan Amazon Lex V1, kami sarankan untuk meningkatkan bot Anda ke Amazon Lex V2. Kami tidak lagi menambahkan fitur baru ke V1 dan sangat menyarankan menggunakan V2 untuk semua bot baru.

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

Langkah 5 (Opsional): Tinjau Rincian Aliran Informasi (Konsol)

Bagian ini menjelaskan alur informasi antara klien dan Amazon Lex untuk setiap input pengguna, termasuk integrasi fungsi Lambda.

catatan

Bagian ini mengasumsikan bahwa klien mengirimkan permintaan ke Amazon Lex menggunakan APIPostText waktu proses dan menampilkan detail permintaan dan respons yang sesuai. Untuk contoh alur informasi antara klien dan Amazon Lex di mana klien menggunakanPostContent API, lihatLangkah 2a (Opsional): Tinjau Rincian Aliran Informasi Lisan (Konsol) .

Untuk informasi selengkapnya tentangPostText API waktu proses dan detail tambahan tentang permintaan dan tanggapan yang ditunjukkan pada langkah-langkah berikut, lihatPostText.

  1. Pengguna: Saya ingin memesan beberapa bunga.

    1. Klien (konsol) mengirimkanPostText permintaan berikut ke Amazon Lex:

      POST /bot/OrderFlowers/alias/$LATEST/user/ignw84y6seypre4xly5rimopuri2xwnd/text "Content-Type":"application/json" "Content-Encoding":"amz-1.0" { "inputText": "I would like to order some flowers", "sessionAttributes": {} }

      URI permintaan dan badan memberikan informasi kepada Amazon Lex:

      • Permintaan URI - Menyediakan nama bot (OrderFlowers), bot alias ($LATEST), dan nama pengguna (string acak yang mengidentifikasi pengguna). Trailingtext menunjukkan bahwa itu adalah permintaanPostText API (dan bukanPostContent).

      • Permintaan tubuh - Termasuk input pengguna (inputText) dan kosongsessionAttributes. Ketika klien membuat permintaan pertama, tidak ada atribut sesi. Fungsi Lambda memulai mereka nanti.

    2. DariinputText, Amazon Lex mendeteksi maksud (OrderFlowers). Maksud ini dikonfigurasi dengan fungsi Lambda sebagai pengait kode untuk inisialisasi dan validasi data pengguna. Oleh karena itu, Amazon Lex memanggil fungsi Lambda tersebut dengan meneruskan informasi berikut sebagai data peristiwa:

      { "messageVersion": "1.0", "invocationSource": "DialogCodeHook", "userId": "ignw84y6seypre4xly5rimopuri2xwnd", "sessionAttributes": {}, "bot": { "name": "OrderFlowers", "alias": null, "version": "$LATEST" }, "outputDialogMode": "Text", "currentIntent": { "name": "OrderFlowers", "slots": { "PickupTime": null, "FlowerType": null, "PickupDate": null }, "confirmationStatus": "None" } }

      Untuk informasi selengkapnya, lihat Format Peristiwa Masukan.

      Selain informasi yang dikirim klien, Amazon Lex juga menyertakan data tambahan berikut:

      • messageVersion- Saat ini Amazon Lex hanya mendukung versi 1.0.

      • invocationSource- Menunjukkan tujuan pemanggilan fungsi Lambda. Dalam hal ini, itu adalah untuk melakukan inisialisasi data pengguna dan validasi. Pada saat ini, Amazon Lex tahu bahwa pengguna belum menyediakan semua data slot untuk memenuhi maksud.

      • currentIntentinformasi dengan semua nilai slot diatur ke null.

    3. Pada saat ini, semua nilai slot yang nol. Tidak ada fungsi Lambda untuk memvalidasi. Fungsi Lambda mengembalikan respons berikut ke Amazon Lex:

      { "sessionAttributes": {}, "dialogAction": { "type": "Delegate", "slots": { "PickupTime": null, "FlowerType": null, "PickupDate": null } } }

      Untuk informasi tentang format respons, lihatFormat Respons.

      Perhatikan hal berikut:

      • dialogAction.type- Dengan menetapkan nilai iniDelegate, fungsi Lambda mendelegasikan tanggung jawab untuk memutuskan tindakan berikutnya ke Amazon Lex.

        catatan

        Jika fungsi Lambda mendeteksi sesuatu dalam validasi data pengguna, itu menginstruksikan Amazon Lex apa yang harus dilakukan selanjutnya, seperti yang ditunjukkan dalam beberapa langkah berikutnya.

    4. MenurutdialogAction.type, Amazon Lex memutuskan tindakan berikutnya. Karena tidak ada slot yang diisi, ia memutuskan untuk mendapatkan nilai untukFlowerType slot. Ini memilih salah satu petunjuk nilai elikitasi (“Jenis bunga apa yang ingin Anda pesan?”) untuk slot ini dan mengirimkan respons berikut kembali ke klien:

      Data JSON yang berisi permintaan untukFlowerType slot.

      Klien menampilkan pesan dalam respons.

  2. Pengguna: mawar

    1. Klien mengirimkanPostText permintaan berikut ke Amazon Lex:

      POST /bot/OrderFlowers/alias/$LATEST/user/ignw84y6seypre4xly5rimopuri2xwnd/text "Content-Type":"application/json" "Content-Encoding":"amz-1.0" { "inputText": "roses", "sessionAttributes": {} }

      Dalam badan permintaan,inputText menyediakan masukan pengguna. sessionAttributesSisa-sisa kosong.

    2. Amazon Lex pertama menafsirkaninputText dalam konteks maksud saat ini. Layanan ini ingat bahwa ia telah meminta pengguna tertentu untuk informasi tentangFlowerType slot. Ini memperbarui nilai slot dalam maksud saat ini dan memanggil fungsi Lambda dengan data peristiwa berikut:

      { "messageVersion": "1.0", "invocationSource": "DialogCodeHook", "userId": "ignw84y6seypre4xly5rimopuri2xwnd", "sessionAttributes": {}, "bot": { "name": "OrderFlowers", "alias": null, "version": "$LATEST" }, "outputDialogMode": "Text", "currentIntent": { "name": "OrderFlowers", "slots": { "PickupTime": null, "FlowerType": "roses", "PickupDate": null }, "confirmationStatus": "None" } }

      Perhatikan hal berikut:

      • invocationSource- terus menjadiDialogCodeHook (kami hanya memvalidasi data pengguna).

      • currentIntent.slots- Amazon Lex telah memperbaruiFlowerType slot untuk mawar.

    3. MenurutinvocationSource nilaiDialogCodeHook, fungsi Lambda melakukan validasi data pengguna. Ini mengakuiroses sebagai nilai slot yang valid (dan ditetapkanPrice sebagai atribut sesi) dan mengembalikan respons berikut ke Amazon Lex.

      { "sessionAttributes": { "Price": 25 }, "dialogAction": { "type": "Delegate", "slots": { "PickupTime": null, "FlowerType": "roses", "PickupDate": null } } }

      Perhatikan hal berikut:

      • sessionAttributes- Fungsi Lambda telah menambahkanPrice (mawar) sebagai atribut sesi.

      • dialogAction.type- diatur keDelegate. Data pengguna valid sehingga fungsi Lambda mengarahkan Amazon Lex untuk memilih tindakan berikutnya.

       

    4. MenurutdialogAction.type, Amazon Lex memilih tindakan berikutnya. Amazon Lex tahu itu membutuhkan lebih banyak data slot sehingga mengambil slot yang tidak terisi berikutnya (PickupDate) dengan prioritas tertinggi sesuai dengan konfigurasi maksud. Amazon Lex memilih salah satu pesan prompt nilai-elicitation - “Hari apa Anda ingin mawar dijemput?” —untuk slot ini sesuai dengan konfigurasi maksud, dan kemudian mengirimkan respons berikut kembali ke klien:

      Data JSON dikirim ke klien untuk memintaPickupData slot.

      Klien hanya menampilkan pesan dalam respons - “Hari apa Anda ingin mawar dijemput?.”

  3. Pengguna: besok

    1. Klien mengirimkanPostText permintaan berikut ke Amazon Lex:

      POST /bot/OrderFlowers/alias/$LATEST/user/ignw84y6seypre4xly5rimopuri2xwnd/text "Content-Type":"application/json" "Content-Encoding":"amz-1.0" { "inputText": "tomorrow", "sessionAttributes": { "Price": "25" } }

      Dalam badan permintaan,inputText menyediakan input pengguna dan klien melewati atribut sesi kembali ke layanan.

    2. Amazon Lex ingat konteks-bahwa itu memunculkan data untukPickupDate slot. Dalam konteks ini, ia tahuinputText nilai adalah untukPickupDate slot. Amazon Lex kemudian memanggil fungsi Lambda dengan mengirimkan peristiwa berikut:

      { "messageVersion": "1.0", "invocationSource": "DialogCodeHook", "userId": "ignw84y6seypre4xly5rimopuri2xwnd", "sessionAttributes": { "Price": "25" }, "bot": { "name": "OrderFlowersCustomWithRespCard", "alias": null, "version": "$LATEST" }, "outputDialogMode": "Text", "currentIntent": { "name": "OrderFlowers", "slots": { "PickupTime": null, "FlowerType": "roses", "PickupDate": "2017-01-05" }, "confirmationStatus": "None" } }

      Amazon Lex telah memperbaruicurrentIntent.slots dengan menetapkanPickupDate nilai. Perhatikan juga bahwa layanan melewati fungsi Lambda.sessionAttributes

    3. SesuaiinvocationSource nilaiDialogCodeHook, fungsi Lambda melakukan validasi data pengguna. Ia mengakui nilaiPickupDate slot yang valid dan mengembalikan respon berikut ke Amazon Lex:

      { "sessionAttributes": { "Price": 25 }, "dialogAction": { "type": "Delegate", "slots": { "PickupTime": null, "FlowerType": "roses", "PickupDate": "2017-01-05" } } }

      Perhatikan hal berikut:

      • sessionAttributesTidak ada perubahan.

      • dialogAction.type- diatur keDelegate. Data pengguna valid, dan fungsi Lambda mengarahkan Amazon Lex untuk memilih tindakan berikutnya.

    4. MenurutdialogAction.type, Amazon Lex memilih tindakan berikutnya. Amazon Lex tahu itu membutuhkan lebih banyak data slot sehingga mengambil slot yang tidak terisi berikutnya (PickupTime) dengan prioritas tertinggi sesuai dengan konfigurasi maksud. Amazon Lex memilih salah satu pesan prompt (“Memberikan mawar pada jam berapa pada 2017-01-05?”) untuk slot ini sesuai dengan konfigurasi maksud dan mengirimkan respons berikut kembali ke klien:

      Data JSON untuk meminta PickupTime slot.

      Klien menampilkan pesan dalam tanggapan - “Memberikan mawar pada jam berapa pada 2017-01-05?”

  4. Pengguna: 4 sore

    1. Klien mengirimkanPostText permintaan berikut ke Amazon Lex:

      POST /bot/OrderFlowers/alias/$LATEST/user/ignw84y6seypre4xly5rimopuri2xwnd/text "Content-Type":"application/json" "Content-Encoding":"amz-1.0" { "inputText": "4 pm", "sessionAttributes": { "Price": "25" } }

      Dalam badan permintaan,inputText menyediakan input pengguna. Klien melewatisessionAttributes permintaan.

    2. Amazon Lex memahami konteksnya. Ia memahami bahwa itu memunculkan data untukPickupTime slot. Dalam konteks ini, ia tahu bahwainputText nilai adalah untukPickupTime slot. Amazon Lex kemudian memanggil fungsi Lambda dengan mengirimkan peristiwa berikut:

      { "messageVersion": "1.0", "invocationSource": "DialogCodeHook", "userId": "ignw84y6seypre4xly5rimopuri2xwnd", "sessionAttributes": { "Price": "25" }, "bot": { "name": "OrderFlowersCustomWithRespCard", "alias": null, "version": "$LATEST" }, "outputDialogMode": "Text", "currentIntent": { "name": "OrderFlowers", "slots": { "PickupTime": "16:00", "FlowerType": "roses", "PickupDate": "2017-01-05" }, "confirmationStatus": "None" } }

      Amazon Lex telah memperbaruicurrentIntent.slots dengan menetapkanPickupTime nilai.

    3. MenurutinvocationSource nilaiDialogCodeHook, fungsi Lambda melakukan validasi data pengguna. Ia mengakui nilaiPickupDate slot yang valid dan mengembalikan respon berikut untuk Amazon Lex.

      { "sessionAttributes": { "Price": 25 }, "dialogAction": { "type": "Delegate", "slots": { "PickupTime": "16:00", "FlowerType": "roses", "PickupDate": "2017-01-05" } } }

      Perhatikan hal berikut:

      • sessionAttributes- Tidak ada perubahan atribut sesi.

      • dialogAction.type- diatur keDelegate. Data pengguna valid sehingga fungsi Lambda mengarahkan Amazon Lex untuk memilih tindakan berikutnya.

    4. Pada saat ini Amazon Lex tahu ia memiliki semua data Slot. Maksud ini dikonfigurasi dengan prompt konfirmasi. Oleh karena itu, Amazon Lex mengirimkan respons berikut kepada pengguna yang meminta konfirmasi sebelum memenuhi maksud:

      Data JSON meminta konfirmasi pesanan.

      Klien hanya menampilkan pesan dalam respons dan menunggu respons pengguna.

  5. Pengguna: Ya

    1. Klien mengirimkanPostText permintaan berikut ke Amazon Lex:

      POST /bot/OrderFlowers/alias/$LATEST/user/ignw84y6seypre4xly5rimopuri2xwnd/text "Content-Type":"application/json" "Content-Encoding":"amz-1.0" { "inputText": "yes", "sessionAttributes": { "Price": "25" } }
    2. Amazon Lex menafsirkaninputText dalam konteks mengonfirmasi maksud saat ini. Amazon Lex memahami bahwa pengguna ingin melanjutkan pesanan. Kali ini Amazon Lex memanggil fungsi Lambda untuk memenuhi maksud dengan mengirimkan peristiwa berikut, yang menetapkaninvocationSource keFulfillmentCodeHook jika ia mengirim ke fungsi Lambda. Amazon Lex juga menetapkanconfirmationStatus untukConfirmed.

      { "messageVersion": "1.0", "invocationSource": "FulfillmentCodeHook", "userId": "ignw84y6seypre4xly5rimopuri2xwnd", "sessionAttributes": { "Price": "25" }, "bot": { "name": "OrderFlowersCustomWithRespCard", "alias": null, "version": "$LATEST" }, "outputDialogMode": "Text", "currentIntent": { "name": "OrderFlowers", "slots": { "PickupTime": "16:00", "FlowerType": "roses", "PickupDate": "2017-01-05" }, "confirmationStatus": "Confirmed" } }

      Perhatikan hal berikut:

      • invocationSource— Kali ini Amazon Lex menetapkan nilai iniFulfillmentCodeHook, mengarahkan fungsi Lambda untuk memenuhi maksud.

      • confirmationStatus- diatur keConfirmed.

    3. Kali ini, fungsi Lambda memenuhiOrderFlowers maksud, dan mengembalikan respons berikut:

      { "sessionAttributes": { "Price": "25" }, "dialogAction": { "type": "Close", "fulfillmentState": "Fulfilled", "message": { "contentType": "PlainText", "content": "Thanks, your order for roses has been placed and will be ready for pickup by 16:00 on 2017-01-05" } } }

      Perhatikan hal berikut:

      • MenetapkandialogAction.type - Fungsi Lambda menetapkan nilai ini keClose, mengarahkan Amazon Lex untuk tidak mengharapkan respons pengguna.

      • dialogAction.fulfillmentState- diatur ke Terpenuhi dan termasuk yang sesuaimessage untuk disampaikan kepada pengguna.

    4. Amazon Lex mengulasfulfillmentState dan mengirimkan respons berikut kembali ke klien.

      Amazon Lex kemudian mengembalikan hal berikut ke klien:

      Data JSON untuk konfirmasi prompt.

      Perhatikan bahwa:

      • dialogState- Amazon Lex menetapkan nilai ini kefulfilled.

      • message- adalah pesan yang sama dengan fungsi Lambda yang disediakan.

      Klien menampilkan pesan.

  6. Sekarang uji bot lagi. Untuk membuat konteks (pengguna) baru, pilih tautan Hapus di jendela pengujian. Sekarang berikan data slot yang tidak valid untukOrderFlowers maksud tersebut. Kali ini fungsi Lambda melakukan validasi data, menyetel ulang nilai data slot yang tidak valid ke null, dan meminta Amazon Lex untuk meminta pengguna untuk data yang valid. Misalnya, coba hal berikut ini:

    • Melati sebagai jenis bunga (bukan salah satu jenis bunga yang didukung).

    • Kemarin sebagai hari ketika Anda ingin mengambil bunga.

    • Setelah melakukan pemesanan, masukkan jenis bunga lain alih-alih menjawab “ya” untuk mengonfirmasi pesanan. Sebagai tanggapan, fungsi Lambda memperbarui atributPrice in the session, menjaga total pesanan bunga yang berjalan.

    Fungsi Lambda juga melakukan aktivitas pemenuhan.

Langkah Selanjutnya

Langkah 6: Perbarui konfigurasi maksud untuk menambahkan ucapan (konsol)