Server Code を実行するトリガー
Server Code を自動実行する場合、実行する Server Code と実行条件をトリガーに設定します。
Server Code が実行された後、その実行結果(エラーの有無や戻り値)を取得することもできます。
トリガーの定義
トリガーの定義は、以下のフィールドを使ってリクエストボディーに記述します。
フィールド | 必須項目か? | 説明 |
---|---|---|
triggersWhat |
◯ | トリガーが実行する対象。Server Code を実行する場合は "SERVER_CODE" を指定します。 |
predicate |
◯ | トリガー実行条件。定義方法については トリガーの実行条件 を参照してください。 |
serverCode |
◯ | トリガー実行条件が満たされた際に実行する Server Code。定義方法については Server Code の定義 を参照してください。 |
title |
トリガーのタイトル(最大 50 文字まで) | |
description |
トリガーの説明(最大 200 文字まで) | |
metadata |
トリガーのメタデータ(JSONObject 形式) |
Server Code の定義
トリガーの定義の serverCode
フィールドは、その直下の階層にさらに以下の情報を定義します。
フィールド | 必須項目か? | 説明 |
---|---|---|
endpoint |
◯ | 呼び出す Server Code のエンドポイント名 |
parameters |
エンドポイントへのパラメータ | |
tartgetAppID |
呼び出す Server Code がトリガーが設定されたアプリケーションと異なる場合、このアプリケーションの AppID | |
executorAccessToken |
Server Code の実行元ユーザーを表すアクセストークン(targetAppID を指定した場合は必須) |
トリガーの登録に成功すると、Thing Interaction Framework は triggerID を払い出します。triggerID は次のように 201 応答として返されます。
HTTP/1.1 201 Created
Content-Type: application/json
{
"triggerID": "{TRIGGER_ID}"
}
ステート条件のトリガーの登録
Server Code を自動実行するトリガーの登録例を以下に挙げます。
curl -v -X POST \
-H "Authorization: Bearer {ACCESS_TOKEN}" \
-H "X-Kii-AppID: {APP_ID}" \
-H "X-Kii-AppKey: {APP_KEY}" \
-H "Content-Type: application/json" \
"https://api-jp.kii.com/thing-if/apps/{APP_ID}/targets/thing:{THING_ID}/triggers" \
-d '{
"triggersWhat": "SERVER_CODE",
"predicate": {
"eventSource": "STATES",
"condition": {"type": "eq", "field": "power", "value": true},
"triggersWhen": "CONDITION_CHANGED"
},
"serverCode" : {
"endpoint" : "saveColor",
"parameters" : {
"brightness" : 100,
"color" : "#FFF"
},
"executorAccessToken" : "_kuslkq71LdiHcR0Ez91uIT2N-fUBRst3vMnWE3Ge8o"
},
"title": "Example #2",
"description": "Execute the server code when the state condition is met",
"metadata": {
"color": "red",
"hex": "#333"
}
}'
Thing オーナーのアクセストークンを指定してください。また {THING_ID}
を対象となる Thing の thingID に差し替えてください。
Server Code の実行結果の取得
トリガーによって Server Code の自動実行を設定し、ステートの更新によって実際に Server Code が実行された場合、その実行結果を REST API で取得できます。
実行結果を取得する例を以下に挙げます。
curl -v -X GET \
-H "Authorization: Bearer {ACCESS_TOKEN}" \
-H "X-Kii-AppID: {APP_ID}" \
-H "X-Kii-AppKey: {APP_KEY}" \
"https://api-jp.kii.com/thing-if/apps/{APP_ID}/targets/thing:{THING_ID}/triggers/{TRIGGER_ID}/results/server-code"
Thing または Thing オーナーのアクセストークンを指定してください。
{THING_ID}
を、対象となる Thing の thingID に差し替えてください。また、{TRIGGER_ID}
をトリガーの登録時に REST の戻り値で取得できたトリガー ID に差し替えてください。
指定したトリガーに対する Server Code の実行結果一覧は、以下のように 200 応答として返されます。
HTTP/1.1 200 OK
Content-Type: application/json
{
"triggerServerCodeResults" : [ {
"succeeded" : true,
"returnedValue" : "1456801769894",
"executedAt" : 1456801769904
}, {
"succeeded" : true,
"returnedValue" : "1456801784981",
"executedAt" : 1456801784987
}, {
"succeeded" : false,
"executedAt" : 1456802646413,
"error" : {
"errorMessage" : "Error found while executing the developer-defined code",
"details" : {
"errorCode" : "RUNTIME_ERROR",
"message" : "Error in Server Code"
}
}
} ],
"nextPaginationKey" : "200/1"
}
Server Code の実行が成功したかどうかが succeeded
で取得できます。成功時はエンドポイントの戻り値と実行日時(UTC、ミリ秒)が得られます。失敗時は実行日時とエラーの詳細情報が得られます。
トリガー一覧の取得 時と同様に、以下のように GET コマンドのパラメータとして "paginationKey" によるページネーションと、bestEffortLimit
による結果数の上限を指定できます。指定方法や役割は、トリガー一覧の場合と同じです。
curl -v -X GET \
-H "Authorization: Bearer {ACCESS_TOKEN}" \
-H "X-Kii-AppID: {APP_ID}" \
-H "X-Kii-AppKey: {APP_KEY}" \
"https://api-jp.kii.com/thing-if/apps/{APP_ID}/targets/thing:{THING_ID}/triggers/{TRIGGER_ID}/results/server-code?paginationKey=XXXYYY&bestEffortLimit=100"