Kursus
Chatbot yang peka konteks melacak masukan pengguna sebelumnya dan menghubungkannya dengan interaksi terkini. Ini memungkinkan mereka berinteraksi dengan gaya percakapan dan meningkatkan pengalaman pengguna. Amazon Lex adalah chatbot peka konteks dari rangkaian Amazon Web Services (AWS). Layanan ini dirilis pada 2017, dan versi yang disempurnakan, Lex V2, diluncurkan pada 2021.
Dalam tutorial ini, saya memperkenalkan konsep dasar AWS Lex V2 dan menunjukkan cara menggunakannya. Saya akan membahas cara menyiapkan dan mengonfigurasi Lex, membuat chatbot Lex pertama Anda, dan menghubungkannya dengan backend eksternal. Saya juga akan memberikan gambaran tentang mengintegrasikan Lex dengan platform pihak ketiga seperti situs web dan aplikasi perpesanan.
Apa itu Amazon Lex?
Amazon Lex adalah mesin percakapan berbasis AI yang ditawarkan oleh AWS. Lex menerima masukan pengguna dalam bentuk suara dan teks. Pengembang menentukan alur percakapan. Berdasarkan hal itu, Lex mengelola dialog dengan merespons masukan pengguna. Antarmuka percakapan kemudian dapat diterapkan sebagai bot suara, aplikasi web, platform chat (seperti Slack atau Facebook Messenger), dll. Lex juga digunakan untuk membangun Amazon Alexa.
Lex menggabungkan dua fungsi dasar: natural language understanding (NLU) dan automatic speech recognition (ASR). Ini memungkinkan pengembang tanpa keahlian deep learning untuk membangun antarmuka percakapan untuk chatbot, asisten virtual, dan sejenisnya.
Sebagai produk Amazon, Lex terintegrasi dengan layanan AWS lain seperti:
- Amazon Cognito (untuk manajemen identitas)
- Amazon CloudWatch (untuk memantau layanan)
- DynamoDB (untuk backend basis data)
- Amazon Lambda (untuk terhubung ke sumber data eksternal seperti Salesforce dan HubSpot), dll.
Integrasi ini memudahkan penerapan dan penskalaan layanan AI percakapan.
Menyiapkan Amazon Lex
Pada bagian ini, saya menunjukkan cara menyiapkan Amazon Lex.
Perlu diperhatikan bahwa antarmuka pengguna AWS sering berubah. Jadi, tata letak dan teks berbagai bagian serta judul dalam instruksi dan tangkapan layar dapat berubah seiring waktu atau berbeda antar wilayah.
Langkah 1: Masuk ke konsol AWS
Saya berasumsi Anda sudah memiliki akun AWS. Jika belum, ikuti instruksi pada halaman Pendaftaran AWS dan daftarkan akun baru.
Dalam panduan ini, kita menggunakan konsol AWS untuk menyiapkan dan menggunakan Lex. Masukkan kredensial AWS Anda untuk masuk ke konsol AWS Lex dan masuk ke halaman utama Lex.
Langkah 2: Buat bot baru
- Untuk membuat bot baru, kunjungi konsol Amazon Lex.
- Pilih Get Started.
Langkah di atas akan mengarahkan ke halaman beranda Bots (ditampilkan di bawah). Halaman ini menampilkan daftar Bot yang telah Anda buat.

Halaman beranda Amazon Lex Bots.
- Pada halaman ini, pilih Create Bot.
Ini akan mengarah ke halaman konfigurasi untuk bot baru. Halaman tersebut menampilkan dua metode pembuatan bot: Traditional dan Generative AI.

