Bagian ini menjelaskan format payload JSON saat Actions on Google memanggil fulfillment Anda melalui Dialogflow v2.
Jika Anda menggunakan Dialogflow untuk membuat Action, fulfillment Anda akan berkomunikasi dengan Dialogflow melalui format webhook standarnya sendiri, bukan format webhook percakapan Actions on Google. Format webhook Dialogflow berisi semua informasi format webhook percakapan beserta data khusus Dialogflow tambahan, seperti informasi tentang konteks dan parameter.
Untuk melihat contoh pesan JSON lainnya untuk webhook Dialogflow, Anda dapat melihat project GitHub ini.
Isi permintaan
Pesan request dari Dialogflow berisi data dalam format webhook Dialogflow. Objek ini mencakup informasi khusus Actions on Google, seperti yang dirangkum di bawah:
- Nilai
originalDetectIntentRequest.source
adalah "google". originalDetectIntentRequest.version
menunjukkan versi Actions on Google untuk permintaan tersebut.originalDetectIntentRequest.payload
berisi informasi utama khusus Actions on Google, termasuk JSON permintaan percakapan dari Asisten.- Kolom
Conversation.conversationToken
tidak didukung oleh permintaan webhook Dialogflow. Sebagai gantinya, fulfillment Anda dapat menggunakan konteks Dialogflow untuk mempertahankan data selama masa aktif percakapan.
Contoh permintaan panggilan sederhana
Cuplikan di bawah ini menunjukkan contoh permintaan pemanggilan dalam format webhook Dialogflow.
{
"responseId": "c4b863dd-aafe-41ad-a115-91736b665cb9",
"queryResult": {
"queryText": "GOOGLE_ASSISTANT_WELCOME",
"action": "input.welcome",
"parameters": {},
"allRequiredParamsPresent": true,
"fulfillmentText": "",
"fulfillmentMessages": [],
"outputContexts": [
{
"name": "projects/${PROJECTID}/agent/sessions/${SESSIONID}/contexts/google_assistant_welcome"
},
{
"name": "projects/${PROJECTID}/agent/sessions/${SESSIONID}/contexts/actions_capability_screen_output"
},
{
"name": "projects/${PROJECTID}/agent/sessions/${SESSIONID}/contexts/google_assistant_input_type_voice"
},
{
"name": "projects/${PROJECTID}/agent/sessions/${SESSIONID}/contexts/actions_capability_audio_output"
},
{
"name": "projects/${PROJECTID}/agent/sessions/${SESSIONID}/contexts/actions_capability_web_browser"
},
{
"name": "projects/${PROJECTID}/agent/sessions/${SESSIONID}/contexts/actions_capability_media_response_audio"
}
],
"intent": {
"name": "projects/${PROJECTID}/agent/intents/8b006880-0af7-4ec9-a4c3-1cc503ea8260",
"displayName": "Default Welcome Intent"
},
"intentDetectionConfidence": 1,
"diagnosticInfo": {},
"languageCode": "en-us"
},
"originalDetectIntentRequest": {
"source": "google",
"version": "2",
"payload": {
"isInSandbox": true,
"surface": {
"capabilities": [
{
"name": "actions.capability.SCREEN_OUTPUT"
},
{
"name": "actions.capability.AUDIO_OUTPUT"
},
{
"name": "actions.capability.WEB_BROWSER"
},
{
"name": "actions.capability.MEDIA_RESPONSE_AUDIO"
}
]
},
"inputs": [
{
"rawInputs": [
{
"query": "Talk to my test app",
"inputType": "VOICE"
}
],
"intent": "actions.intent.MAIN"
}
],
"user": {
"lastSeen": "2018-03-16T22:08:48Z",
"permissions": [
"UPDATE"
],
"locale": "en-US",
"userId": "ABwppHEvwoXs18xBNzumk18p5h02bhRDp_riW0kTZKYdxB6-LfP3BJRjgPjHf1xqy1lxqS2uL8Z36gT6JLXSrSCZ"
},
"conversation": {
"conversationId": "${SESSIONID}",
"type": "NEW"
},
"availableSurfaces": [
{
"capabilities": [
{
"name": "actions.capability.SCREEN_OUTPUT"
},
{
"name": "actions.capability.AUDIO_OUTPUT"
}
]
}
]
}
},
"session": "projects/${PROJECTID}/agent/sessions/${SESSIONID}"
}
Contoh permintaan percakapan sederhana
Cuplikan di bawah ini menunjukkan contoh permintaan percakapan dalam format webhook Dialogflow, dengan input pengguna berupa string teks.
{
"responseId": "68efa569-4ba1-4b7f-9b1b-ac2865deb539",
"queryResult": {
"queryText": "query from the user",
"action": "action.name.of.matched.dialogflow.intent",
"parameters": {},
"allRequiredParamsPresent": true,
"outputContexts": [
{
"name": "projects/${PROJECTID}/agent/sessions/${SESSIONID}/contexts/actions_capability_screen_output"
},
{
"name": "projects/${PROJECTID}/agent/sessions/${SESSIONID}/contexts/actions_capability_audio_output"
},
{
"name": "projects/${PROJECTID}/agent/sessions/${SESSIONID}/contexts/google_assistant_input_type_keyboard"
},
{
"name": "projects/${PROJECTID}/agent/sessions/${SESSIONID}/contexts/actions_capability_media_response_audio"
},
{
"name": "projects/${PROJECTID}/agent/sessions/${SESSIONID}/contexts/actions_capability_web_browser"
}
],
"intent": {
"name": "projects/${PROJECTID}/agent/intents/1f4e5bd9-a670-4161-a22e-2c97b077f29f",
"displayName": "Name of Dialogflow Intent"
},
"intentDetectionConfidence": 1,
"diagnosticInfo": {},
"languageCode": "en-us"
},
"originalDetectIntentRequest": {
"source": "google",
"version": "2",
"payload": {
"isInSandbox": true,
"surface": {
"capabilities": [
{
"name": "actions.capability.SCREEN_OUTPUT"
},
{
"name": "actions.capability.AUDIO_OUTPUT"
},
{
"name": "actions.capability.WEB_BROWSER"
},
{
"name": "actions.capability.MEDIA_RESPONSE_AUDIO"
}
]
},
"inputs": [
{
"rawInputs": [
{
"query": "query from the user",
"inputType": "KEYBOARD"
}
],
"arguments": [
{
"rawText": "query from the user",
"textValue": "query from the user",
"name": "text"
}
],
"intent": "actions.intent.TEXT"
}
],
"user": {
"lastSeen": "2017-10-06T01:06:56Z",
"locale": "en-US",
"userId": "AI_yXq-AtrRh3mJX5D-G0MsVhqun"
},
"conversation": {
"conversationId": "1522951193000",
"type": "ACTIVE",
"conversationToken": "[]"
},
"availableSurfaces": [
{
"capabilities": [
{
"name": "actions.capability.SCREEN_OUTPUT"
},
{
"name": "actions.capability.AUDIO_OUTPUT"
}
]
}
]
}
},
"session": "projects/${PROJECTID}/agent/sessions/${SESSIONID}"
}
Contoh hasil helper
Cuplikan di bawah ini menunjukkan contoh hasil helper dalam format webhook Dialogflow. Contoh ini menunjukkan respons pengguna setelah webhook menunjukkan kepada Asisten bahwa perlu mendapatkan konfirmasi pengguna.
{
"responseId": "cb6f5ec2-c26e-4349-b561-a9ddd6a0e495",
"queryResult": {
"queryText": "actions_intent_CONFIRMATION",
"action": "Dialogflow action name of matched intent",
"parameters": {},
"allRequiredParamsPresent": true,
"outputContexts": [
{
"name": "projects/${PROJECTID}/agent/sessions/${SESSIONID}/contexts/actions_intent_confirmation",
"parameters": {
"CONFIRMATION": true
}
}
],
"intent": {
"name": "projects/${PROJECTID}/agent/intents/1777d616-a5f7-4838-a9a9-870f2956bd14",
"displayName": "Dialogflow action name of matched intent"
},
"intentDetectionConfidence": 1,
"diagnosticInfo": {},
"languageCode": "en-us"
},
"originalDetectIntentRequest": {
"source": "google",
"version": "2",
"payload": {
"isInSandbox": true,
"surface": {},
"inputs": [
{
"rawInputs": [
{
"query": "yes",
"inputType": "VOICE"
}
],
"arguments": [
{
"name": "CONFIRMATION",
"boolValue": true
}
],
"intent": "actions.intent.CONFIRMATION"
}
],
"user": {},
"conversation": {},
"availableSurfaces": []
}
},
"session": "projects/${PROJECTID}/agent/sessions/${SESSIONID}"
}
Isi respons
Content-Type
di header postingan HTTP dari endpoint fulfillment
Anda ke Asisten harus berupa application/json
.
Pesan respons yang dikirim fulfillment Anda ke Dialogflow harus dalam format webhook Dialogflow.
Saat berkomunikasi dengan Asisten, respons Anda biasanya berisi objek payload
yang mengenkapsulasi objek "google
". Objek payload "google
" mencakup
informasi khusus Actions on Google. Kolom ini harus berisi, minimum, kolom expectUserResponse
, dan kolom richResponse
atau systemIntent
.
Kolom utama untuk objek payload "google
" dirangkum di bawah:
Kolom | Deskripsi |
---|---|
expectUserResponse |
Menunjukkan apakah fulfillment Anda mengharapkan respons pengguna. Tetapkan nilai ke
true kapan harus mempertahankan percakapan dan false untuk mengakhiri
percakapan. |
userStorage |
Menyimpan data persisten yang terkait dengan pengguna tertentu. Total penyimpanan adalah 10.000 byte. |
richResponse |
Kolom ini berisi audio, teks, kartu, saran, atau data terstruktur untuk dirender oleh Asisten. Untuk mempelajari lebih lanjut cara menggunakan respons kaya untuk Actions on Google, lihat Respons kaya |
systemIntent |
Kolom ini memiliki struktur yang sama dengan ExpectedInput.possibleIntents . Respons Anda biasanya berisi
systemIntent jika fulfillment Anda menggunakan
intent bantuan. Kolom
possibleIntents
di systemIntent harus ditetapkan ke
objek ExpectedIntent , dengan nama kolom inputValueData diubah menjadi data .
|
Dalam objek ExpectedIntent
, Anda menetapkan nilai berikut:
- intent: Nama intent untuk helper yang menunjukkan jenis informasi yang Anda inginkan untuk diberikan pengguna, dan
- data: Spesifikasi nilai, yaitu string yang mendeskripsikan data yang diperlukan Asisten untuk menjalankan helper.
Misalnya, jika Anda meminta izin pengguna, tetapkan intent
ke
actions.intent.PERMISSSION
dan data
ke spesifikasi nilai ke
"@type": "type.googleapis.com/google.actions.v2.PermissionValueSpec"
, bersama dengan kolom untuk
jenis tersebut.
Daftar berikut merangkum string spesifikasi nilai untuk helper yang dapat Anda tetapkan dalam
systemIntent
untuk respons webhook Dialogflow. Untuk daftar lengkap intent Actions on Google
untuk kontrol percakapan, lihat
referensi Intent.
Nama Intent | Nama Peristiwa Dialogflow | Spesifikasi Nilai | Deskripsi |
---|---|---|---|
actions.intent.CONFIRMATION
|
actions_intent_CONFIRMATION |
"@type": "type.googleapis.com/google.actions.v2.ConfirmationValueSpec"
|
Memperoleh konfirmasi dari pengguna (misalnya, jawaban untuk pertanyaan ya atau tidak). |
actions.intent.DATETIME
|
actions_intent_DATETIME |
"@type": "type.googleapis.com/google.actions.v2.DateTimeValueSpec"
|
Memperoleh input tanggal dan waktu dari pengguna. |
actions.intent.DELIVERY_ADDRESS
|
actions_intent_DELIVERY_ADDRESS |
"@type": "type.googleapis.com/google.actions.v2.DeliveryAddressValueSpec"
|
Mendapatkan input alamat pengiriman dari pengguna. |
actions.intent.LINK
|
actions_intent_LINK |
"@type": "type.googleapis.com/google.actions.v2.LinkValueSpec"
|
Meminta alur deep link ke aplikasi Android. |
actions.intent.OPTION
|
actions_intent_OPTION |
"@type": "type.googleapis.com/google.actions.v2.OptionValueSpec"
|
Mendapatkan item yang dipilih dari UI daftar atau carousel. |
actions.intent.PERMISSION
|
actions_intent_PERMISSION |
"@type": "type.googleapis.com/google.actions.v2.PermissionValueSpec"
|
Memperoleh informasi pengguna termasuk nama lengkap, lokasi sementara, atau lokasi akurat. |
actions.intent.SIGN_IN
|
actions_intent_SIGN_IN |
"@type": "type.googleapis.com/google.actions.v2.SignInValueSpec"
|
Meminta alur penautan akun untuk menautkan akun pengguna. |
Contoh respons sederhana
Cuplikan di bawah ini menunjukkan contoh respons sederhana dalam format webhook Dialogflow.
{
"payload": {
"google": {
"expectUserResponse": true,
"richResponse": {
"items": [
{
"simpleResponse": {
"textToSpeech": "this is a simple response"
}
}
]
}
}
}
}
Contoh helper
Cuplikan di bawah ini menunjukkan contoh penggunaan intent helper dalam format webhook
Dialogflow. Dalam contoh ini, webhook Anda menggunakan
intent helper actions.intent.OPTIONS
untuk menginstruksikan Asisten agar mendapatkan
pilihan pengguna di antara dua opsi.
{
"payload": {
"google": {
"expectUserResponse": true,
"richResponse": {
"items": [
{
"simpleResponse": {
"textToSpeech": "Choose a item"
}
}
]
},
"systemIntent": {
"intent": "actions.intent.OPTION",
"data": {
"@type": "type.googleapis.com/google.actions.v2.OptionValueSpec",
"listSelect": {
"title": "Hello",
"items": [
{
"optionInfo": {
"key": "first title key"
},
"description": "first description",
"image": {
"url": "/assistant/images/badges/XPM_BADGING_GoogleAssistant_VER.png",
"accessibilityText": "first alt"
},
"title": "first title"
},
{
"optionInfo": {
"key": "second"
},
"description": "second description",
"image": {
"url": "https://lh3.googleusercontent.com/Nu3a6F80WfixUqf_ec_vgXy_c0-0r4VLJRXjVFF_X_CIilEu8B9fT35qyTEj_PEsKw",
"accessibilityText": "second alt"
},
"title": "second title"
}
]
}
}
}
}
}
}
Saat menerima pesan dari contoh sebelumnya, Asisten untuk sementara mengambil percakapan dan meminta pengguna membuat pilihan berdasarkan opsi yang diberikan. Setelah mengumpulkan semua input pengguna yang diperlukan, Asisten akan mengirimkan hasil helper ini kembali ke fulfillment Anda dalam permintaan webhook Dialogflow.
Cuplikan di bawah ini menunjukkan contoh hasil bantuan dengan pilihan pilihan pengguna.
{
"responseId": "ea166558-615a-48f3-ae5b-7f55d895784b",
"queryResult": {
"queryText": "actions_intent_OPTION",
"action": "",
"parameters": {},
"allRequiredParamsPresent": true,
"fulfillmentText": "",
"fulfillmentMessages": [],
"outputContexts": [
{
"name": "projects/${PROJECTID}/agent/sessions/${SESSIONID}/contexts/actions_intent_option",
"parameters": {
"OPTION": "key of selected item"
}
}
],
"intent": {
"name": "projects/${PROJECTID}/agent/intents/1777d616-a5f7-4838-a9a9-870f2956bd14",
"displayName": "Dialogflow intent name of matched intent"
},
"intentDetectionConfidence": 1,
"diagnosticInfo": {},
"languageCode": "en-us"
},
"originalDetectIntentRequest": {
"source": "google",
"version": "2",
"payload": {
"isInSandbox": true,
"surface": {
"capabilities": []
},
"inputs": [
{
"rawInputs": [
{
"query": "Title of selected item",
"inputType": "TOUCH"
}
],
"arguments": [
{
"textValue": "Key of selected item",
"name": "OPTION"
}
],
"intent": "actions.intent.OPTION"
}
],
"user": {},
"conversation": {},
"availableSurfaces": []
}
},
"session": "projects/${PROJECTID}/agent/sessions/${SESSIONID}"
}
Contoh mengakhiri percakapan
Cuplikan di bawah ini menunjukkan contoh respons sederhana untuk mengakhiri sesi
percakapan dalam format webhook Dialogflow. Nilai
expectUserResponse
dari false
dalam pesan respons memberi tahu Asisten
bahwa tidak ada input pengguna lebih lanjut yang diharapkan dan harus mengakhiri percakapan
saat ini.
{
"payload": {
"google": {
"expectUserResponse": false,
"richResponse": {
"items": [
{
"simpleResponse": {
"textToSpeech": "Goodbye!"
}
}
]
}
}
}
}
Untuk mempelajari cara mengganti perilaku default saat pengguna memanggil frasa standar untuk mengakhiri percakapan dengan Asisten, lihat panduan keluar percakapan.