Phương thức thực hiện xác định giao diện trò chuyện cho dự án Hành động của bạn để lấy hoạt động đầu vào của người dùng và logic để xử lý hoạt động đầu vào rồi cuối cùng thực hiện Hành động.
Tổng quan
Phương thức thực hiện của bạn sẽ nhận yêu cầu từ Trợ lý, xử lý yêu cầu và phản hồi. Quá trình yêu cầu và phản hồi qua lại này thúc đẩy cuộc trò chuyện tiếp tục cho đến khi bạn thực hiện xong yêu cầu ban đầu của người dùng.
Các bước sau đây mô tả cách bạn có thể tạo phương thức thực hiện bằng cách sử dụng SDK Hành động với Node.js hoặc thư viện ứng dụng Java/Kotlin:
- Khởi động đối tượng ActionsSdkApp.
- Tạo các hàm để xử lý yêu cầu trong logic thực hiện của bạn.
Tạo hộp thoại
Khởi động đối tượng ActionsSdkApp
Mã sau đây tạo thực thể cho ActionsSdkApp
và thực hiện một số quá trình thiết lập Node.js nguyên mẫu cho Google Cloud Functions:
'use strict'; const {actionssdk} = require('actions-on-google'); const functions = require('firebase-functions'); const app = actionssdk({debug: true}); app.intent('actions.intent.MAIN', (conv) => { conv.ask('Hi!'); }); // More intent handling if needed exports.myFunction = functions.https.onRequest(app);
ResponseBuilder responseBuilder = getResponseBuilder(request).add("Hi!"); return responseBuilder.build();
{ "expectUserResponse": true, "expectedInputs": [ { "inputPrompt": { "richInitialPrompt": { "items": [ { "simpleResponse": { "textToSpeech": "Hi!" } } ] } }, "possibleIntents": [ { "intent": "actions.intent.TEXT" } ] } ], "conversationToken": "{\"data\":{}}", "userStorage": "{\"data\":{}}" }
Tạo hàm để xử lý yêu cầu
Khi người dùng nói một cụm từ, bạn sẽ nhận được yêu cầu từ Trợ lý Google. Để thực hiện ý định trong yêu cầu, hãy tạo các hàm xử lý ý định được kích hoạt.
Cách xử lý yêu cầu:
Thực hiện mọi logic cần thiết để xử lý hoạt động đầu vào của người dùng.
Gọi hàm
conv.ask()
truyền phản hồi bạn muốn hiển thị dưới dạng đối số.
Mã sau đây cho biết cách tạo một phản hồi đơn giản:
conv.ask(`Hi! Say something, and I'll repeat it.`);
ResponseBuilder responseBuilder = getResponseBuilder(request).add("Hi! Say something, and I'll repeat it."); return responseBuilder.build();
{ "expectUserResponse": true, "expectedInputs": [ { "inputPrompt": { "richInitialPrompt": { "items": [ { "simpleResponse": { "textToSpeech": "Hi! Say something, and I'll repeat it." } } ] } }, "possibleIntents": [ { "intent": "actions.intent.TEXT" } ] } ], "conversationToken": "{\"data\":{}}", "userStorage": "{\"data\":{}}" }
Xử lý ý định
Sau khi bạn có tất cả hàm để xử lý các ý định được kích hoạt, hãy sử dụng app.intent
để gán trình xử lý cho các ý định.
app.intent('actions.intent.TEXT', (conv) => { // handle text intent. }); app.intent('actions.intent.MAIN', (conv) => { // handle main intent. });
@ForIntent("actions.intent.MAIN") public ActionResponse main(ActionRequest request) { // handle main intent // ... } @ForIntent("actions.intent.TEXT") public ActionResponse text(ActionRequest request) { // handle text intent // ... }
Đang kết thúc cuộc trò chuyện
Khi bạn không còn muốn nhận hoạt động đầu vào của người dùng nữa và muốn kết thúc cuộc trò chuyện, hãy gọi hàm conv.close()
.
Chức năng này yêu cầu Trợ lý Google trả lời tin nhắn văn bản cho người dùng và kết thúc cuộc trò chuyện bằng cách đóng micrô.
Xử lý ý định gọi chính
Khi người dùng kích hoạt ý định app.intent.action.MAIN
, thường thì bạn không cần phải xử lý hoạt động đầu vào của người dùng. Nếu gói hành động của bạn chứa nhiều thao tác và bao gồm nhiều trường hợp sử dụng, bạn nên định hướng người dùng bằng cách cho họ biết một vài điều họ có thể làm.
- Gọi hàm
conv.ask()
truyền phản hồi của bạn làm đối số. Trợ lý Google nói câu trả lời của bạn với người dùng, sau đó chờ người dùng kích hoạt một trong các ý định mà bạn đã chỉ định.
Đoạn mã sau đây cho biết cách xử lý một ý định chào mừng đơn giản:
// handle the initialTrigger function handleMainIntent(conv, input) { conv.ask(input); }
private ActionResponse handleMainIntent(ResponseBuilder rb, String input) { return rb.add(input).build(); }
Trạng thái cuộc trò chuyện
Nếu đang sử dụng API webhook HTTP/JSON cuộc trò chuyện, bạn có thể duy trì trạng thái của các cuộc trò chuyện bằng một đối tượng có định dạng JSON (conversationToken
) được truyền qua lại giữa bạn và Trợ lý Google. Nếu đang sử dụng thư viện ứng dụng Node.js, thì bạn có thể ghi trực tiếp vào và đọc từ trường conv.data
. Trường này được tự động chuyển qua lại giữa các yêu cầu và phản hồi.
conv.data = {something: 10}; let value = conv.data.something;
ResponseBuilder rb = getResponseBuilder(request); rb.getConversationData().put("something", 10); Object value = rb.getConversationData().get("something");