Buat bot baru.
Kita ingin mempelajari proses menyiapkan dan mengonfigurasi bot. Jadi, pilih metode Traditional dan mulai dengan bot kosong.
- Bot name: Beri nama dan deskripsi bot. Dalam artikel ini, kita membuat bot sederhana bernama “CabBookBot” untuk memesan taksi.
- IAM permissions: Pilih peran yang tepat untuk mengelola otorisasi dan autentikasi bot.
- Jika Anda sudah pernah membuat bot sebelumnya, pilih dari dropdown peran yang sudah ada.
- Jika ini bot pertama Anda, pilih “Create a role with basic Amazon Lex permissions.”
- COPPA: Jika bot ini dirancang untuk melayani anak-anak dan remaja, tentukan bahwa bot tunduk pada Children’s Online Privacy Protection Act (COPPA). Kita memilih “No”.
- Idle session timeout: Bot harus mengingat pesan pengguna sebelumnya untuk menjaga “konteks” selama percakapan. Jika pengguna tidak merespons dalam beberapa saat, kita berasumsi mereka tidak lagi menggunakan bot dan mengatur ulang konteks untuk pengguna baru. Biarkan pada nilai default.
Anda tidak perlu memperbarui pengaturan lanjutan opsional; lanjutkan saja ke bagian berikutnya.
Anda juga harus menyiapkan bahasa bot karena bot Lex didasarkan pada natural language processing (NLP).
- Dalam contoh ini, kita menggunakan bahasa default English (US).
- Pertahankan pengaturan default dan pilih Done.
Kemudian, Anda akan diarahkan ke halaman Intents, yang akan kita konfigurasi pada bagian berikutnya.
Setelah membuat bot dasar, sekarang saya jelaskan cara mengonfigurasinya untuk kasus penggunaan yang kita inginkan: memesan taksi.
Langkah 3: Konfigurasi intent
Sesuai namanya, intent merepresentasikan niat pengguna atau tujuan percakapan. Misalnya, pengguna mungkin ingin memesan hotel atau penerbangan. Setiap bot dapat melayani beberapa tujuan.
Dengan menyediakan beberapa contoh teks (disebut sample utterances) untuk setiap intent, Lex menggunakan NLP untuk mengenali dan mencocokkan masukan pengguna dengan intent yang tepat berdasarkan contoh tersebut. Misalnya, bot pemesanan taksi dapat memiliki sample utterances seperti “I want to book a cab,” “book me a cab from X to Y on this date,” dll.
Setelah memilih Done pada halaman pembuatan bot pada langkah sebelumnya, Anda akan dibawa ke halaman tempat Anda dapat membuat intent baru bernama NewIntent.
Pada halaman Intent:
- Temukan Conversation Flow di bagian atas. Ini mengilustrasikan alur dan contoh pesan teks untuk setiap langkah percakapan.
- Perbarui nama intent ke sesuatu yang bermakna, seperti “CabBookIntent”, dan berikan deskripsi yang relevan.
Langkah 4: Tambahkan sample utterances
Lex memerlukan beberapa sample utterances untuk setiap intent agar dapat mengenali apakah kebutuhan pengguna sesuai dengan intent saat ini.
- Di halaman Intent, gulir ke bagian Sample utterances.
- Ubah jendela editor ke Plain Text.
- Tambahkan beberapa sample utterances, satu di setiap baris, misalnya:
- I want to book a taxi
- Book me a cab
- I need to make a taxi reservation

Sample utterances.
- Tambahkan Initial response, seperti, “Ok, saya akan membantu Anda memesan taksi,” untuk mengakui permintaan pengguna.
Membuat Alur Percakapan
Bot Lex mengikuti struktur percakapan yang telah ditentukan. Alur percakapan merangkum dan memberikan spesifikasi komponen percakapan. Pada bagian ini, saya menjelaskan cara merancang percakapan untuk berkomunikasi dengan pengguna dan mendapatkan informasi yang diperlukan untuk memenuhi permintaan mereka.
Langkah 1: Tambahkan slot untuk menangkap masukan pengguna
Bot perlu meminta informasi relevan dari pengguna. Slot berisi informasi yang dibutuhkan bot untuk memenuhi permintaan pengguna. Misalnya, bot pemesanan taksi menerima kota keberangkatan dan tujuan serta tanggal perjalanan sebagai nilai slot.

Tambahkan slot ke intent.
Untuk setiap slot, Anda perlu menentukan parameter berikut:
- Slot name: Bot menggunakan nama ini sebagai placeholder untuk nilai slot. Misalnya, Anda dapat mengonfigurasi respons bot “Anda ingin bepergian dari {SourceCity}” dan bot secara otomatis mengganti nilai slot
SourceCityyang dimasukkan pengguna. - Slot type: Seperti variabel pemrograman, slot Lex dapat memiliki berbagai tipe. Banyak tipe slot bawaan tersedia, seperti
AMAZON.City,AMAZON.Date, dll. Anda juga dapat menambahkan tipe slot kustom (dibahas nanti). - Prompt: Berikan templat teks yang dapat digunakan bot untuk menanyakan (prompt) nilai setiap slot kepada pengguna.
- Pilih Add Slot, dan tambahkan slot berikut, tandai sebagai wajib:
|
Slot name |
Slot type |
Prompt |
|
SourceCity |
AMAZON.City |
Dari kota mana Anda akan bepergian? |
|
DestinationCity |
AMAZON.City |
Ke kota mana Anda akan bepergian? |
|
TravelDate |
AMAZON.Date |
Pada tanggal berapa Anda akan bepergian? |
- Tambahkan beberapa utterance tambahan yang langsung menangkap nilai slot. Misalnya:
- Book a cab on {TravelDate} from {SourceCity} to {DestinationCity}
- Book a cab from {SourceCity} to {DestinationCity} for {TravelDate}
Custom slots
Tipe slot bawaan tidak selalu cukup untuk semua kasus penggunaan. Misalnya, layanan pemesanan taksi mungkin memiliki tipe slot untuk jenis mobil (compact, hatchback, sedan, SUV, dll.) yang diinginkan pengguna.
Untuk menambahkan slot kustom:
- Buka Slot types dari menu di kolom kiri:
- CabBookBot > Bot versions > Draft version > All languages > English (US) > Slot types).
- Tambahkan nama (misalnya
CabType) dan deskripsi untuk tipe slot baru. - Pilih salah satu dari dua jenis nilai slot:
- Expand: Anda menyediakan beberapa nilai contoh untuk slot, dan Lex menggunakan ini sebagai contoh untuk mempelajari kemungkinan nilai baru. Misalnya, dengan daftar nama keluarga, Lex menyesuaikan tipe slot untuk menerima nama keluarga serupa yang tidak Anda cantumkan secara eksplisit.
- Restrict: Slot hanya menerima nilai dari daftar yang Anda berikan. Slot tidak akan mempelajari nilai baru.
Dalam kasus ini, kita memiliki beberapa tipe taksi yang sudah ditentukan. Jadi, kita membatasi nilai slot pada tipe tersebut.
- Anda juga dapat memberikan nilai alternatif untuk setiap nilai. Misalnya, untuk tipe taksi,
Limoadalah nilai yang dapat diterima untukLimousine.

