สำรวจใน Dialogflow
คลิกต่อไปเพื่อนำเข้าตัวอย่างความสามารถของ Surface ใน Dialogflow จากนั้นทำตาม ด้านล่างเพื่อปรับใช้และทดสอบตัวอย่าง
- ป้อนชื่อ Agent และสร้าง Agent ใหม่ของ Dialogflow สำหรับตัวอย่าง
- หลังจากนำเข้าตัวแทนเสร็จแล้ว ให้คลิกไปที่ตัวแทน
- จากเมนูการนำทางหลัก ให้ไปที่การดำเนินการตามคำสั่งซื้อ
- เปิดใช้เครื่องมือแก้ไขในบรรทัด แล้วคลิกทำให้ใช้งานได้ เครื่องมือแก้ไขมีตัวอย่าง โค้ด
- จากเมนูการนำทางหลัก ให้ไปที่ Integrations แล้วคลิก Google Assistant
- ในหน้าต่างโมดัลที่ปรากฏขึ้น ให้เปิดใช้แสดงตัวอย่างการเปลี่ยนแปลงอัตโนมัติ แล้วคลิกทดสอบ เพื่อเปิดเครื่องมือจำลอง Actions
- ในเครื่องมือจำลอง ให้ป้อน
Talk to my test app
เพื่อทดสอบตัวอย่าง
การดำเนินการแสดงได้ในหลายแพลตฟอร์ม ซึ่งรวมถึงเสียงเท่านั้น พื้นผิว (ลำโพงอัจฉริยะ) และเสียงและ พื้นที่แสดงผล (เช่น จออัจฉริยะและ อุปกรณ์เคลื่อนที่)
ใช้แพลตฟอร์มเพื่อออกแบบและสร้างการสนทนาที่ทำงานได้ดีในทุกแพลตฟอร์ม เพื่อควบคุมและกำหนดขอบเขตการสนทนาของคุณอย่างเหมาะสม
แสดงความสามารถของการดำเนินการ
Actions on Google ให้คุณกำหนดได้ว่าผู้ใช้จะเรียกใช้การดำเนินการของคุณได้หรือไม่ กับพื้นผิวที่พวกเขาใช้อยู่ หากผู้ใช้พยายามเรียกใช้การดำเนินการของคุณใน แพลตฟอร์มที่ไม่สนับสนุน ผู้ใช้จะได้รับข้อความแสดงข้อผิดพลาดที่แจ้งว่าอุปกรณ์ของตน ไม่รองรับ
คุณกำหนดการรองรับแพลตฟอร์มของการดำเนินการในโปรเจ็กต์ Actions ได้
การดำเนินการของคุณอาจปรากฏในหลากหลายแพลตฟอร์ม Assistant รองรับ เช่น สมาร์ทโฟน (Android และ iOS) และ อุปกรณ์ Google Home
ความสามารถของแพลตฟอร์มรันไทม์
คุณมอบประสบการณ์ของผู้ใช้ด้วยความสามารถของแพลตฟอร์มรันไทม์ได้ 2 วิธีหลักๆ ดังนี้
- การขยายการตอบกลับ - แสดงคำตอบที่ต่างกันแก่ผู้ใช้แต่มีส่วน โครงสร้างและความลื่นไหลเดียวกันสำหรับการสนทนาของคุณในแพลตฟอร์มต่างๆ สำหรับ เช่น การดำเนินการเกี่ยวกับสภาพอากาศอาจแสดงการ์ดที่มีรูปภาพบนโทรศัพท์ และ เปิดไฟล์เสียงใน Google Home แต่กระบวนการสนทนาจะเหมือนกัน ในแพลตฟอร์มต่างๆ
การโยงหัวข้อการสนทนา - นำเสนอผู้ใช้ด้วยรูปแบบที่แตกต่างกันโดยสิ้นเชิง การสนทนาในแต่ละแพลตฟอร์ม เช่น หากจะสร้างการสั่งอาหาร คุณอาจต้องการแสดงขั้นตอนการเรียงลำดับใหม่ใน Google Home แต่ ขั้นตอนการประกอบรถเข็นในโทรศัพท์มือถือ ในการแตกกิ่งการสนทนา ขอบเขต การทริกเกอร์ Intent ใน Dialogflow ไปยังความสามารถบางอย่างในแพลตฟอร์มด้วย Dialogflow บริบทเหล่านี้ ระบบจะไม่ทริกเกอร์ Intent ของ Dialogflow จริง เว้นแต่จะมี ของแพลตฟอร์มนั้นๆ พึงพอใจ
การสนทนาแบบหลายแพลตฟอร์ม - นำเสนอการสนทนาแก่ผู้ใช้ เปลี่ยนไปยังอีกพื้นผิวหนึ่งระหว่างการสนทนา ตัวอย่างเช่น หาก ผู้ใช้เรียกใช้การดำเนินการของคุณด้วยรูปภาพบนแพลตฟอร์มที่มีเฉพาะเสียงเท่านั้น เช่น Google หน้าแรก คุณสามารถสร้าง Action เพื่อมองหาพื้นที่อื่นแบบมีภาพประกอบได้ ความสามารถและย้ายการสนทนา ไปที่นั่นหากเป็นไปได้
การแตกย่อยของคำตอบ
ทุกครั้งที่การดำเนินการตามคำสั่งซื้อได้รับคำขอจาก Google Assistant คุณจะ ค้นหาแพลตฟอร์มต่อไปนี้ได้ (เช่น Google Home หรือโทรศัพท์ Android) ความสามารถ:
const hasScreen =
conv.surface.capabilities.has('actions.capability.SCREEN_OUTPUT');
// OR conv.screen;
const hasAudio =
conv.surface.capabilities.has('actions.capability.AUDIO_OUTPUT');
const hasMediaPlayback =
conv.surface.capabilities.has('actions.capability.MEDIA_RESPONSE_AUDIO');
const hasWebBrowser =
conv.surface.capabilities.has('actions.capability.WEB_BROWSER');
// Interactive Canvas must be enabled in your project to see this
const hasInteractiveCanvas =
conv.surface.capabilities.has('actions.capability.INTERACTIVE_CANVAS');
boolean hasScreen = request.hasCapability(Capability.SCREEN_OUTPUT.getValue());
boolean hasAudio = request.hasCapability(Capability.AUDIO_OUTPUT.getValue());
boolean hasMediaPlayback = request.hasCapability(Capability.MEDIA_RESPONSE_AUDIO.getValue());
boolean hasWebBrowser = request.hasCapability(Capability.WEB_BROWSER.getValue());
// Interactive Canvas must be enabled in your project to see this
boolean hasInteractiveCanvas = request.hasCapability("INTERACTIVE_CANVAS");
const hasScreen =
conv.surface.capabilities.has('actions.capability.SCREEN_OUTPUT');
// OR conv.screen;
const hasAudio =
conv.surface.capabilities.has('actions.capability.AUDIO_OUTPUT');
const hasMediaPlayback =
conv.surface.capabilities.has('actions.capability.MEDIA_RESPONSE_AUDIO');
const hasWebBrowser =
conv.surface.capabilities.has('actions.capability.WEB_BROWSER');
// Interactive Canvas must be enabled in your project to see this
const hasInteractiveCanvas =
conv.surface.capabilities.has('actions.capability.INTERACTIVE_CANVAS');
boolean hasScreen = request.hasCapability(Capability.SCREEN_OUTPUT.getValue());
boolean hasAudio = request.hasCapability(Capability.AUDIO_OUTPUT.getValue());
boolean hasMediaPlayback = request.hasCapability(Capability.MEDIA_RESPONSE_AUDIO.getValue());
boolean hasWebBrowser = request.hasCapability(Capability.WEB_BROWSER.getValue());
// Interactive Canvas must be enabled in your project to see this
boolean hasInteractiveCanvas = request.hasCapability("INTERACTIVE_CANVAS");
โปรดทราบว่า JSON ด้านล่างอธิบายถึงคำขอเว็บฮุค
{
"responseId": "206a66fb-a572-4cfc-9e41-8e2eb62fdf18-712767ed",
"queryResult": {
"queryText": "Current capabilities",
"parameters": {},
"allRequiredParamsPresent": true,
"fulfillmentText": "Webhook failed for intent: Current Capabilities",
"fulfillmentMessages": [
{
"text": {
"text": [
"Webhook failed for intent: Current Capabilities"
]
}
}
],
"outputContexts": [
{
"name": "projects/df-surface-caps-kohler/agent/sessions/ABwppHG7pYytu-kJGJApvrFTk2iNkshy-NLsjlzJg2ntVbxZkoz-rdFch3Fd8Vmlgf0VxmNSK1woelx1otayGwCnE8gzAQ/contexts/actions_capability_media_response_audio"
},
{
"name": "projects/df-surface-caps-kohler/agent/sessions/ABwppHG7pYytu-kJGJApvrFTk2iNkshy-NLsjlzJg2ntVbxZkoz-rdFch3Fd8Vmlgf0VxmNSK1woelx1otayGwCnE8gzAQ/contexts/actions_capability_audio_output"
},
{
"name": "projects/df-surface-caps-kohler/agent/sessions/ABwppHG7pYytu-kJGJApvrFTk2iNkshy-NLsjlzJg2ntVbxZkoz-rdFch3Fd8Vmlgf0VxmNSK1woelx1otayGwCnE8gzAQ/contexts/actions_capability_account_linking"
},
{
"name": "projects/df-surface-caps-kohler/agent/sessions/ABwppHG7pYytu-kJGJApvrFTk2iNkshy-NLsjlzJg2ntVbxZkoz-rdFch3Fd8Vmlgf0VxmNSK1woelx1otayGwCnE8gzAQ/contexts/actions_capability_web_browser"
},
{
"name": "projects/df-surface-caps-kohler/agent/sessions/ABwppHG7pYytu-kJGJApvrFTk2iNkshy-NLsjlzJg2ntVbxZkoz-rdFch3Fd8Vmlgf0VxmNSK1woelx1otayGwCnE8gzAQ/contexts/actions_capability_screen_output"
},
{
"name": "projects/df-surface-caps-kohler/agent/sessions/ABwppHG7pYytu-kJGJApvrFTk2iNkshy-NLsjlzJg2ntVbxZkoz-rdFch3Fd8Vmlgf0VxmNSK1woelx1otayGwCnE8gzAQ/contexts/google_assistant_input_type_touch"
}
],
"intent": {
"name": "projects/df-surface-caps-kohler/agent/intents/4e191eef-ba17-4f68-8a97-85a43cbc9ed1",
"displayName": "Current Capabilities"
},
"intentDetectionConfidence": 1,
"languageCode": "en"
},
"originalDetectIntentRequest": {
"source": "google",
"version": "2",
"payload": {
"user": {
"locale": "en-US",
"userVerificationStatus": "VERIFIED"
},
"conversation": {
"conversationId": "ABwppHG7pYytu-kJGJApvrFTk2iNkshy-NLsjlzJg2ntVbxZkoz-rdFch3Fd8Vmlgf0VxmNSK1woelx1otayGwCnE8gzAQ",
"type": "ACTIVE",
"conversationToken": "[]"
},
"inputs": [
{
"intent": "actions.intent.TEXT",
"rawInputs": [
{
"inputType": "TOUCH",
"query": "Current capabilities"
}
],
"arguments": [
{
"name": "text",
"rawText": "Current capabilities",
"textValue": "Current capabilities"
}
]
}
],
"surface": {
"capabilities": [
{
"name": "actions.capability.MEDIA_RESPONSE_AUDIO"
},
{
"name": "actions.capability.AUDIO_OUTPUT"
},
{
"name": "actions.capability.ACCOUNT_LINKING"
},
{
"name": "actions.capability.WEB_BROWSER"
},
{
"name": "actions.capability.SCREEN_OUTPUT"
}
]
},
"availableSurfaces": [
{
"capabilities": [
{
"name": "actions.capability.AUDIO_OUTPUT"
},
{
"name": "actions.capability.SCREEN_OUTPUT"
},
{
"name": "actions.capability.WEB_BROWSER"
}
]
}
]
}
},
"session": "projects/df-surface-caps-kohler/agent/sessions/ABwppHG7pYytu-kJGJApvrFTk2iNkshy-NLsjlzJg2ntVbxZkoz-rdFch3Fd8Vmlgf0VxmNSK1woelx1otayGwCnE8gzAQ"
}
โปรดทราบว่า JSON ด้านล่างอธิบายถึงคำขอเว็บฮุค
{
"user": {
"locale": "en-US",
"userVerificationStatus": "VERIFIED"
},
"conversation": {
"conversationId": "ABwppHENuB8dw7LgVquXnW5Bmy9hwu1Qz4bsaL7uIb9vDSBYPAFhFgsMWnMV6m4JEDgaUWz9FUVuIhQqWh1KZ_jjTwKEIlza",
"type": "NEW"
},
"inputs": [
{
"intent": "actions.intent.TEXT",
"rawInputs": [
{
"inputType": "TOUCH",
"query": "Current capabilities"
}
],
"arguments": [
{
"name": "text",
"rawText": "Current capabilities",
"textValue": "Current capabilities"
}
]
}
],
"surface": {
"capabilities": [
{
"name": "actions.capability.MEDIA_RESPONSE_AUDIO"
},
{
"name": "actions.capability.SCREEN_OUTPUT"
},
{
"name": "actions.capability.WEB_BROWSER"
},
{
"name": "actions.capability.ACCOUNT_LINKING"
},
{
"name": "actions.capability.AUDIO_OUTPUT"
}
]
},
"availableSurfaces": [
{
"capabilities": [
{
"name": "actions.capability.WEB_BROWSER"
},
{
"name": "actions.capability.AUDIO_OUTPUT"
},
{
"name": "actions.capability.SCREEN_OUTPUT"
}
]
}
]
}
การแตกกิ่งของการสนทนา
คุณตั้งค่า Intent ของ Dialogflow ให้ทริกเกอร์เฉพาะความสามารถบางอย่างได้ด้วย บริบทของ Dialogflow ที่กำหนดไว้ล่วงหน้า ทุกครั้งที่มีการจับคู่ความตั้งใจ Dialogflow สร้างบริบทโดยอัตโนมัติจากชุดความสามารถสำหรับแพลตฟอร์มที่อุปกรณ์ มีให้ใช้งาน คุณสามารถระบุบริบทเหล่านี้อย่างน้อย 1 รายการเป็น "บริบทอินพุต" สำหรับความตั้งใจของคุณ ซึ่งจะช่วยให้คุณกําหนดการทริกเกอร์ Intent ตามรูปแบบได้
ตัวอย่างเช่น ถ้าต้องการให้ Intent ทริกเกอร์ในอุปกรณ์ที่มีเอาต์พุตหน้าจอเท่านั้น
คุณจะกำหนดบริบทอินพุตของ Intent เป็น actions_capability_screen_output
ได้
บริบทที่นำมาใช้ได้มีดังต่อไปนี้
actions_capability_audio_output
- อุปกรณ์มีลำโพงactions_capability_screen_output
- อุปกรณ์มีหน้าจอแสดงผลเอาต์พุตactions_capability_media_response_audio
- อุปกรณ์รองรับการเล่นเนื้อหาสื่อactions_capability_web_browser
- อุปกรณ์รองรับเว็บเบราว์เซอร์ ( ปัจจุบันยังไม่พร้อมใช้งานสำหรับจออัจฉริยะ)
ต่อไปนี้คือตัวอย่าง Intent ที่จะทริกเกอร์เฉพาะบนแพลตฟอร์มที่มีหน้าจอ
การสนทนาแบบหลายแพลตฟอร์ม
คุณตรวจสอบได้ว่าผู้ใช้มีการดำเนินการอื่นๆ หรือไม่ในระหว่างการดำเนินการ ที่มีความสามารถเฉพาะได้ หากแพลตฟอร์มอื่นที่มีการขอ ที่พร้อมใช้งาน คุณจะสามารถโอน การสนทนากับแพลตฟอร์มใหม่นี้
ขั้นตอนในการถ่ายโอนพื้นผิวมีดังนี้
- ตรวจสอบว่าผู้ใช้มีแพลตฟอร์มที่พร้อมใช้งานหรือไม่
ในเครื่องจัดการเว็บฮุค คุณสอบถามว่าผู้ใช้มีแพลตฟอร์มหรือไม่ ที่พร้อมใช้งานกับความสามารถที่เฉพาะเจาะจง โปรดทราบว่าแพลตฟอร์มนี้ต้องเชื่อมโยงกับ บัญชี Google เดียวกับแพลตฟอร์มแหล่งที่มา
const screenAvailable =
conv.available.surfaces.capabilities.has(
'actions.capability.SCREEN_OUTPUT');String screen = Capability.SCREEN_OUTPUT.getValue();
boolean screenAvailable = false;
for (Surface surface : request.getAvailableSurfaces()) {
for (com.google.api.services.actions_fulfillment.v2.model.Capability capability :
surface.getCapabilities()) {
if (capability.getName().equals(screen)) {
screenAvailable = true;
break;
}
}
}const screenAvailable =
conv.available.surfaces.capabilities.has(
'actions.capability.SCREEN_OUTPUT');String screen = Capability.SCREEN_OUTPUT.getValue();
boolean screenAvailable = false;
for (Surface surface : request.getAvailableSurfaces()) {
for (com.google.api.services.actions_fulfillment.v2.model.Capability capability :
surface.getCapabilities()) {
if (capability.getName().equals(screen)) {
screenAvailable = true;
break;
}
}
}โปรดทราบว่า JSON ด้านล่างอธิบายถึงคำขอเว็บฮุค
{
"responseId": "206a66fb-a572-4cfc-9e41-8e2eb62fdf18-712767ed",
"queryResult": {
"queryText": "Current capabilities",
"parameters": {},
"allRequiredParamsPresent": true,
"fulfillmentText": "Webhook failed for intent: Current Capabilities",
"fulfillmentMessages": [
{
"text": {
"text": [
"Webhook failed for intent: Current Capabilities"
]
}
}
],
"outputContexts": [
{
"name": "projects/df-surface-caps-kohler/agent/sessions/ABwppHG7pYytu-kJGJApvrFTk2iNkshy-NLsjlzJg2ntVbxZkoz-rdFch3Fd8Vmlgf0VxmNSK1woelx1otayGwCnE8gzAQ/contexts/actions_capability_media_response_audio"
},
{
"name": "projects/df-surface-caps-kohler/agent/sessions/ABwppHG7pYytu-kJGJApvrFTk2iNkshy-NLsjlzJg2ntVbxZkoz-rdFch3Fd8Vmlgf0VxmNSK1woelx1otayGwCnE8gzAQ/contexts/actions_capability_audio_output"
},
{
"name": "projects/df-surface-caps-kohler/agent/sessions/ABwppHG7pYytu-kJGJApvrFTk2iNkshy-NLsjlzJg2ntVbxZkoz-rdFch3Fd8Vmlgf0VxmNSK1woelx1otayGwCnE8gzAQ/contexts/actions_capability_account_linking"
},
{
"name": "projects/df-surface-caps-kohler/agent/sessions/ABwppHG7pYytu-kJGJApvrFTk2iNkshy-NLsjlzJg2ntVbxZkoz-rdFch3Fd8Vmlgf0VxmNSK1woelx1otayGwCnE8gzAQ/contexts/actions_capability_web_browser"
},
{
"name": "projects/df-surface-caps-kohler/agent/sessions/ABwppHG7pYytu-kJGJApvrFTk2iNkshy-NLsjlzJg2ntVbxZkoz-rdFch3Fd8Vmlgf0VxmNSK1woelx1otayGwCnE8gzAQ/contexts/actions_capability_screen_output"
},
{
"name": "projects/df-surface-caps-kohler/agent/sessions/ABwppHG7pYytu-kJGJApvrFTk2iNkshy-NLsjlzJg2ntVbxZkoz-rdFch3Fd8Vmlgf0VxmNSK1woelx1otayGwCnE8gzAQ/contexts/google_assistant_input_type_touch"
}
],
"intent": {
"name": "projects/df-surface-caps-kohler/agent/intents/4e191eef-ba17-4f68-8a97-85a43cbc9ed1",
"displayName": "Current Capabilities"
},
"intentDetectionConfidence": 1,
"languageCode": "en"
},
"originalDetectIntentRequest": {
"source": "google",
"version": "2",
"payload": {
"user": {
"locale": "en-US",
"userVerificationStatus": "VERIFIED"
},
"conversation": {
"conversationId": "ABwppHG7pYytu-kJGJApvrFTk2iNkshy-NLsjlzJg2ntVbxZkoz-rdFch3Fd8Vmlgf0VxmNSK1woelx1otayGwCnE8gzAQ",
"type": "ACTIVE",
"conversationToken": "[]"
},
"inputs": [
{
"intent": "actions.intent.TEXT",
"rawInputs": [
{
"inputType": "TOUCH",
"query": "Current capabilities"
}
],
"arguments": [
{
"name": "text",
"rawText": "Current capabilities",
"textValue": "Current capabilities"
}
]
}
],
"surface": {
"capabilities": [
{
"name": "actions.capability.MEDIA_RESPONSE_AUDIO"
},
{
"name": "actions.capability.AUDIO_OUTPUT"
},
{
"name": "actions.capability.ACCOUNT_LINKING"
},
{
"name": "actions.capability.WEB_BROWSER"
},
{
"name": "actions.capability.SCREEN_OUTPUT"
}
]
},
"availableSurfaces": [
{
"capabilities": [
{
"name": "actions.capability.AUDIO_OUTPUT"
},
{
"name": "actions.capability.SCREEN_OUTPUT"
},
{
"name": "actions.capability.WEB_BROWSER"
}
]
}
]
}
},
"session": "projects/df-surface-caps-kohler/agent/sessions/ABwppHG7pYytu-kJGJApvrFTk2iNkshy-NLsjlzJg2ntVbxZkoz-rdFch3Fd8Vmlgf0VxmNSK1woelx1otayGwCnE8gzAQ"
}โปรดทราบว่า JSON ด้านล่างอธิบายถึงคำขอเว็บฮุค
{
"user": {
"locale": "en-US",
"userVerificationStatus": "VERIFIED"
},
"conversation": {
"conversationId": "ABwppHENuB8dw7LgVquXnW5Bmy9hwu1Qz4bsaL7uIb9vDSBYPAFhFgsMWnMV6m4JEDgaUWz9FUVuIhQqWh1KZ_jjTwKEIlza",
"type": "NEW"
},
"inputs": [
{
"intent": "actions.intent.TEXT",
"rawInputs": [
{
"inputType": "TOUCH",
"query": "Current capabilities"
}
],
"arguments": [
{
"name": "text",
"rawText": "Current capabilities",
"textValue": "Current capabilities"
}
]
}
],
"surface": {
"capabilities": [
{
"name": "actions.capability.MEDIA_RESPONSE_AUDIO"
},
{
"name": "actions.capability.SCREEN_OUTPUT"
},
{
"name": "actions.capability.WEB_BROWSER"
},
{
"name": "actions.capability.ACCOUNT_LINKING"
},
{
"name": "actions.capability.AUDIO_OUTPUT"
}
]
},
"availableSurfaces": [
{
"capabilities": [
{
"name": "actions.capability.WEB_BROWSER"
},
{
"name": "actions.capability.AUDIO_OUTPUT"
},
{
"name": "actions.capability.SCREEN_OUTPUT"
}
]
}
]
} - คำขอโอนผู้ใช้ไปยังแพลตฟอร์มใหม่
หากมีแพลตฟอร์มพร้อมความสามารถที่จำเป็น การดำเนินการของคุณจะ ต้องถามผู้ใช้ว่าต้องการโอนการสนทนาหรือไม่
if (conv.screen) {
conv.ask(`You're already on a screen device.`);
conv.ask('What else would you like to try?');
conv.ask(new Suggestions([
'Current Capabilities',
'Check Audio Capability',
'Check Screen Capability',
'Check Media Capability',
'Check Web Capability',
]));
return;
} else if (screenAvailable) {
const context =
`Let's move you to a screen device for cards and other visual responses`;
const notification = 'Try your Action here!';
const capabilities = ['actions.capability.SCREEN_OUTPUT'];
return conv.ask(new NewSurface({context, notification, capabilities}));
} else {
conv.ask('It looks like there is no screen device ' +
'associated with this user.');
conv.ask('What else would you like to try?');
conv.ask(new Suggestions([
'Current Capabilities',
'Check Audio Capability',
'Check Screen Capability',
'Check Media Capability',
'Check Web Capability',
]));
};ResponseBuilder responseBuilder = getResponseBuilder(request);
if (request.hasCapability(Capability.SCREEN_OUTPUT.getValue())) {
responseBuilder.add("You're already on a screen device");
responseBuilder.add("What else would you like to try?");
responseBuilder.addSuggestions(
new String[] {
"Transfer surface",
"Check Audio Capability",
"Check Screen Capability",
"Check Media Capability",
"Check Web Capability",
});
return responseBuilder.build();
} else if (screenAvailable) {
responseBuilder.add(
new NewSurface()
.setContext("Let's move you to a screen device for cards and other visual responses")
.setNotificationTitle("Try your Action here!")
.setCapabilities(Collections.singletonList(screen)));
return responseBuilder.build();
} else {
responseBuilder.add("It looks like there is no screen device associated with this user.");
responseBuilder.add("What else would you like to try?");
responseBuilder.addSuggestions(
new String[] {
"Transfer surface",
"Check Audio Capability",
"Check Screen Capability",
"Check Media Capability",
"Check Web Capability",
});
return responseBuilder.build();
}if (conv.screen) {
conv.ask(`You're already on a screen device.`);
conv.ask('What else would you like to try?');
conv.ask(new Suggestions([
'Transfer surface',
'Current capabilities',
]));
return;
} else if (screenAvailable) {
const context =
`Let's move you to a screen device for cards and other visual responses`;
const notification = 'Try your Action here!';
const capabilities = ['actions.capability.SCREEN_OUTPUT'];
return conv.ask(new NewSurface({context, notification, capabilities}));
} else {
conv.ask('It looks like there is no screen device ' +
'associated with this user.');
conv.ask('What else would you like to try?');
conv.ask(new Suggestions([
'Transfer surface',
'Current capabilities',
]));
};ResponseBuilder responseBuilder = getResponseBuilder(request);
if (request.hasCapability(Capability.SCREEN_OUTPUT.getValue())) {
responseBuilder.add("You're already on a screen device");
responseBuilder.add("What else would you like to try?");
responseBuilder.addSuggestions(
new String[] {
"Current capabilities", "Transfer surface",
});
return responseBuilder.build();
} else if (screenAvailable) {
responseBuilder.add(
new NewSurface()
.setContext("Let's move you to a screen device for cards and other visual responses")
.setNotificationTitle("Try your Action here!")
.setCapabilities(Collections.singletonList(screen)));
return responseBuilder.build();
} else {
responseBuilder.add("It looks like there is no screen device associated with this user.");
responseBuilder.add("What else would you like to try?");
responseBuilder.addSuggestions(
new String[] {
"Current capabilities", "Transfer surface",
});
return responseBuilder.build();
}โปรดทราบว่า JSON ด้านล่างจะอธิบายการตอบสนองของเว็บฮุค
{
"payload": {
"google": {
"expectUserResponse": true,
"systemIntent": {
"intent": "actions.intent.NEW_SURFACE",
"data": {
"@type": "type.googleapis.com/google.actions.v2.NewSurfaceValueSpec",
"capabilities": [
"actions.capability.SCREEN_OUTPUT"
],
"context": "Let's move you to a screen device for cards and other visual responses",
"notificationTitle": "Try your Action here!"
}
}
}
}
}โปรดทราบว่า JSON ด้านล่างจะอธิบายการตอบสนองของเว็บฮุค
{
"expectUserResponse": true,
"expectedInputs": [
{
"possibleIntents": [
{
"intent": "actions.intent.NEW_SURFACE",
"inputValueData": {
"@type": "type.googleapis.com/google.actions.v2.NewSurfaceValueSpec",
"capabilities": [
"actions.capability.SCREEN_OUTPUT"
],
"context": "Let's move you to a screen device for cards and other visual responses",
"notificationTitle": "Try your Action here!"
}
}
]
}
]
} - จัดการคำตอบของผู้ใช้
การดำเนินการของคุณจะเอื้อให้เกิด การส่งมอบหรือคืนการควบคุมการสนทนากลับไปยังพื้นที่เดิม ไม่ว่าคุณจะเลือกวิธีใด คำขอถัดไปที่ส่งไปยังปลายทางของคุณจะมี
actions.intent.NEW_SURFACE
ดังนั้นคุณควรสร้าง Intent ที่ทริกเกอร์เหตุการณ์นั้นด้วย ตัวแฮนเดิลที่ตรงกันในเว็บฮุคของคุณ ในโค้ดของเครื่องจัดการ คุณควร ให้ตรวจสอบว่าการโอนเสร็จสมบูรณ์หรือไม่app.intent('Transfer Surface - NEW_SURFACE', (conv, input, newSurface) => {
if (newSurface.status === 'OK') {
conv.ask('Welcome to a screen device!');
conv.ask(new BasicCard({
title: `You're on a screen device!`,
text: `Screen devices support basic cards and other visual responses!`,
}));
} else {
conv.ask(`Ok, no problem.`);
}
conv.ask('What else would you like to try?');
conv.ask(new Suggestions([
'Current Capabilities',
'Check Audio Capability',
'Check Screen Capability',
'Check Media Capability',
'Check Web Capability',
]));
});@ForIntent("Transfer Surface - NEW_SURFACE")
public ActionResponse newSurface(ActionRequest request) {
ResponseBuilder responseBuilder = getResponseBuilder(request);
Map<String, Object> newSurfaceStatus = request.getArgument("NEW_SURFACE").getExtension();
if (newSurfaceStatus.get("status").equals("OK")) {
responseBuilder.add("Welcome to a screen device!");
responseBuilder.add(
new BasicCard()
.setTitle("You're on a screened device!")
.setFormattedText("Screen devices support basic cards and other visual responses!"));
} else {
responseBuilder.add("Ok, no problem.");
}
responseBuilder.add("What else would you like to try?");
responseBuilder.addSuggestions(
new String[] {
"Transfer surface",
"Check Audio Capability",
"Check Screen Capability",
"Check Media Capability",
"Check Web Capability",
});
return responseBuilder.build();
}app.intent('actions.intent.NEW_SURFACE', (conv) => {
if (conv.arguments.get('NEW_SURFACE').status === 'OK') {
conv.ask('Welcome to a screen device!');
conv.ask(new BasicCard({
title: `You're on a screen device!`,
text: `Screen devices support basic cards and other visual responses!`,
}));
} else {
conv.ask(`Ok, no problem.`);
}
conv.ask('What else would you like to try?');
conv.ask(new Suggestions([
'Transfer surface',
'Current capabilities',
]));
});@ForIntent("actions.intent.NEW_SURFACE")
public ActionResponse newSurface(ActionRequest request) {
ResponseBuilder responseBuilder = getResponseBuilder(request);
Map<String, Object> newSurfaceStatus = request.getArgument("NEW_SURFACE").getExtension();
if (newSurfaceStatus.get("status").equals("OK")) {
responseBuilder.add("Welcome to a screen device!");
responseBuilder.add(
new BasicCard()
.setTitle("You're on a screened device!")
.setFormattedText("Screen devices support basic cards and other visual responses!"));
} else {
responseBuilder.add("Ok, no problem.");
}
responseBuilder.add("What else would you like to try?");
responseBuilder.addSuggestions(
new String[] {
"Current capabilities", "Transfer surface",
});
return responseBuilder.build();
}โปรดทราบว่า JSON ด้านล่างอธิบายถึงคำขอเว็บฮุค
{
"responseId": "94b74485-cd7a-4b3b-b96a-fec15f3a496c-712767ed",
"queryResult": {
"queryText": "actions_intent_NEW_SURFACE",
"parameters": {},
"allRequiredParamsPresent": true,
"fulfillmentText": "Webhook failed for intent: Transfer Surface - NEW_SURFACE",
"fulfillmentMessages": [
{
"text": {
"text": [
"Webhook failed for intent: Transfer Surface - NEW_SURFACE"
]
}
}
],
"outputContexts": [
{
"name": "projects/df-surface-caps-kohler/agent/sessions/ABwppHEfQy-JgH7nmiW5gHWiDEyvqNRSPv9zkd3qTVF7F8G8YXJFI2_yal335Co0Z-_N5oUBTmVO_DJUlQONqd5lUgZz-Q/contexts/actions_capability_screen_output"
},
{
"name": "projects/df-surface-caps-kohler/agent/sessions/ABwppHEfQy-JgH7nmiW5gHWiDEyvqNRSPv9zkd3qTVF7F8G8YXJFI2_yal335Co0Z-_N5oUBTmVO_DJUlQONqd5lUgZz-Q/contexts/actions_capability_web_browser"
},
{
"name": "projects/df-surface-caps-kohler/agent/sessions/ABwppHEfQy-JgH7nmiW5gHWiDEyvqNRSPv9zkd3qTVF7F8G8YXJFI2_yal335Co0Z-_N5oUBTmVO_DJUlQONqd5lUgZz-Q/contexts/actions_capability_audio_output"
},
{
"name": "projects/df-surface-caps-kohler/agent/sessions/ABwppHEfQy-JgH7nmiW5gHWiDEyvqNRSPv9zkd3qTVF7F8G8YXJFI2_yal335Co0Z-_N5oUBTmVO_DJUlQONqd5lUgZz-Q/contexts/actions_capability_media_response_audio"
},
{
"name": "projects/df-surface-caps-kohler/agent/sessions/ABwppHEfQy-JgH7nmiW5gHWiDEyvqNRSPv9zkd3qTVF7F8G8YXJFI2_yal335Co0Z-_N5oUBTmVO_DJUlQONqd5lUgZz-Q/contexts/actions_capability_account_linking"
},
{
"name": "projects/df-surface-caps-kohler/agent/sessions/ABwppHEfQy-JgH7nmiW5gHWiDEyvqNRSPv9zkd3qTVF7F8G8YXJFI2_yal335Co0Z-_N5oUBTmVO_DJUlQONqd5lUgZz-Q/contexts/google_assistant_input_type_voice"
},
{
"name": "projects/df-surface-caps-kohler/agent/sessions/ABwppHEfQy-JgH7nmiW5gHWiDEyvqNRSPv9zkd3qTVF7F8G8YXJFI2_yal335Co0Z-_N5oUBTmVO_DJUlQONqd5lUgZz-Q/contexts/actions_intent_new_surface",
"parameters": {
"NEW_SURFACE": {
"@type": "type.googleapis.com/google.actions.v2.NewSurfaceValue",
"status": "OK"
},
"text": ""
}
}
],
"intent": {
"name": "projects/df-surface-caps-kohler/agent/intents/9db3798d-bdac-4dc8-a8e7-52349a3af0e8",
"displayName": "Transfer Surface - NEW_SURFACE"
},
"intentDetectionConfidence": 1,
"languageCode": "en"
},
"originalDetectIntentRequest": {
"source": "google",
"version": "2",
"payload": {
"user": {
"locale": "en-US",
"userVerificationStatus": "VERIFIED"
},
"conversation": {
"conversationId": "ABwppHEfQy-JgH7nmiW5gHWiDEyvqNRSPv9zkd3qTVF7F8G8YXJFI2_yal335Co0Z-_N5oUBTmVO_DJUlQONqd5lUgZz-Q",
"type": "ACTIVE",
"conversationToken": "[]"
},
"inputs": [
{
"intent": "actions.intent.NEW_SURFACE",
"rawInputs": [
{
"inputType": "VOICE"
}
],
"arguments": [
{
"name": "NEW_SURFACE",
"extension": {
"@type": "type.googleapis.com/google.actions.v2.NewSurfaceValue",
"status": "OK"
}
},
{
"name": "text"
}
]
}
],
"surface": {
"capabilities": [
{
"name": "actions.capability.SCREEN_OUTPUT"
},
{
"name": "actions.capability.WEB_BROWSER"
},
{
"name": "actions.capability.AUDIO_OUTPUT"
},
{
"name": "actions.capability.MEDIA_RESPONSE_AUDIO"
},
{
"name": "actions.capability.ACCOUNT_LINKING"
}
]
},
"availableSurfaces": [
{
"capabilities": [
{
"name": "actions.capability.SCREEN_OUTPUT"
},
{
"name": "actions.capability.WEB_BROWSER"
},
{
"name": "actions.capability.AUDIO_OUTPUT"
}
]
}
]
}
},
"session": "projects/df-surface-caps-kohler/agent/sessions/ABwppHEfQy-JgH7nmiW5gHWiDEyvqNRSPv9zkd3qTVF7F8G8YXJFI2_yal335Co0Z-_N5oUBTmVO_DJUlQONqd5lUgZz-Q"
}โปรดทราบว่า JSON ด้านล่างอธิบายถึงคำขอเว็บฮุค
{
"user": {
"locale": "en-US",
"userVerificationStatus": "VERIFIED"
},
"conversation": {
"conversationId": "ABwppHENAOzBH5swn9iKb5QgUliTw4JLu5f86gS373tGtNvYcz1C3qHdorjcIb77o_PUleXGzIEFdPsl3-kmIAARvx67A7Ym",
"type": "NEW"
},
"inputs": [
{
"intent": "actions.intent.NEW_SURFACE",
"rawInputs": [
{
"inputType": "VOICE"
}
],
"arguments": [
{
"name": "NEW_SURFACE",
"extension": {
"@type": "type.googleapis.com/google.actions.v2.NewSurfaceValue",
"status": "OK"
}
},
{
"name": "text"
}
]
}
],
"surface": {
"capabilities": [
{
"name": "actions.capability.SCREEN_OUTPUT"
},
{
"name": "actions.capability.ACCOUNT_LINKING"
},
{
"name": "actions.capability.MEDIA_RESPONSE_AUDIO"
},
{
"name": "actions.capability.AUDIO_OUTPUT"
},
{
"name": "actions.capability.WEB_BROWSER"
}
]
},
"availableSurfaces": [
{
"capabilities": [
{
"name": "actions.capability.WEB_BROWSER"
},
{
"name": "actions.capability.AUDIO_OUTPUT"
},
{
"name": "actions.capability.SCREEN_OUTPUT"
}
]
}
]
}