Parameters for a Trigger-based Hook
This topic explains function parameters when an endpoint in server code is called by a trigger-based hook.
An endpoint is defined in the following way as shown in Server Code Syntax.
// Synchronous function
function funcName(params, context) {
// Your code comes here...
}
// Asynchronous function
function funcName(params, context, done) {
// Your code comes here...
}
- The function name funcName becomes an endpoint name. You will use this endpoint name to associate a server hook (server event) with the target function when you register server code with the command line tool.
The first argument params is used to get execution parameters. The information you can get with this argument depends on the type of the trigger that executes the server code.
Parameters for a bucket-related trigger and how server code can get them:
Event parameters How to get the parameter values? Scope of the bucket that triggered the execution "User scope" if params.objectScope.appIDandparams.objectScope.userIDhave values."Group scope" if params.objectScope.appIDandparams.objectScope.groupIDhave values."Thing scope" if params.objectScope.appIDandparams.objectScope.thingIDhave values."Application scope" if only params.objectScope.appIDhas a value.ID of the bucket that triggered the execution params.bucketIDID of the object that triggered the execution params.objectIDURI of the object that triggered the execution params.uriHere, you can get the information of the object that triggered the execution (i.e., the object being created, updated, or deleted). If the object is created or updated, you can get its key-value pairs by creating an object instance with its ID/URI and by refreshing it. The key-value pairs you can get is after the object creation or update (you cannot get the key-value pairs before the creation or update).
The format of the value set in the
params.uridepends on the object's scope:- Application Scope:
kiicloud://buckets/<bucketID>/objects/<objectID> - Group Scope:
kiicloud://groups/<groupID>/buckets/<bucketID>/objects/<objectID> - User Scope:
kiicloud://users/<userID>/buckets/<bucketID>/objects/<objectID> - Thing Scope:
kiicloud://things/<thingID>/buckets/<bucketID>/objects/<objectID>
- Application Scope:
Parameters for a group-related trigger and how server code can get them:
Event parameters How to get the parameter values? ID of the group that triggered the execution params.groupIDURI of the group that triggered the execution params.uriIDs of an added/removed group member that triggered the execution (reported only when the trigger was the group member addition/deletion) params.membersIDs of a member who failed be added/removed when the execution is triggered (reported only when the trigger was the group member addition/deletion) params.failedThe format of the value set in the
params.uriiskiicloud://groups/<groupID>.Parameters for a user-related trigger and how server code can get them:
Event parameters How to get the parameter values? ID of the user that triggered the execution params.userIDURI of the user that triggered the execution params.uriThe format of the value set in the
params.uriiskiicloud://users/<userID>.Parameters for a thing-related trigger and how server code can get them:
Event parameters How to get the parameter values? ID of the thing that triggered the execution params.thingIDID of the vendorThingID that triggered the execution (reported only when the trigger was the thing creation) params.vendorThingIDURI of the thing that triggered the execution params.uriID of the user added or removed from a thing owner (reported only when the trigger was the thing owner addition/removal) params.userIDID of the group added or removed from a thing owner (reported only when the trigger was the thing owner addition/removal) params.groupIDThe updated fields and their values (reported only when the trigger was the thing field updates) params.valuesA boolean value to tell if the MQTT disconnection was graceful or not. True if the disconnection was graceful. False otherwise. (reported only when the thing is disconnected) params.expectedThe format of the value set in the
params.uriiskiicloud://things/<thingID>.In the
params.values, the added/updated fields are passed in a JSON format. The deleted fields will have null in the JSON.Suppose, for example, that the following field updates were made on a thing.
- Added the field "_lot" with the value "LOT_12345".
- Updated the field "_firmwareVersion" with the value "updated_version".
- Add the custom field "custom_field_1" with the value "new_value_1".
- Updated the custom field "custom_field_2" with the value "updated_value_2".
- Remove the custom field "custom_field_3".
The
param.valueswill then have the following JSON data.{ "_lot": "LOT_12345", "_firmwareVersion": "updated_version", "custom_field_1": "new_value_1", "custom_field_2": "updated_value_2", "custom_field_3": null }Parameters for an installation-related trigger and how server code can get them:
Event parameters How to get the parameter values? ID of the user who installed/uninstalled his/her device (for FCM or APNs) params.userIDID of the thing installed/uninstalled (for MQTT) params.thingIDID of the device installation/uninstallation that triggered the execution. This is not the value of Installation Registration ID but the value of Installation ID. params.installationIDURI of the device installation/uninstallation that triggered the execution params.uriThe format of the value set in the
params.uriiskiicloud://installations/<installationID>.
The second argument context is used to get the application-related parameters.
- Use the
getAppIDmethod to get the AppID. - Use the
getAppKeymethod to get the AppKey. - Use the
getAccessTokenmethod to get the access token that was specified in the request that executed the server code. If a trigger is a bucket update, for example, you will get an access token of the user who has made an update on the bucket.- By executing the login with the access token, you can run server code on behalf of this user (See the sample code in User who manually executes server code).
- You can also use this method to determine if server code is invoked by a logged-in user or by an anonymous user. The valid access token will be returned in the former case while null will be returned in the latter case.
- Use
getAppAdminContextmethod to get the app admin context (KiiAppAdminContext). You can execute user and group operations as an app admin with this context (See the sample code in Administrator).
- Use the
The third argument done is a callback function for finishing asynchronous server code. The value passed to this callback function will be ignored. See Asynchronous execution for more details.
When server code is executed with a trigger-based hook, the return value from the server code has little meaning. The value specified in the return statement (for synchronous code) and the value passed to the done function (for asynchronous code) will be thus ignored.
Determine how an endpoint is executed
By invoking the context.isInvokedByHook(), you can check if an endpoint is executed by a trigger-based hook. This method returns true only if an endpoint is executed by a trigger-based hook.
| How an endpoint is executed | Value of context.isInvokedByHook() |
|---|---|
| Manual execution | false |
| Trigger-based hook | true |
| Schedule-based hook | false |
| Thing-IF Trigger | false |
The method is useful for returning an error when an endpoint registered in a trigger-based hook is unexpectedly executed by other means such as manual execution.
function myFunction(params, context, done) {
if (!context.isInvokedByHook()) {
done("ERROR: The endpoint can only call by server triggers.");
return;
}
// Do somethig.
done("SUCCESS");
}