Custom slots.
- Pilih Save Slot type. Tipe slot baru akan tersedia saat menambahkan slot ke intent.
Langkah 2: Konfigurasi prompting dan penanganan error
Ketika pengguna memberikan respons tidak valid terhadap prompt yang meminta nilai slot, Lex akan mengulangi prompt. Sesi akan diakhiri saat pengguna berulang kali gagal memberikan respons yang benar (seperti nama kota yang valid).
Atur Lex agar menampilkan pesan error (sebelum mengakhiri sesi) jika pengguna berulang kali gagal memberikan nilai slot yang valid:
- Pilih slot secara individual dan pilih Advanced options untuk slot tersebut.
- Gulir ke bawah jendela opsi lanjutan ke bagian Slot capture: failure response.
- Berikan respons yang sesuai untuk masukan tidak valid. Misalnya, jika pengguna berulang kali memasukkan kota yang tidak dikenali, bot dapat merespons, “Maaf, kami tidak melayani kota tersebut.”

Penanganan error dan failure response.
Semua bot memiliki FallbackIntent, yang dipanggil ketika masukan pengguna tidak cocok dengan intent yang ada. Karena intent ini dipanggil sebagai default, utterance-nya tidak dapat disesuaikan.
- Tentukan respons penutup yang bermakna pada
FallbackIntentdan akhiri percakapan.

Respons penutup.
Langkah 3: Konfirmasi, pemenuhan, dan penutupan
Konfirmasikan intent pengguna setelah mendapatkan nilai slot yang sesuai dan sebelum memenuhi permintaan.
- Gunakan bagian Confirmation untuk memberikan prompt konfirmasi.
- Perhatikan ada tombol sakelar kecil untuk dialog Confirmation. Aktifkan.
Umum untuk menyertakan nilai slot dalam prompt konfirmasi. Misalnya: “Harap konfirmasi (ya atau tidak) bahwa Anda ingin melakukan pemesanan dari {SourceCity} ke {DestinationCity} pada {TravelDate}”.
- Berikan Decline response jika pengguna merespons negatif terhadap prompt konfirmasi. Misalnya, “Baik, kami tidak akan melakukan pemesanan ini”.

Prompt konfirmasi.
Respons fulfillment memberi tahu pengguna bahwa bot mulai memproses permintaan mereka (memesan taksi).
- Pada bagian Fulfillment, berikan pesan lain setelah berhasil memenuhi permintaan. Misalnya, “Baik, kami telah melakukan pemesanan ini.”
Respons penutup adalah pesan terakhir yang dikirim ke pengguna. Misalnya, “Terima kasih telah bepergian bersama kami. Selamat jalan!”
- Perbarui respons dan pilih Save intent.

Respons fulfillment dan penutupan.
Menguji Bot Amazon Lex Anda
Sekarang kita telah membuat bot dan struktur percakapannya, kita dapat mengujinya!
Langkah 1: Uji di konsol Lex
- Temukan tombol Build dan Test di bagian atas halaman Intents.
- Build bot. Anda harus membangun ulang bot setelah setiap perubahan.
- Pilih Test untuk menguji bot di konsol Lex.
- Masukkan pesan yang relevan di jendela chat pop-up dan tanggapi prompt bot.

