وقتی کاربران با 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 } } } } }; });
Java
@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" }] } }; });
Java
@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، برای جزئیات بیشتر،
مدیریت خطاها و استثناها و
خطاها و استثناها را ببینید.