...
Connection HTTP Interface via http://www.example.org/api/connection/journey.
REST HTTP Interface via http://www.example.org/api/v2/journey.
SCHEMA
Name | Type | Description |
---|---|---|
_id | Mongo ID | The id of this journey (autogenerated) |
organisation | Organisation Mongo ID | The id of the organisation this journey belongs to (autogenerated) |
owner | User Mongo ID | The id of the user who created this journey (autogenerated) |
createdAt | Timestamp | When this journey was created (autogenerated) |
updatedAt | Timestamp | When this journey was last updated (autogenerated) |
description | String | The name of the journey |
isActive | Boolean | If this journey is active |
sources | Array [Store Mongo IDs] | An array of stores that this journey applies to |
waypoints | Array [Waypoints] | An array of waypoints for this journey. See waypoints |
outcomes | Array [Outcomes] | An array of outcomes for this journey |
isSequential | Boolean | If this journey is sequential |
isRepeatable | Boolean | If this journey is repeatable |
trackBy | String | Only |
recalculateStatus | JSON {Recalculate Status} | Progress in calculating this journey |
isPublic | Boolean | If false then this visualisation is only available to the owner and users with org/all/journey/view scope, otherwise it’s available to everyone in the organisation with permission |
queryHint | String | Specifies a Mongo collection index to use instead of the chosen index selected during the query planner stage, e.g. |
WAYPOINTS
An array of points with properties:
Name | Type | Description |
---|---|---|
_id | Mongo ID | the id of this waypoint (autogenerated) |
description | String | Name of this waypoint |
isActive | Boolean | If this waypoint is active. Inactive waypoints will not be processed by the journey handler |
conditions | String | A stringified JSON mongo query of when this waypoint has been reached. |
count | Number | The number of times that the condition must be met |
order | Number | The order of this waypoint in the journey |
OUTCOMES
An array of outcomes with properties:
Name | Type | Description |
---|---|---|
description | String | The name of this outcome. |
isActive | Boolean | If this outcome is active. |
type | String | Only |
callback | String (URL) | URL to POST completion data on a journey being completed. See callback example |
tripCount | Number | Load control counter. The variable MAX_TRIP_COUNT in .env is responsible for this counter. |
deactivatedAt | Date | Deactivation date if tripCount has peaked. |
CALLBACK EXAMPLE
When a persona/actor completes a journey, the callback url will receive a POST with JSON body. Example body:
Code Block |
---|
{ "owner":{ "trackBy":"actor", "ident":{ "account":{ "homePage":"http://www.dave.com", "name":"Dave" }, "objectType":"Agent" } }, "attempt":{ "waypoints":[ { "completedAt":"2017-09-20T09:56:02.443Z", "isCompleted":true, "statements":[ { "timestamp":"2017-09-20T09:56:02.443Z", "statement":"59c23b32d138e44d720041a9" } ], "order":1, "waypoint":"59c237bebdf9ac67b2ab5ee9", "statement":[ { "_id":"59c23b32d138e44d720041a9", "lrs":{ "_id":"5943782ac3f34065c7b4132a" }, "lrs_id":"5943782ac3f34065c7b4132a", "organisation":"59198183d8ea540933227033", "client":"592433ebce79a40338e0d8c4", "client_id":"592433ebce79a40338e0d8c4", "statement":{ "id":"346cb0a8-368c-4f29-a4f8-ec3565f7a75a", "timestamp":"2017-09-20T09:56:02.443600+00:00", "stored":"2017-09-20T09:56:02.443600+00:00", "authority":{ "name":"New Client", "mbox":"mailto:hello@learninglocker.net", "objectType":"Agent" }, "object":{ "id":"https://acorncorp.com/training/Introduction", "definition":{ "name":{ "en-GB":"Introduction" }, "type":"http://adlnet.gov/expapi/activities/course" }, "objectType":"Activity" }, "verb":{ "id":"http://adlnet.gov/expapi/verbs/completed", "display":{ "en-GB":"completed" } }, "result":{ "score":{ "min":0, "max":100, "raw":67, "scaled":0.67 } }, "actor":{ "account":{ "homePage":"http://www.dave.com", "name":"Dave20" }, "objectType":"Agent" }, "version":"1.0.0" }, "active":true, "voided":false, "timestamp":"2017-09-20T09:56:02.443Z", "stored":"2017-09-20T09:56:02.443Z", "personaIdentifier":"59c23b27f6463f3569446bc5", "completedForwardingQueue":[ ], "pendingForwardingQueue":[ ], "failedForwardingLog":[ ], "deadForwardingQueue":[ ], "processingQueues":[ "STATEMENT_PERSON_QUEUE", "STATEMENT_FORWARDING_QUEUE", "STATEMENT_JOURNEY_QUEUE" ], "completedQueues":[ "STATEMENT_QUERYBUILDERCACHE_QUEUE" ], "person":{ "display":"Dave20 - http://www.dave.com (xAPI Account)", "_id":"59c23b2753631c67de0cd5b9" } } ] }, { "completedAt":"2017-09-20T09:55:53.799Z", "isCompleted":true, "statements":[ { "statement":"59c23b26d138e44a720041ad", "timestamp":"2017-09-20T09:55:50.310Z" }, { "timestamp":"2017-09-20T09:55:51.192Z", "statement":"59c23b27d138e44a720041ae" }, { "statement":"59c23b28d138e44a720041af", "timestamp":"2017-09-20T09:55:52.313Z" }, { "timestamp":"2017-09-20T09:55:52.880Z", "statement":"59c23b28d138e44a720041b0" }, { "statement":"59c23b29d138e44a720041b1", "timestamp":"2017-09-20T09:55:53.799Z" } ], "order":0, "waypoint":"59c237bebdf9ac67b2ab5eea", "statement":[ { "_id":"59c23b26d138e44a720041ad", "lrs":{ "_id":"5943782ac3f34065c7b4132a" }, "lrs_id":"5943782ac3f34065c7b4132a", "organisation":"59198183d8ea540933227033", "client":"592433ebce79a40338e0d8c4", "client_id":"592433ebce79a40338e0d8c4", "statement":{ "id":"d0d27c01-2185-4f81-81c2-99af3326b86b", "timestamp":"2017-09-20T09:55:50.310800+00:00", "stored":"2017-09-20T09:55:50.310800+00:00", "authority":{ "name":"New Client", "mbox":"mailto:hello@learninglocker.net", "objectType":"Agent" }, "object":{ "id":"https://acorncorp.com/training/Introduction", "definition":{ "name":{ "en-GB":"Introduction" }, "type":"http://adlnet.gov/expapi/activities/course" }, "objectType":"Activity" }, "verb":{ "id":"http://adlnet.gov/expapi/verbs/commented", "display":{ "en-GB":"commented" } }, "result":{ "score":{ "min":0, "max":100, "raw":67, "scaled":0.67 } }, "actor":{ "account":{ "homePage":"http://www.dave.com", "name":"Dave20" }, "objectType":"Agent" }, "version":"1.0.0" }, "active":true, "voided":false, "timestamp":"2017-09-20T09:55:50.310Z", "stored":"2017-09-20T09:55:50.310Z", "personaIdentifier":"59c23b27f6463f3569446bc5", "completedForwardingQueue":[ ], "pendingForwardingQueue":[ "59a8005292303c1af05ec970" ], "failedForwardingLog":[ { "message":"Error: Status code didn't return 200", "statementForwarding_id":"59a8005292303c1af05ec970", "timestamp":"2017-09-20T09:55:52.877Z", "_id":"59c23b2853631c67de0cd5d4" } ], "deadForwardingQueue":[ ], "processingQueues":[ ], "completedQueues":[ "STATEMENT_QUERYBUILDERCACHE_QUEUE", "STATEMENT_PERSON_QUEUE", "STATEMENT_JOURNEY_QUEUE", "STATEMENT_FORWARDING_QUEUE" ], "person":{ "_id":"59c23b2753631c67de0cd5b9", "display":"Dave20 - http://www.dave.com (xAPI Account)" } }, { "_id":"59c23b27d138e44a720041ae", "lrs":{ "_id":"5943782ac3f34065c7b4132a" }, "lrs_id":"5943782ac3f34065c7b4132a", "organisation":"59198183d8ea540933227033", "client":"592433ebce79a40338e0d8c4", "client_id":"592433ebce79a40338e0d8c4", "statement":{ "id":"e26db41d-e165-4b0f-bf83-7ffde3e7dd5a", "timestamp":"2017-09-20T09:55:51.192200+00:00", "stored":"2017-09-20T09:55:51.192200+00:00", "authority":{ "name":"New Client", "mbox":"mailto:hello@learninglocker.net", "objectType":"Agent" }, "object":{ "id":"https://acorncorp.com/training/Introduction", "definition":{ "name":{ "en-GB":"Introduction" }, "type":"http://adlnet.gov/expapi/activities/course" }, "objectType":"Activity" }, "verb":{ "id":"http://adlnet.gov/expapi/verbs/commented", "display":{ "en-GB":"commented" } }, "result":{ "score":{ "min":0, "max":100, "raw":67, "scaled":0.67 } }, "actor":{ "account":{ "homePage":"http://www.dave.com", "name":"Dave20" }, "objectType":"Agent" }, "version":"1.0.0" }, "active":true, "voided":false, "timestamp":"2017-09-20T09:55:51.192Z", "stored":"2017-09-20T09:55:51.192Z", "personaIdentifier":"59c23b27f6463f3569446bc5", "completedForwardingQueue":[ ], "pendingForwardingQueue":[ "59a8005292303c1af05ec970" ], "failedForwardingLog":[ { "message":"Error: Status code didn't return 200", "statementForwarding_id":"59a8005292303c1af05ec970", "timestamp":"2017-09-20T09:55:53.950Z", "_id":"59c23b2953631c67de0cd600" } ], "deadForwardingQueue":[ ], "processingQueues":[ ], "completedQueues":[ "STATEMENT_QUERYBUILDERCACHE_QUEUE", "STATEMENT_JOURNEY_QUEUE", "STATEMENT_PERSON_QUEUE", "STATEMENT_FORWARDING_QUEUE" ], "person":{ "display":"Dave20 - http://www.dave.com (xAPI Account)", "_id":"59c23b2753631c67de0cd5b9" } }, { "_id":"59c23b28d138e44a720041af", "lrs":{ "_id":"5943782ac3f34065c7b4132a" }, "lrs_id":"5943782ac3f34065c7b4132a", "organisation":"59198183d8ea540933227033", "client":"592433ebce79a40338e0d8c4", "client_id":"592433ebce79a40338e0d8c4", "statement":{ "id":"16035311-588b-4d00-8a2a-0d5675c0cc90", "timestamp":"2017-09-20T09:55:52.313800+00:00", "stored":"2017-09-20T09:55:52.313800+00:00", "authority":{ "name":"New Client", "mbox":"mailto:hello@learninglocker.net", "objectType":"Agent" }, "object":{ "id":"https://acorncorp.com/training/Introduction", "definition":{ "name":{ "en-GB":"Introduction" }, "type":"http://adlnet.gov/expapi/activities/course" }, "objectType":"Activity" }, "verb":{ "id":"http://adlnet.gov/expapi/verbs/commented", "display":{ "en-GB":"commented" } }, "result":{ "score":{ "min":0, "max":100, "raw":67, "scaled":0.67 } }, "actor":{ "account":{ "homePage":"http://www.dave.com", "name":"Dave20" }, "objectType":"Agent" }, "version":"1.0.0" }, "active":true, "voided":false, "timestamp":"2017-09-20T09:55:52.313Z", "stored":"2017-09-20T09:55:52.313Z", "personaIdentifier":"59c23b27f6463f3569446bc5", "completedForwardingQueue":[ ], "pendingForwardingQueue":[ "59a8005292303c1af05ec970" ], "failedForwardingLog":[ { "message":"Error: Status code didn't return 200", "statementForwarding_id":"59a8005292303c1af05ec970", "timestamp":"2017-09-20T09:55:55.139Z", "_id":"59c23b2b53631c67de0cd619" } ], "deadForwardingQueue":[ ], "processingQueues":[ ], "completedQueues":[ "STATEMENT_QUERYBUILDERCACHE_QUEUE", "STATEMENT_FORWARDING_QUEUE", "STATEMENT_PERSON_QUEUE", "STATEMENT_JOURNEY_QUEUE" ], "person":{ "display":"Dave20 - http://www.dave.com (xAPI Account)", "_id":"59c23b2753631c67de0cd5b9" } }, { "_id":"59c23b28d138e44a720041b0", "lrs":{ "_id":"5943782ac3f34065c7b4132a" }, "lrs_id":"5943782ac3f34065c7b4132a", "organisation":"59198183d8ea540933227033", "client":"592433ebce79a40338e0d8c4", "client_id":"592433ebce79a40338e0d8c4", "statement":{ "id":"05e8b081-ff5b-473a-96aa-a841d2823c24", "timestamp":"2017-09-20T09:55:52.880800+00:00", "stored":"2017-09-20T09:55:52.880800+00:00", "authority":{ "name":"New Client", "mbox":"mailto:hello@learninglocker.net", "objectType":"Agent" }, "object":{ "id":"https://acorncorp.com/training/Introduction", "definition":{ "name":{ "en-GB":"Introduction" }, "type":"http://adlnet.gov/expapi/activities/course" }, "objectType":"Activity" }, "verb":{ "id":"http://adlnet.gov/expapi/verbs/commented", "display":{ "en-GB":"commented" } }, "result":{ "score":{ "min":0, "max":100, "raw":67, "scaled":0.67 } }, "actor":{ "account":{ "homePage":"http://www.dave.com", "name":"Dave20" }, "objectType":"Agent" }, "version":"1.0.0" }, "active":true, "voided":false, "timestamp":"2017-09-20T09:55:52.880Z", "stored":"2017-09-20T09:55:52.880Z", "personaIdentifier":"59c23b27f6463f3569446bc5", "completedForwardingQueue":[ ], "pendingForwardingQueue":[ "59a8005292303c1af05ec970" ], "failedForwardingLog":[ { "message":"Error: Status code didn't return 200", "statementForwarding_id":"59a8005292303c1af05ec970", "timestamp":"2017-09-20T09:55:56.378Z", "_id":"59c23b2c53631c67de0cd622" } ], "deadForwardingQueue":[ ], "processingQueues":[ ], "completedQueues":[ "STATEMENT_QUERYBUILDERCACHE_QUEUE", "STATEMENT_PERSON_QUEUE", "STATEMENT_FORWARDING_QUEUE", "STATEMENT_JOURNEY_QUEUE" ], "person":{ "display":"Dave20 - http://www.dave.com (xAPI Account)", "_id":"59c23b2753631c67de0cd5b9" } }, { "_id":"59c23b29d138e44a720041b1", "lrs":{ "_id":"5943782ac3f34065c7b4132a" }, "lrs_id":"5943782ac3f34065c7b4132a", "organisation":"59198183d8ea540933227033", "client":"592433ebce79a40338e0d8c4", "client_id":"592433ebce79a40338e0d8c4", "statement":{ "id":"3cbc7fc4-a755-4eff-b2c4-a03c99f336d3", "timestamp":"2017-09-20T09:55:53.799200+00:00", "stored":"2017-09-20T09:55:53.799200+00:00", "authority":{ "name":"New Client", "mbox":"mailto:hello@learninglocker.net", "objectType":"Agent" }, "object":{ "id":"https://acorncorp.com/training/Introduction", "definition":{ "name":{ "en-GB":"Introduction" }, "type":"http://adlnet.gov/expapi/activities/course" }, "objectType":"Activity" }, "verb":{ "id":"http://adlnet.gov/expapi/verbs/commented", "display":{ "en-GB":"commented" } }, "result":{ "score":{ "min":0, "max":100, "raw":67, "scaled":0.67 } }, "actor":{ "account":{ "homePage":"http://www.dave.com", "name":"Dave20" }, "objectType":"Agent" }, "version":"1.0.0" }, "active":true, "voided":false, "timestamp":"2017-09-20T09:55:53.799Z", "stored":"2017-09-20T09:55:53.799Z", "personaIdentifier":"59c23b27f6463f3569446bc5", "completedForwardingQueue":[ ], "pendingForwardingQueue":[ "59a8005292303c1af05ec970" ], "failedForwardingLog":[ { "message":"Error: Status code didn't return 200", "statementForwarding_id":"59a8005292303c1af05ec970", "timestamp":"2017-09-20T09:55:57.674Z", "_id":"59c23b2d53631c67de0cd624" } ], "deadForwardingQueue":[ ], "processingQueues":[ ], "completedQueues":[ "STATEMENT_PERSON_QUEUE", "STATEMENT_QUERYBUILDERCACHE_QUEUE", "STATEMENT_JOURNEY_QUEUE", "STATEMENT_FORWARDING_QUEUE" ], "person":{ "display":"Dave20 - http://www.dave.com (xAPI Account)", "_id":"59c23b2753631c67de0cd5b9" } } ] } ], "completedAt":"2017-09-20T09:56:02.443Z", "isCompleted":true }, "journey":{ "_id":"59c23527bdf9ac67b2ab5ee6", "createdAt":"2017-01-01T00:00:00.000Z", "updatedAt":"2017-09-20T09:55:24.715Z", "description":"5 comments and 1 completion of a course", "owner":"59198183d8ea540933227030", "organisation":"59198183d8ea540933227033", "__v":2, "isPublic":true, "recalculateStatus":{ "remainingCount":0, "totalCount":0, "inProgress":false }, "trackBy":"actor", "isRepeatable":false, "isSequential":true, "outcomes":[ { "description":"POST to my endpoint", "callback":"https://requestb.in/t6lzcgt6", "_id":"59c237bebdf9ac67b2ab5ee8", "type":"callback", "isActive":true, "tripCount": 0, "deactivatedAt": null }, { "_id":"59c23b00bdf9ac67b2ab5eeb", "callback":"http://mockbin.org/bin/3bc290d4-9185-455f-8799-160aed03398e", "description":"Another post endpoint", "type":"callback", "isActive":true, "tripCount": 5, "deactivatedAt": null } ], "waypoints":[ { "conditions":{ "statement.verb.id":"http://adlnet.gov/expapi/verbs/commented" }, "order":0, "_id":"59c237bebdf9ac67b2ab5eea", "count":5, "isActive":true, "description":"5 comments", "id":"59c237bebdf9ac67b2ab5eea" }, { "conditions":{ "statement.verb.id":"http://adlnet.gov/expapi/verbs/completed", "statement.object.definition.type":"http://adlnet.gov/expapi/activities/course" }, "order":1, "_id":"59c237bebdf9ac67b2ab5ee9", "count":1, "isActive":true, "description":"1 course completion", "id":"59c237bebdf9ac67b2ab5ee9" } ], "sources":[ "111aaa1111a111111aa11111", "111aaa1111a111111aa11112", "5943782ac3f34065c7b4132a" ], "isActive":true }, "completedAt":"2017-09-20T09:56:02.443Z" } |
RECALCULATE STATUS
Name | Type | Description |
---|---|---|
inProgress | Boolean | Is the journey currently being recalculated |
totalCount | Number | Total number of statements to process |
remainingCount | Number | Total amount of statements left to process |
EXAMPLE POST DATA
Code Block |
---|
{ "createdAt": "2017-01-01T00:00:00Z", "updatedAt": "2017-01-02T02:00:00Z", "description": "5 comments and 1 completion of a course", "isActive": true, "sources": ["111aaa1111a111111aa11111", "111aaa1111a111111aa11112"] "waypoints": [ { "description": "5 comments" "isActive": true "conditions": "{\"statement.verb.id\": \"http://adlnet.gov/expapi/verbs/commented\"}" "count": 5 "order": 1 }, { "description": "1 course completion" "isActive": true "conditions": "{\"statement.verb.id\": \"http://adlnet.gov/expapi/verbs/completed\", \"statement.object.definition.type\": \"http://adlnet.gov/expapi/activities/course\"}" "count": 1 "order": 2 }, ], "outcomes": [ { "description": "POST to my endpoint", "isActive": true, "type": "callback", "callback": "http://example.org/myPOSTcallbackURL/", "tripCount": 0, "deactivatedAt": null } ] "isSequential": true, "isRepeatable": false, "trackBy": "actor", "isPublic": true, } |
...