Pemberitahuan akhir dukungan: Pada 15 September 2025, AWS akan menghentikan dukungan untuk Amazon Lex V1. Setelah 15 September 2025, Anda tidak lagi dapat mengakses konsol Amazon Lex V1 atau sumber daya Amazon Lex V1. Jika Anda menggunakan Amazon Lex V2, lihat panduan Amazon Lex V2 sebagai gantinya.
Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Rincian Arus Informasi
Cetak biru ScheduleAppointment bot terutama menampilkan penggunaan kartu respons yang dihasilkan secara dinamis. Fungsi Lambda dalam latihan ini mencakup kartu respons dalam responsnya terhadap Amazon Lex. Amazon Lex menyertakan kartu respons dalam balasannya kepada klien. Bagian ini menjelaskan kedua hal berikut:
-
Aliran data antara klien dan Amazon Lex.
Bagian ini mengasumsikan klien mengirim permintaan ke Amazon Lex menggunakan API
PostTextruntime dan menampilkan detail permintaan/respons yang sesuai. Untuk informasi selengkapnya tentang APIPostTextruntime, lihatPostText.catatan
Untuk contoh aliran informasi antara klien dan Amazon Lex di mana klien menggunakan
PostContentAPI, lihatLangkah 2a (Opsional): Tinjau Detail Alur Informasi Lisan (Konsol) . -
Aliran data antara Amazon Lex dan fungsi Lambda. Untuk informasi selengkapnya, lihat Peristiwa Input Fungsi Lambda dan Format Respons.
catatan
Contohnya mengasumsikan bahwa Anda menggunakan klien Facebook Messenger, yang tidak meneruskan atribut sesi dalam permintaan ke Amazon Lex. Dengan demikian, contoh permintaan yang ditampilkan di bagian ini menunjukkan kosongsessionAttributes. Jika Anda menguji bot menggunakan klien yang disediakan di konsol Amazon Lex, klien menyertakan atribut sesi.
Bagian ini menjelaskan apa yang terjadi setelah setiap input pengguna.
-
Pengguna: Jenis
Book an appointment.-
Klien (konsol) mengirimkan PostContent permintaan berikut ke Amazon Lex:
POST /bot/ScheduleAppointment/alias/$LATEST/user/bijt6rovckwecnzesbthrr1d7lv3ja3n/text "Content-Type":"application/json" "Content-Encoding":"amz-1.0" { "inputText":"book appointment", "sessionAttributes":{} }URI permintaan dan badan memberikan informasi ke Amazon Lex:
-
Request URI — Menyediakan nama bot (ScheduleAppointment), alias bot ($ LATEST), dan ID nama pengguna. Trailing
textmenunjukkan bahwa ini adalah permintaan APIPostText(bukanPostContent). -
Request body - Termasuk input pengguna (
inputText) dan kosongsessionAttributes.
-
-
Dari
inputText, Amazon Lex mendeteksi intent ()MakeAppointment. Layanan memanggil fungsi Lambda, yang dikonfigurasi sebagai hook kode, untuk melakukan inisialisasi dan validasi dengan meneruskan peristiwa berikut. Untuk detailnya, lihat Format Peristiwa Masukan.{ "currentIntent": { "slots": { "AppointmentType": null, "Date": null, "Time": null }, "name": "MakeAppointment", "confirmationStatus": "None" }, "bot": { "alias": null, "version": "$LATEST", "name": "ScheduleAppointment" }, "userId": "bijt6rovckwecnzesbthrr1d7lv3ja3n", "invocationSource": "DialogCodeHook", "outputDialogMode": "Text", "messageVersion": "1.0", "sessionAttributes": {} }Selain informasi yang dikirim oleh klien, Amazon Lex juga menyertakan data berikut:
-
currentIntent— Memberikan informasi maksud saat ini. -
invocationSource— Menunjukkan tujuan pemanggilan fungsi Lambda. Dalam hal ini, tujuannya adalah untuk melakukan inisialisasi dan validasi data pengguna. (Amazon Lex tahu bahwa pengguna belum menyediakan semua data slot untuk memenuhi maksud.) -
messageVersion- Saat ini Amazon Lex hanya mendukung versi 1.0.
-
-
Pada saat ini, semua nilai slot adalah nol (tidak ada yang divalidasi). Fungsi Lambda mengembalikan respons berikut ke Amazon Lex, mengarahkan layanan untuk memperoleh informasi untuk slot.
AppointmentTypeUntuk informasi tentang format respons, lihatFormat Respons.{ "dialogAction": { "slotToElicit": "AppointmentType", "intentName": "MakeAppointment", "responseCard": { "genericAttachments": [ { "buttons": [ { "text": "cleaning (30 min)", "value": "cleaning" }, { "text": "root canal (60 min)", "value": "root canal" }, { "text": "whitening (30 min)", "value": "whitening" } ], "subTitle": "What type of appointment would you like to schedule?", "title": "Specify Appointment Type" } ], "version": 1, "contentType": "application/vnd.amazonaws.card.generic" }, "slots": { "AppointmentType": null, "Date": null, "Time": null }, "type": "ElicitSlot", "message": { "content": "What type of appointment would you like to schedule?", "contentType": "PlainText" } }, "sessionAttributes": {} }Responsnya meliputi
dialogActiondansessionAttributesbidang. Antara lain,dialogActionbidang mengembalikan bidang berikut:-
type— Dengan menyetel bidang iniElicitSlot, fungsi Lambda mengarahkan Amazon Lex untuk memperoleh nilai untuk slot yang ditentukan di bidang.slotToElicitFungsi Lambda juga menyediakan amessageuntuk menyampaikan kepada pengguna. -
responseCard— Mengidentifikasi daftar nilai yang mungkin untukAppointmentTypeslot. Klien yang mendukung kartu respons (misalnya, Facebook Messenger) menampilkan kartu respons untuk memungkinkan pengguna memilih jenis janji temu, seperti pada gambar berikut:
-
-
Seperti yang
dialogAction.typeditunjukkan oleh respons dari fungsi Lambda, Amazon Lex mengirimkan respons berikut kembali ke klien:
Klien membaca respons, dan kemudian menampilkan pesan: “Jenis janji apa yang ingin Anda jadwalkan?” dan kartu respons (jika klien mendukung kartu respons).
-
-
Pengguna: Tergantung pada klien, pengguna memiliki dua opsi:
-
Jika kartu respons ditampilkan, pilih saluran akar (60 menit) atau ketik
root canal. -
Jika klien tidak mendukung kartu respons, ketik
root canal.
-
Klien mengirimkan
PostTextpermintaan berikut ke Amazon Lex (jeda baris telah ditambahkan untuk keterbacaan):POST /bot/BookTrip/alias/$LATEST/user/bijt6rovckwecnzesbthrr1d7lv3ja3n/text "Content-Type":"application/json" "Content-Encoding":"amz-1.0" { "inputText": "root canal", "sessionAttributes": {} } -
Amazon Lex memanggil fungsi Lambda untuk validasi data pengguna dengan mengirimkan peristiwa berikut sebagai parameter:
{ "currentIntent": { "slots": { "AppointmentType": "root canal", "Date": null, "Time": null }, "name": "MakeAppointment", "confirmationStatus": "None" }, "bot": { "alias": null, "version": "$LATEST", "name": "ScheduleAppointment" }, "userId": "bijt6rovckwecnzesbthrr1d7lv3ja3n", "invocationSource": "DialogCodeHook", "outputDialogMode": "Text", "messageVersion": "1.0", "sessionAttributes": {} }Dalam data acara, perhatikan hal berikut:
-
invocationSourceterus menjadiDialogCodeHook. Pada langkah ini, kami hanya memvalidasi data pengguna. -
Amazon Lex mengatur
AppointmentTypebidang dicurrentIntent.slotsslot keroot canal. -
Amazon Lex hanya melewati
sessionAttributesbidang antara klien dan fungsi Lambda.
-
-
Fungsi Lambda memvalidasi input pengguna dan mengembalikan respons berikut ke Amazon Lex, mengarahkan layanan untuk memperoleh nilai untuk tanggal janji temu.
{ "dialogAction": { "slotToElicit": "Date", "intentName": "MakeAppointment", "responseCard": { "genericAttachments": [ { "buttons": [ { "text": "2-15 (Wed)", "value": "Wednesday, February 15, 2017" }, { "text": "2-16 (Thu)", "value": "Thursday, February 16, 2017" }, { "text": "2-17 (Fri)", "value": "Friday, February 17, 2017" }, { "text": "2-20 (Mon)", "value": "Monday, February 20, 2017" }, { "text": "2-21 (Tue)", "value": "Tuesday, February 21, 2017" } ], "subTitle": "When would you like to schedule your root canal?", "title": "Specify Date" } ], "version": 1, "contentType": "application/vnd.amazonaws.card.generic" }, "slots": { "AppointmentType": "root canal", "Date": null, "Time": null }, "type": "ElicitSlot", "message": { "content": "When would you like to schedule your root canal?", "contentType": "PlainText" } }, "sessionAttributes": {} }Sekali lagi, responsnya mencakup
sessionAttributesbidangdialogActiondan. Antara lain,dialogActionbidang mengembalikan bidang berikut:-
type— Dengan menyetel bidang iniElicitSlot, fungsi Lambda mengarahkan Amazon Lex untuk memperoleh nilai untuk slot yang ditentukan di bidang.slotToElicitFungsi Lambda juga menyediakan amessageuntuk menyampaikan kepada pengguna. -
responseCard— Mengidentifikasi daftar nilai yang mungkin untukDateslot. Klien yang mendukung kartu respons (misalnya, Facebook Messenger) menampilkan kartu respons yang memungkinkan pengguna memilih tanggal janji temu, seperti pada gambar berikut:
Meskipun fungsi Lambda mengembalikan lima tanggal, klien (Facebook Messenger) memiliki batas tiga tombol untuk kartu respons. Oleh karena itu, Anda hanya melihat tiga nilai pertama dalam tangkapan layar.
Tanggal-tanggal ini dikodekan keras dalam fungsi Lambda. Dalam aplikasi produksi, Anda dapat menggunakan kalender untuk mendapatkan tanggal yang tersedia secara real time. Karena tanggalnya dinamis, Anda harus menghasilkan kartu respons secara dinamis dalam fungsi Lambda.
-
-
Amazon Lex memperhatikan
dialogAction.typedan mengembalikan respons berikut ke klien yang menyertakan informasi dari respons fungsi Lambda.
Klien menampilkan pesan: Kapan Anda ingin menjadwalkan saluran akar Anda? dan kartu respons (jika klien mendukung kartu respons).
-
-
Pengguna: Jenis
Thursday.-
Klien mengirimkan
PostTextpermintaan berikut ke Amazon Lex (jeda baris telah ditambahkan untuk keterbacaan):POST /bot/BookTrip/alias/$LATEST/user/bijt6rovckwecnzesbthrr1d7lv3ja3n/text "Content-Type":"application/json" "Content-Encoding":"amz-1.0" { "inputText": "Thursday", "sessionAttributes": {} } -
Amazon Lex memanggil fungsi Lambda untuk validasi data pengguna dengan mengirimkan dalam peristiwa berikut sebagai parameter:
{ "currentIntent": { "slots": { "AppointmentType": "root canal", "Date": "2017-02-16", "Time": null }, "name": "MakeAppointment", "confirmationStatus": "None" }, "bot": { "alias": null, "version": "$LATEST", "name": "ScheduleAppointment" }, "userId": "u3fpr9gghj02zts7y5tpq5mm4din2xqy", "invocationSource": "DialogCodeHook", "outputDialogMode": "Text", "messageVersion": "1.0", "sessionAttributes": {} }Dalam data acara, perhatikan hal berikut:
-
invocationSourceterus menjadiDialogCodeHook. Pada langkah ini, kami hanya memvalidasi data pengguna. -
Amazon Lex mengatur
Datebidang dicurrentIntent.slotsslot ke2017-02-16. -
Amazon Lex hanya melewati
sessionAttributesantara klien dan fungsi Lambda.
-
-
Fungsi Lambda memvalidasi input pengguna. Kali ini fungsi Lambda menentukan bahwa tidak ada janji yang tersedia pada tanggal yang ditentukan. Ini mengembalikan respons berikut ke Amazon Lex, mengarahkan layanan untuk kembali memperoleh nilai untuk tanggal janji temu.
{ "dialogAction": { "slotToElicit": "Date", "intentName": "MakeAppointment", "responseCard": { "genericAttachments": [ { "buttons": [ { "text": "2-15 (Wed)", "value": "Wednesday, February 15, 2017" }, { "text": "2-17 (Fri)", "value": "Friday, February 17, 2017" }, { "text": "2-20 (Mon)", "value": "Monday, February 20, 2017" }, { "text": "2-21 (Tue)", "value": "Tuesday, February 21, 2017" } ], "subTitle": "When would you like to schedule your root canal?", "title": "Specify Date" } ], "version": 1, "contentType": "application/vnd.amazonaws.card.generic" }, "slots": { "AppointmentType": "root canal", "Date": null, "Time": null }, "type": "ElicitSlot", "message": { "content": "We do not have any availability on that date, is there another day which works for you?", "contentType": "PlainText" } }, "sessionAttributes": { "bookingMap": "{\"2017-02-16\": []}" } }Sekali lagi, responsnya mencakup
sessionAttributesbidangdialogActiondan. Antara lain,dialogActionmengembalikan bidang-bidang berikut:-
dialogActionbidang:-
type— Fungsi Lambda menetapkan nilai iniElicitSlotdan mengatur ulang bidang ke.slotToElicitDateFungsi Lambda juga menyediakan yang sesuaimessageuntuk disampaikan kepada pengguna. -
responseCard— Mengembalikan daftar nilai untukDateslot.
-
-
sessionAttributes- Kali ini fungsi Lambda menyertakan atributbookingMapsesi. Nilainya adalah tanggal janji temu yang diminta dan janji temu yang tersedia (objek kosong menunjukkan bahwa tidak ada janji temu yang tersedia).
-
-
Amazon Lex memperhatikan
dialogAction.typedan mengembalikan respons berikut ke klien yang menyertakan informasi dari respons fungsi Lambda.
Klien menampilkan pesan: Kami tidak memiliki ketersediaan pada tanggal itu, apakah ada hari lain yang berfungsi untuk Anda? dan kartu respons (jika klien mendukung kartu respons).
-
-
Pengguna: Tergantung pada klien, pengguna memiliki dua opsi:
-
Jika kartu respons ditampilkan, pilih 2-15 (Rabu) atau ketik
Wednesday. -
Jika klien tidak mendukung kartu respons, ketik
Wednesday.
-
Klien mengirimkan
PostTextpermintaan berikut ke Amazon Lex:POST /bot/BookTrip/alias/$LATEST/user/bijt6rovckwecnzesbthrr1d7lv3ja3n/text "Content-Type":"application/json" "Content-Encoding":"amz-1.0" { "inputText": "Wednesday", "sessionAttributes": { } }catatan
Klien Facebook Messenger tidak menetapkan atribut sesi apa pun. Jika Anda ingin mempertahankan status sesi di antara permintaan, Anda harus melakukannya dalam fungsi Lambda. Dalam aplikasi nyata, Anda mungkin perlu mempertahankan atribut sesi ini dalam database backend.
-
Amazon Lex memanggil fungsi Lambda untuk validasi data pengguna dengan mengirimkan peristiwa berikut sebagai parameter:
{ "currentIntent": { "slots": { "AppointmentType": "root canal", "Date": "2017-02-15", "Time": null }, "name": "MakeAppointment", "confirmationStatus": "None" }, "bot": { "alias": null, "version": "$LATEST", "name": "ScheduleAppointment" }, "userId": "u3fpr9gghj02zts7y5tpq5mm4din2xqy", "invocationSource": "DialogCodeHook", "outputDialogMode": "Text", "messageVersion": "1.0", "sessionAttributes": { } }Amazon Lex diperbarui
currentIntent.slotsdengan mengaturDateslot ke2017-02-15. -
Fungsi Lambda memvalidasi input pengguna dan mengembalikan respons berikut ke Amazon Lex, mengarahkannya untuk memperoleh nilai untuk waktu janji temu.
{ "dialogAction": { "slots": { "AppointmentType": "root canal", "Date": "2017-02-15", "Time": "16:00" }, "message": { "content": "What time on 2017-02-15 works for you? 4:00 p.m. is our only availability, does that work for you?", "contentType": "PlainText" }, "type": "ConfirmIntent", "intentName": "MakeAppointment", "responseCard": { "genericAttachments": [ { "buttons": [ { "text": "yes", "value": "yes" }, { "text": "no", "value": "no" } ], "subTitle": "Is 4:00 p.m. on 2017-02-15 okay?", "title": "Confirm Appointment" } ], "version": 1, "contentType": "application/vnd.amazonaws.card.generic" } }, "sessionAttributes": { "bookingMap": "{\"2017-02-15\": [\"10:00\", \"16:00\", \"16:30\"]}" } }Sekali lagi, responsnya mencakup
sessionAttributesbidangdialogActiondan. Antara lain,dialogActionmengembalikan bidang-bidang berikut:-
dialogActionbidang:-
type—LambdaFungsi menetapkan nilai iniConfirmIntent, mengarahkan Amazon Lex untuk mendapatkan konfirmasi pengguna tentang waktu janji yang disarankan dimessage. -
responseCard— Mengembalikan daftar nilai ya/tidak bagi pengguna untuk memilih dari. Jika klien mendukung kartu respon, itu akan menampilkan kartu respon, seperti yang ditunjukkan pada contoh berikut:
-
-
sessionAttributes- Fungsi Lambda menetapkan atributbookingMapsesi dengan nilainya diatur ke tanggal janji temu dan janji yang tersedia pada tanggal tersebut. Dalam contoh ini, ini adalah janji temu 30 menit. Untuk saluran akar yang membutuhkan satu jam, hanya jam 4 sore yang dapat dipesan.
-
-
Seperti yang ditunjukkan
dialogAction.typedalam respons fungsi Lambda, Amazon Lex mengembalikan respons berikut ke klien:
Klien menampilkan pesan: Jam berapa pada 2017-02-15 bekerja untuk Anda? 16:00 adalah satu-satunya ketersediaan kami, apakah itu bekerja untuk Anda?
-
-
Pengguna: Pilih
yes.Amazon Lex memanggil fungsi Lambda dengan data peristiwa berikut. Karena pengguna menjawab
yes, Amazon Lex menyetelconfirmationStatuskeConfirmed, dan menyetelTimebidangcurrentIntent.slotske4 p.m.{ "currentIntent": { "slots": { "AppointmentType": "root canal", "Date": "2017-02-15", "Time": "16:00" }, "name": "MakeAppointment", "confirmationStatus": "Confirmed" }, "bot": { "alias": null, "version": "$LATEST", "name": "ScheduleAppointment" }, "userId": "u3fpr9gghj02zts7y5tpq5mm4din2xqy", "invocationSource": "FulfillmentCodeHook", "outputDialogMode": "Text", "messageVersion": "1.0", "sessionAttributes": { } }Karena
confirmationStatussudah dikonfirmasi, fungsi Lambda memproses intent (membuat janji temu gigi) dan mengembalikan respons berikut ke Amazon Lex:{ "dialogAction": { "message": { "content": "Okay, I have booked your appointment. We will see you at 4:00 p.m. on 2017-02-15", "contentType": "PlainText" }, "type": "Close", "fulfillmentState": "Fulfilled" }, "sessionAttributes": { "formattedTime": "4:00 p.m.", "bookingMap": "{\"2017-02-15\": [\"10:00\"]}" } }Perhatikan hal berikut:
-
Fungsi Lambda telah memperbarui file.
sessionAttributes -
dialogAction.typediatur keClose, yang mengarahkan Amazon Lex untuk tidak mengharapkan respons pengguna. -
dialogAction.fulfillmentStatediatur keFulfilled, menunjukkan bahwa maksud berhasil terpenuhi.
Klien menampilkan pesan: Oke, saya telah memesan janji temu Anda. Kami akan menemui Anda pada pukul 16:00 pada 2017-02-15.
-