Menguji bot Amazon Lex.
Kesalahan konfigurasi yang umum
Beberapa bagian seperti Confirmation, Fulfillment, dan Closing response, pada prinsipnya bersifat opsional. Untuk mengaktifkan suatu bagian, aktifkan sakelarnya.
Dalam beberapa kasus, mengaktifkan suatu bagian atau respons secara otomatis mengaktifkan fungsi Lambda untuk bagian tersebut. Jika bagian tertentu memiliki toggle Lambda function disetel ke “on” tetapi tidak ada fungsi Lambda yang terkait, Anda akan mendapatkan error seperti di bawah ini:
Cannot call FulfillmentCodeHook for Intent CabBookIntent. BotAlias/LocaleId TestBotAlias/en_US doesn't have an associated Lambda Function.
Error di atas berasal dari bagian Fulfillment. Untuk mengatasinya, buka advanced settings di bagian terkait dan hapus centang pada opsi penggunaan fungsi Lambda.
Error serupa lainnya terjadi ketika alur salah dikonfigurasi. Misalnya, perhatikan pesan error ini pada tahap build:
'ElicitSlot' next step at 'InitialResponse:CodeHook:Success' in intent 'CabBookIntent' contains invalid slotToElicit setting. slotToElicit must be a required Slot within the intent. Change the slot name in slotToElicit and try your request again.
Untuk mengatasi error ini, buka Advanced options untuk Initial response. Perhatikan bahwa toggle Dialog Code hook aktif. Namun, pada tahap ini, kita belum mengaktifkan fungsi Lamba maupun mengonfigurasinya untuk memulai percakapan. Nonaktifkan code hook dan perbarui bot; seharusnya proses build berjalan normal.

Opsi lanjutan untuk initial response.
Langkah 2: Uji dengan suara (Opsional)
Secara default, bot Lex berfungsi dengan teks dan suara.
- Tekan ikon mikrofon di jendela chat untuk berkomunikasi menggunakan suara.
- Teks placeholder di kolom input berubah menjadi “Listening…” .
- Ucapkan intent Anda, misalnya, “I want to book a taxi.”
- Tekan tanda centang di sebelah kanan kolom input teks.
- Lex akan menyalin singkat masukan suara dan merespons dengan audio.
Amazon Polly mengonversi teks menjadi suara natural. Layanan ini digunakan dalam aplikasi berbasis suara, seperti pembaca berita, gim, bot, dll., untuk menghasilkan suara mirip manusia dari teks. Sejak 2021, Amazon Lex mendukung Neural Text-to-Speech (NTTS) Amazon Polly. Dengan demikian, bot Lex dapat langsung menghasilkan respons suara yang terdengar natural.
Untuk mengonfigurasi suara bot:
- Pada beranda bot, pilih View languages.
- Pilih bahasa yang sesuai.
- Anda juga dapat memilih bahasa terkait di bawah opsi All languages di menu kiri.
- Di bagian Language details, pilih Edit.
- Ini akan membawa Anda ke halaman Language.
- Di bagian Voice, Anda dapat mendengarkan berbagai sampel suara dan memilih suara text-to-speech yang diinginkan.
Mendefinisikan Fulfillment dengan AWS Lambda
Dalam praktiknya, bot perlu berkomunikasi dengan layanan backend lain. Misalnya, bot pemesanan taksi perlu mengirim informasi perjalanan ke endpoint API dan menerima respons berhasil. Fungsi Lambda membantu melakukan hal ini.
Fungsi AWS Lambda adalah cara menulis logika sisi server dan mengeksekusinya tanpa harus secara eksplisit menyewa VPS atau instance komputasi.
Untuk memulai dengan fungsi Lambda:
- Buka beranda AWS Lambda.
- Pilih Create function.
- Untuk contoh ini, pilih opsi untuk membuat fungsi dari awal.
- Pilih
Python 3.x(3.13 saat penulisan) sebagai bahasa danx86_64sebagai prosesor untuk menjalankan fungsi. - Jika ini fungsi Lambda pertama Anda, buat peran baru. Anda juga dapat menggunakan salah satu peran yang sudah ada jika Anda yakin memiliki izin yang tepat.
- Pilih Create function.
- Masukkan kode fungsi pada tab Code di halaman web fungsi Lambda tersebut.
Di bawah ini, kami menunjukkan fungsi Lambda singkat yang mengirim pesan sukses pada bagian Fulfillment:
import json
import urllib.request
def lambda_handler(event, context):
slots = event['sessionState']['intent']['slots']
intent = event['sessionState']['intent']['name']
if event['invocationSource'] == 'FulfillmentCodeHook':
message = "Lambda has placed your reservation"
response = {
"sessionState": {
"dialogAction": {
"type": "Close"
},
"intent": {
'name':intent,
'slots': slots,
'state':'Fulfilled'
}
},
"messages": [
{
"contentType": "PlainText",
"content": message
}
]
}
return response
Konfigurasikan Bot untuk memanggil fungsi Lambda ini:
- Buka halaman beranda bot. Di menu kiri, pilih opsi Aliases (Deployment > Aliases).
- Secara default, harusnya sudah ada alias dengan nama TestBotAlias.
- Pilih alias tersebut.
- Pada halaman alias, di bawah languages, temukan bahasa bot. Contoh ini menggunakan English(US).
- Pilih bahasa tersebut.
- Pada halaman bahasa, temukan bagian Lambda function.
- Di bawah source, pilih nama fungsi Lambda Anda.
- Pilihan default untuk versinya adalah
$LATEST. Biarkan tidak berubah. - Simpan perubahan.
Dalam contoh ini, kita ingin menggunakan fungsi Lambda pada tahap fulfillment:
- Pada halaman Intent, buka Advanced options di bawah bagian Fulfillment .
- Di bawah bagian Fulfillment Lambda code hook, centang kotak berlabel Use a Lambda function for fulfillment.
- Simpan perubahan (pilih Update options) pada opsi Fulfillment.
- Simpan Intent.
- Buka halaman Intent bot, build, dan uji.
Sekarang, respons berasal dari fungsi Lambda:

