ユーザーが Google Assistant to query the current
state of a device, your fulfillment receives an
action.devices.QUERY
intent containing a
list of device IDs (as provided by your SYNC
response).
Your fulfillment receives an
action.devices.EXECUTE
intent
when users send commands to Assistant to control your
device. を操作したとき
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 }, "456": { "on": true, "online": true, "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 }, 456: { on: true, online: true, 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( "456", new HashMap<String, Object>() { { put("on", true); put("online", true); put("brightness", 80); put( "color", new HashMap<String, Object>() { { put("name", "cerulean"); put("spectrumRGB", 31655); } }); } }); } }); return new QueryResponse(queryRequest.getRequestId(), payload); }
詳細については、QUERY
インテントのリファレンス ドキュメントをご覧ください。
EXECUTE
インテントを処理する
QUERY
と同様に、1 つのインテントに複数のデバイス ID をターゲットにすることができます。1 つの EXECUTE
インテントに、デバイスのグループに与えられた複数の個別のコマンドを含めることもできます。たとえば、トリガーされたインテントでは、ライトのグループに対して明るさと色の両方を設定し、複数のライトをそれぞれ別の色に設定できます。EXECUTE
レスポンスは、実行後にデバイスの新しい状態を返します。
ユーザーのデバイスの状態が変更された場合は、Report State を使用します。たとえば、EXECUTE
インテントやローカル状態の変化(照明スイッチの手動切り替えなど)が原因です。これにより、Google Home Graph synchronized with your cloud service.を維持できます
{ "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
について、エラーと例外を処理するとエラーと例外をご覧ください。