وقتی کاربران با Google Assistant تعامل میکنند تا وضعیت فعلی دستگاهی را پُرسمان کنند، اجرای شما قصد action.devices.QUERY را که حاوی فهرستی از شناسههای دستگاه است (همانطور که در پاسخ SYNC شما ارائه شده است) دریافت میکند.
وقتی کاربران برای کنترل دستگاهتان به Assistant فرمان ارسال میکنند،
تحقق شما قصد
action.devices.EXECUTE را دریافت میکند.
مدیریت کردن QUERY هدف
پاسخ QUERY شما شامل مجموعه کاملی از حالتها برای هریک از ویژگیهای
پشتیبانیشده توسط دستگاههای درخواستشده است.
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "inputs": [{ "intent": "action.devices.QUERY", "payload": { "devices": [{ "id": "123", "customData": { "fooValue": 74, "barValue": true, "bazValue": "foo" } }, { "id": "456", "customData": { "fooValue": 12, "barValue": false, "bazValue": "bar" } }] } }] }
JSON
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "payload": { "devices": { "123": { "on": true, "online": true, "status": "SUCCESS" }, "456": { "on": true, "online": true, "status": "SUCCESS", "brightness": 80, "color": { "name": "cerulean", "spectrumRGB": 31655 } } } } }
Node.js
const {smarthome} = require('actions-on-google'); const app = smarthome(); // ... app.onQuery((body, headers) => { // TODO Get device state return { requestId: body.requestId, payload: { devices: { 123: { on: true, online: true, status: "SUCCESS" }, 456: { on: true, online: true, status: "SUCCESS", brightness: 80, color: { name: "cerulean", spectrumRGB: 31655 } } } } }; });
جاوا
@NotNull @Override public QueryResponse onQuery(@NotNull QueryRequest queryRequest, @Nullable Map<?, ?> map) { QueryResponse.Payload payload = new QueryResponse.Payload(); payload.setDevices( new HashMap<String, Map<String, Object>>() { { put( "123", new HashMap<String, Object>() { { put("on", true); put("online", true); put("status", "SUCCESS"); } }); put( "456", new HashMap<String, Object>() { { put("on", true); put("online", true); put("status", "SUCCESS"); put("brightness", 80); put( "color", new HashMap<String, Object>() { { put("name", "cerulean"); put("spectrumRGB", 31655); } }); } }); } }); return new QueryResponse(queryRequest.getRequestId(), payload); }
برای اطلاعات بیشتر، به سند مرجع هدف QUERY مراجعه کنید.
رسیدگی به EXECUTE هدف
مشابه QUERY، یک هدف میتواند چندین شناسه دستگاه را هدفیابی کند. یک
EXECUTE قصد ممکن است شامل چندین فرمان متمایز باشد که به گروهی
از دستگاهها داده شده است. برای مثال، یک قصد راهاندازیشده ممکن است هم روشنایی و هم رنگ را
روی گروهی از چراغها تنظیم کند، یا چندین چراغ را هرکدام روی رنگ متفاوتی تنظیم کند. پاسخ
EXECUTE شما باید وضعیت جدید دستگاه را پساز
اجرا برگرداند.
وقتی وضعیت دستگاه کاربر تغییر میکند،
از Report State استفاده کنید. برای مثال، بهدلیل EXECUTE
قصد یا تغییر وضعیت محلی (مثل زدن دستی کلید چراغ).
این کار Google Home Graph را با سرویس ابری شما همگامسازی میکند.
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "inputs": [{ "intent": "action.devices.EXECUTE", "payload": { "commands": [{ "devices": [{ "id": "123", "customData": { "fooValue": 74, "barValue": true, "bazValue": "sheepdip" } }, { "id": "456", "customData": { "fooValue": 36, "barValue": false, "bazValue": "moarsheep" } }], "execution": [{ "command": "action.devices.commands.OnOff", "params": { "on": true } }] }] } }] }
JSON
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "payload": { "commands": [ { "ids": [ "123" ], "status": "SUCCESS", "states": { "on": true, "online": true } }, { "ids": [ "456" ], "status": "ERROR", "errorCode": "deviceTurnedOff" } ] } }
Node.js
const {smarthome} = require('actions-on-google'); const app = smarthome(); // ... app.onExecute((body, headers) => { // TODO Send command to device return { requestId: body.requestId, payload: { commands: [{ ids: ["123"], status: "SUCCESS", states: { on: true, online: true } }, { ids: ["456"], status: "ERROR", errorCode: "deviceTurnedOff" }] } }; });
جاوا
@NotNull @Override public ExecuteResponse onExecute( @NotNull ExecuteRequest executeRequest, @Nullable Map<?, ?> map) { ExecuteResponse.Payload payload = new ExecuteResponse.Payload(); payload.setCommands( new Commands[] { new Commands( new String[] {"123"}, "SUCCESS", new HashMap<String, Object>() { { put("on", true); put("online", true); } }, null, null), new Commands(new String[] {"456"}, "ERROR", null, "deviceTurnedOff", null) }); return new ExecuteResponse(executeRequest.getRequestId(), payload); }
برای اطلاعات بیشتر، به سند مرجع هدف EXECUTE مراجعه کنید.
پاسخهای وضعیت
پاسخهای QUERY و EXECUTE شما شامل فیلد status برای گزارش نتیجه درخواست است. هر پاسخ وضعیت میتواند یکی از مقادیر زیر را ارائه دهد:
-
SUCCESS: درخواست با موفقیت انجام شد. -
OFFLINE: دستگاه هدف آفلاین است یا به هر دلیل دیگری دردسترس نیست. -
EXCEPTIONS: مشکل یا هشداری دررابطهبا درخواست وجود دارد. ERROR: درخواست باerrorCodeمربوطه ناموفق بود.
برای ERROR و EXCEPTIONS، به
رسیدگی به خطاها و استثناها و
خطاها و استثناها برای جزئیات بیشتر
مراجعه کنید.