Menguji fungsi Lambda yang diintegrasikan dengan bot Lex.
Menyebarkan Bot Amazon Lex Anda
Setelah membuat dan menguji bot Lex, kita siap menyebarkannya. Deployment adalah topik yang kompleks dengan detail yang bergantung pada kasus penggunaan masing-masing. Pada bagian ini, saya memberikan gambaran umum berbagai metode deployment yang umum.
Langkah 1: Menyebarkan pada aplikasi web atau seluler
Lex dapat diintegrasikan ke aplikasi web dan seluler menggunakan API, SDK, atau pustaka bawaan:
- CloudFormation: AWS CloudFormation adalah solusi Infrastructure as Code. Ini memungkinkan penggunaan file YAML untuk menggabungkan, menyediakan, menyebarkan, dan mengelola berbagai sumber daya AWS sebagai satu produk lengkap. CloudFormation memiliki template untuk mengintegrasikan berbagai produk AWS seperti bucket S3, fungsi Lambda, bot Lex, dan lainnya. Gunakan file template YAML Lex untuk mengonfigurasi bot Lex sebagai bagian dari proyek CloudFormation.
- Integrasi situs web: AWS telah menyediakan serangkaian file loader Javascript dan AWS SDK untuk memuat bot ke dalam situs web. Ini mencakup file UI Lex bawaan dan pustaka loader untuk memuat bot Lex. Bot dapat diintegrasikan ke situs web sebagai halaman mandiri atau iframe.
- Aplikasi native seluler: AWS Amplify menyertakan alat untuk terintegrasi dengan berbagai frontend seluler dan web, seperti ReactJS / React Native, NextJS, Angular, Android, iOS, dan lainnya. Dokumentasi Amplify menjelaskan cara mengonfigurasi bot Lex untuk bekerja dengan SDK ini.
- Lex API: Untuk kontrol penuh atas interaksi dan antarmuka, Anda dapat menggunakan Lex API. Dengan API, Anda dapat meneruskan pesan pengguna dan bot (satu sama lain) sambil mempertahankan kontrol pengalaman pengguna melalui aplikasi Anda. Lex menawarkan dua API:
- Runtime API digunakan untuk interaksi pengguna, seperti dijelaskan di atas.
- Build API digunakan untuk membangun dan mengonfigurasi bot Lex secara terprogram alih-alih menggunakan GUI.
Langkah-langkah di bawah ini memberikan garis besar cara menyebarkan chatbot sebagai halaman web:
- Gunakan Lex Web UI Loader library. Pustaka ini membuat objek
ChatBotUiLoader, yang mencakup konstruktorFullPageLoader()danIframeLoader. Fungsiload()dari konstruktor ini memuat bot di halaman atau iFrame, masing-masing. - Untuk memuat bot pada halaman web, tentukan konfigurasi chatbot:
- Cognito pool ID. Perhatikan bahwa Anda memerlukan AWS Cognito identity pool untuk terhubung ke bot. Anda dapat membuat identity pool dari konsol AWS Cognito. Anda harus menautkan Cognito identity pool ke bot Lex.
- Nama dan detail bot Lex.
- Muat bot menggunakan fungsi
.load().
Cuplikan di bawah ini menunjukkan garis besar fungsi JavaScript yang menyebarkan bot Lex pada halaman web:
<!-- LexWebUi loader -->
<script src="./lex-web-ui-loader.js"></script>
<script>
// instantiate the loader
var lexWebUiLoader = new ChatBotUiLoader.FullPageLoader();
var chatbotUiconfig = {
cognito: {
poolId:
},
lex: {
initialText: 'How can I help you?',
botName: 'CabBookBot'
},
ui: {
toolbarTitle: 'Cab Booking Lex Bot',
toolbarLogo: ''
},
};
lexWebUiLoader.load(chatbotUiConfig)
.then(function () {
console.log('chatbot UI loaded');
})
.catch(function (error) {
console.error('chatbot UI failed to load', error);
});
</script>
Langkah 2: Integrasi dengan platform perpesanan
Anda dapat mengintegrasikan bot Lex dengan layanan perpesanan pihak ketiga seperti Facebook Messenger, Slack, dan Twilio SMS.
Pada bagian ini, kita membahas cara mengintegrasikan Lex dengan Facebook Messenger. Sebelum memulai, Anda memerlukan:
- Sebuah akun pengembang Facebook
- Halaman bisnis di Facebook. Perhatikan bahwa aplikasi Facebook memerlukan izin untuk menggunakan Messaging API dengan Lex. Hanya aplikasi yang ditinjau dan disetujui oleh Facebook sebagai aplikasi bisnis terverifikasi yang diberikan izin ini.
Di bawah ini, saya menguraikan langkah-langkah untuk mengintegrasikan bot Lex dengan Facebook Messenger sehingga pengguna yang mengirim pesan ke halaman Facebook Anda dapat menerima respons dari bot.
- Buat aplikasi Business baru jika Anda belum memilikinya.
- Di bawah use case aplikasi, pilih Other.
- Pilih Business sebagai tipe aplikasi.
- Anda dapat menambahkan berbagai produk Facebook ke setiap aplikasi, seperti Messenger, Instagram, dll. Tambahkan Messenger ke aplikasi dan pilih Set up.
- Di bagian Messenger API Setup:
- Hubungkan halaman bisnis Facebook Anda ke aplikasi ini.
- Hasilkan token baru (dengan tombol Generate ) untuk aplikasi ini. Salin token ini ke editor teks.
- Perhatikan pesan, “To send and receive messages, request pages_messaging permission.” Pilih Request Permission untuk meminta izin yang diperlukan.
- Jika aplikasi Anda belum ditinjau dan disetujui oleh Facebook, ajukan untuk ditinjau.
- Dari App Settings di opsi menu kiri, pilih Basic.
- Pilih Show di bawah App Secret dan salin kode rahasia ke file teks.
Sekarang buka konsol Lex dan pilih bot yang ingin Anda integrasikan dengan Messenger.
- Di pohon menu kiri, temukan Channel integrations di bawah Deployment.
- Pilih Add Channel di bawah Create Channel:
- Pilih Facebook di bawah Platform.
- Pilih KMS Key di bawah Identity policies.
- Di bawah Integration configuration:
- Beri nama untuk integrasi
- Pilih alias (dari bot Lex) yang ingin Anda integrasikan dengan Messenger
- Pilih bahasa.
- Di bawah Additional configuration:
- Di bawah Alias, masukkan string untuk mengidentifikasi aplikasi yang memanggil Lex. Anda akan memerlukan string ini nanti.
- Di bawah Page access token, masukkan access token yang Anda salin di Facebook.
- Di bawah App secret key, masukkan secret key yang Anda salin di Facebook.
- Gunakan tombol Add untuk membuat channel baru.
- Kembali ke halaman Channel Integrations dan pilih channel yang Anda buat.
- Salin URL di bawah Endpoint pada bagian Callback URL.
Kembali ke konsol pengembang Facebook dan buka aplikasi yang Anda buat sebelumnya.
- Dari menu kiri, di bawah Messenger, pilih Messenger API Settings.
- Di bawah Callback URL, masukkan callback URL yang Anda salin di konsol Lex.
- Di bawah Verify token, masukkan string alias yang Anda masukkan di konsol Lex.
- Verify and save perubahan.
- Di bawah Webhooks, pilih Add subscriptions. Pilih messages pada jendela pop-up, lalu Save.
Sekarang Anda dapat mengirim pesan ke halaman Facebook dengan sample utterances bot Lex dan mendapatkan respons yang relevan.
Langkah 3: Menghubungkan Lex dengan AWS Lambda untuk interaktivitas yang lebih baik
Kita menulis fungsi Lambda sederhana untuk bagian fulfillment pada bagian sebelumnya. Fungsi tersebut hanya mengembalikan pesan teks: “Lambda has placed your reservation.” Dalam praktiknya, kita akan mengirim pesan sukses setelah memenuhi permintaan.
Misalnya, fungsi Lambda mengirim permintaan dengan detail pemesanan pengguna ke backend API, yang melakukan pemesanan dan kemudian membalas pengguna berdasarkan respons API.
Berikut cara melakukan hal di atas:
- Objek JSON
slotsdalam fungsi Lambda berisi nilai slot. Pelajari strukturnya menggunakan code beautifier untuk mengekstrak nilai yang sesuai. - Cuplikan kode di bawah ini menunjukkan cara mendapatkan nilai slot untuk
SourceCitydan mengoper nilai ini ke backend API yang menangani pemesanan. Tambahkan kode ini ke dalam fungsilambda_handler():
slots = event['sessionState']['intent']['slots']
print("slots - ", slots)
source_city = slots['SourceCity']['value']['interpretedValue']
print("source city - ", source_city)
Sekarang saya tunjukkan cara membuat permintaan API dari fungsi Lambda. Untuk contoh ini, kita menggunakan endpoint API dummy di ASDFast. Layanan ini memungkinkan Anda mengirim permintaan HTTP(S) ke endpoint API dan menerima respons yang realistis.
- Dengan kode di bawah ini, kita mengirim permintaan
GETke endpoint ini. Lalu kita menyesuaikan pesan yang dikirim bot kepada pengguna bergantung pada status kode respons dari permintaanGET:
res = urllib.request.urlopen(urllib.request.Request(
url='http://asdfast.beobit.net/api/',
headers={'Accept': 'application/json'},
method='GET'),
timeout=5)
message_success = "Lambda has placed your reservation"
message_failure = "Lambda could not place your reservation. Please retry."
message = message_success if res.status == 200 else message_failure
Fungsi Lambda lengkap ditunjukkan di bawah ini:
import json
import urllib.request
def lambda_handler(event, context):
print("event - ", event)
slots = event['sessionState']['intent']['slots']
intent = event['sessionState']['intent']['name']
print("slots - ", slots)
source_city = slots['SourceCity']['value']['interpretedValue']
print("source city - ", source_city)
print("intent - ", intent)
if event['invocationSource'] == 'FulfillmentCodeHook':
print("FulfillmentCodeHook")
res = urllib.request.urlopen(urllib.request.Request(
url='http://asdfast.beobit.net/api/',
headers={'Accept': 'application/json'},
method='GET'),
timeout=5)
message_success = "Lambda has placed your reservation"
message_failure = "Lambda could not place your reservation. Please retry."
message = message_success if res.status == 200 else message_failure
#message = "Lambda has placed your reservation"
response = {
"sessionState": {
"dialogAction": {
"type": "Close"
},
"intent": {
'name':intent,
'slots': slots,
'state':'Fulfilled'
}
},
"messages": [
{
"contentType": "PlainText",
"content": message
}
]
}
return responsePraktik Terbaik untuk Membangun Bot Amazon Lex
Setelah membahas prinsip dasar bot Lex dan penggunaannya secara praktis, pada bagian ini saya menyajikan beberapa praktik terbaik untuk merancang bot.
Rancang percakapan yang jelas dan ringkas
Pastikan jalur percakapan dan slot Anda tepat:
- Setiap intent harus berfokus pada satu tugas, dan setiap slot harus menangkap nilai yang sesuai dengan satu variabel.
- Jangan membuat teks prompt terlalu panjang atau bertele-tele. Buat dialog singkat dan langsung menuju hasil yang diinginkan.
Pendekatan ini menghindari kebingungan pengguna dan potensi kesalahpahaman oleh Lex.
Manfaatkan tipe slot dan validasi
Bot dan layanan backend terkait memerlukan informasi kebutuhan pengguna yang akurat. Menggunakan tipe slot yang tepat memastikan hal ini.
- Secara umum, saya menyarankan menggunakan slot bawaan untuk tipe data umum, seperti
AMAZON.Dateuntuk tanggal,AMAZON.Cityuntuk kota, dan seterusnya. Tipe slot ini telah diuji secara ekstensif dan diketahui kompatibel dengan berbagai aplikasi. - Anda dapat merancang tipe slot kustom dalam kasus khusus. Pastikan konfigurasinya benar dan telah diuji.
- Selain menggunakan tipe slot yang tepat, validasi bahwa pengguna telah memberikan informasi untuk semua slot wajib. Ini memungkinkan backend API memenuhi permintaan pengguna dan memastikan pengalaman pengguna yang lancar.
Aktifkan percakapan multi-giliran
Pengguna bisa kewalahan jika harus memasukkan semua informasi yang diperlukan dalam satu pesan, seperti “Book a trip for N people on Z date/time from X to Y in cab type T.”
- Gunakan percakapan multi-giliran untuk memastikan pengalaman pengguna yang lebih baik. Seperti banyak alat berbasis model bahasa modern, Lex dapat mempertahankan konteks melalui percakapan multi-giliran. Ini memungkinkannya mengaitkan prompt dan respons sebelumnya dengan interaksi terbaru.
- Memecah prompt yang kompleks menjadi serangkaian pertanyaan singkat meningkatkan alur percakapan.
Pantau dan optimalkan kinerja
Untuk bot di produksi, sangat penting untuk memantau kinerjanya di berbagai metrik seperti:
- Jumlah total percakapan.
- Rata-rata durasi percakapan.
- Rata-rata jumlah giliran per percakapan.
- Jumlah (dan rasio) utterance yang terdeteksi dan terlewat.
- Error Lambda, dan lainnya.
Gunakan metrik ini untuk mengukur interaksi pengguna dan kinerja bot:
- Di menu kiri pada halaman Bot, pilih opsi Analytics.
- Akses Conversation dashboard, Performance dashboard, dan CloudWatch metrics untuk mempelajari kinerja bot.
AWS CloudWatch adalah alat pemantauan untuk layanan AWS. Ini mengonsolidasikan berbagai metrik kinerja secara real-time pada satu halaman. Gunakan metrik ini untuk meningkatkan dan menyempurnakan kinerja bot.
Kesimpulan
Dalam artikel ini, kita menjelajahi Amazon Lex V2, layanan chatbot peka konteks dari AWS. Kita menelusuri proses membangun bot dasar, mengonfigurasinya untuk berinteraksi dengan pengguna, dan mengintegrasikannya dengan backend API menggunakan AWS Lambda. Selain itu, kita membahas praktik terbaik dan opsi deployment, termasuk menyematkan bot di situs web atau halaman Facebook.
Saat Anda melanjutkan mempelajari layanan AWS, pertimbangkan untuk memperluas pengetahuan dengan kursus-kursus berikut:
- Dapatkan dasar yang kuat dalam layanan cloud AWS dengan kursus AWS Cloud Technology and Services.
- Pelajari cara mengelola keamanan dan biaya AWS secara efektif dalam kursus AWS Security and Cost Management.
- Jelajahi interaksi AWS secara terprogram dengan Boto3, AWS SDK untuk Python, di kursus Introduction to AWS Boto in Python.
Dengan memanfaatkan sumber daya ini, Anda akan siap membangun, mengamankan, dan mengoptimalkan aplikasi berbasis AWS, termasuk chatbot yang didukung oleh Amazon Lex!
FAQs
Apakah Lex terintegrasi dengan layanan AWS lainnya?
Ya, Lex terintegrasi dengan layanan seperti Lambda, S3, CloudWatch, dan lainnya. Ini memungkinkan Anda meningkatkan fungsionalitas bot, mengintegrasikannya dengan produk lain, dan memantau kinerjanya.
Apakah Lex menangani suara dan teks?
Ya, secara default Lex dapat menangani input suara dan teks. Lex mendukung berbagai suara untuk interaksi berbicara. Anda juga dapat menggunakan AWS Polly untuk mensintesis suara dan mengirim file audio ke Lex.
Dapatkah saya menggunakan antarmuka pengguna kustom untuk bot Lex?
Ya, Lex memiliki runtime API yang dapat mengirimkan input pengguna ke bot dan menerima responsnya (dari bot). Dengan demikian, bot Lex berperan sebagai backend untuk UI kustom.
Bisakah saya menggunakan Lex tanpa fungsi Lambda?
Secara prinsip, bisa. Anda dapat merancang percakapan sepenuhnya di dalam Lex. Dalam praktiknya, bot perlu terhubung dengan layanan backend API lain yang memenuhi permintaan pengguna (seperti memesan tiket). Anda memerlukan AWS Lambda untuk terhubung dengan layanan eksternal.
Apakah AWS Lex dapat dilatih?
Sampai batas tertentu, ya. Mesin NLU Lex dapat mengenali masukan pengguna yang mirip dengan sample utterances. Lex juga dapat memperluas nilai valid dari suatu tipe slot berdasarkan beberapa sampel. Namun, jangan berharap tingkat kemampuan pelatihan yang sama seperti LLM. Lex dirancang untuk interaksi tugas-tertentu yang terbatas dan bukan percakapan panjang.
Arun adalah mantan pendiri startup yang gemar membangun hal-hal baru. Saat ini ia mengeksplorasi landasan teknis dan matematis Kecerdasan Buatan. Ia senang berbagi apa yang dipelajarinya, sehingga ia menulis tentang topik tersebut.
Selain di DataCamp, Anda dapat membaca publikasinya di Medium, Airbyte, dan Vultr.

