In the Willo Labs Developer Key Integration guide you will need to login to Willo Labs by just providing your LMS admin email address. You will get a direct login link sent to your email, you use this link to complete login, i.e no password required.
If you get an Email address not found
notice, then please let the Aktiv Team know about this so they can add your email address. Email template:
“Please add my email address [example@mycollege.com] to the LMS Admin Email List in the Willo Labs Customer setup for my institution [Example College].”
This is something that needs to fixed by the Aktiv Team, please email them.
“The Grade Sync Mode in the Willo Labs Customer Access area for [My Institution] is showing up as LTI instead of Canvas API, please fix.”
This is due to not having setup the correct scopes in the Canvas Developer Key guide (see points, 6., 7. and 8.). Please make sure you have added every required scope.
The Aktiv app is installed as an LTI external tool. Any courses launched from LMS will thus pass the Course ID (LTI ContextID
), as well as information about the instructor or student making the launch (such as their LTI userId
and email
).
With this, Aktiv can perform a grade sync for that course for each of the students that have launched.
The settings do not require any custom permission settings other than having the Privacy
setting to Public
. See more in the Canvas LTI External Tool guide.
For Aktiv to perform gradebook syncing, we also require a Canvas Developer Key.
Aktiv Actually performs the API calls via an intermediary (Willo Labs, Inc.).
The actual ID
and Key
(i.e the credentials) of the Canvas Developer Key are not required to be shared with Aktiv or Willo Labs. The LMS Admin following the Willo Labs Developer Key Integration guide, essentially provides the developer key credentials into a client widget in which they then proceed to authorize the app to get an intial token associated with the developer key. From then on, Aktiv uses this token (and refreshed versions of it) to access the LMS.
The developer key that is created will be “scoped”, i.e it will have scoped permissions to:
API Scopes
Enforce Scopes > Courses
:
url:GET|/api/v1/courses
Enforce Scopes > Assignments
:
url:GET|/api/v1/courses/:course_id/assignments
url:GET|/api/v1/courses/:course_id/assignments/:id
url:POST|/api/v1/courses/:course_id/assignments
url:PUT|/api/v1/courses/:course_id/assignments/:id
url:DELETE|/api/v1/courses/:course_id/assignments/:id
Enforce Scopes > Submissions
:
url:PUT|/api/v1/courses/:course_id/assignments/:assignment_id/submissions/:user_id
url:GET|/api/v1/courses/:course_id/assignments/:assignment_id/submissions/:user_id
API Endpoints
GET /api/v1/courses
GET /api/v1/courses/:course_id/assignments
GET /api/v1/courses/:course_id/assignments/:id
POST /api/v1/courses/:course_id/assignments
DELETE /api/v1/courses/:course_id/assignments/:id
PUT /api/v1/courses/:course_id/assignments/:id
PUT /api/v1/courses/:course_id/assignments/:assignment_id/submissions/:user_id
GET /api/v1/courses/:course_id/assignments/:assignment_id/submissions/:user_id
We at Aktiv do not use the Canvas Developer Key directly. We do NOT actually call the Canvas API directly. We use an intermediary company called Willo Labs. Or in other words, we at Aktiv call the Willo Labs API, which they in turn, translate that to an API call to Canvas using the Canvas Developer Key.
We at Aktiv at the moment are only ever doing the following:
That being said, Willo Labs requests that we create the developer key with all the following privileges - https://help.aktiv.com/guides/lms/canvas/canvas-developer-key. Which does include the DELETE /api/v1/courses/:course_id/assignments/:id
. And they actually need this particular privilege for API token refresh/authorization!
When syncing to an LMS over LTI, in general there are two “date” concepts to understand:
The column “due_date” (WilloGradebookActivity.dueDate
): For an assignment this is the same value as the assignment due date. So we send this value when creating (syncing) the corresponding column in Canvas.
NOTE! This only applies to the Individual
column type (where the each column represents a specific assignment). We never send a column “due_date” for Summary
and Single Score
column types since there is no obvious way to determine a due date for a collection of assignments. - More info on column types.
The grade “result_date” (WilloGradebookResult.resultDate
): This is the date to assign the grade, i.e. when the grade was calculated or synced for e.g. We send this value when syncing a student grade (a cell) for a column.
For point 2, in Aktiv, one can configure how this value is chosen. This is set in the course gradebook settings. Specifically course.gradebook.resultDateSource
(or course.processGradebooks['SYNC'].resultDateSource
).
REFERENCE_DATE
: This is grade calculation date (i.e. the timestamp of the sync)DUE_DATE
: This is the same value as the assignment due date (same as point 1.)DUE_DATE_MINUS_ONE
: This is the same as (b) but minus 1 second.SOURCE_DATE
: This is the assignment created date.The default for all courses is (a) REFERENCE_DATE
, is a fresh timestamp when syncing. So each sync of the grade will get a new result date. Thus, in the LMS, the “result_date” will appear as the latest time this grade was synced, effectively.
Generally there is no restrictions or conditions defined by the LMS on this “result_date” field.
Depending on the LMS, the definition of “result_date” may vary. Generally this is assumed to mean the sync date (or grade calculation date), as defined by (a) REFERENCE_DATE
.
However, in Canvas LTI 1.3 Advantage, they define it relative to the due date (in the sense of a student submission date). Thus, if the “result_date” is later than the “due_date”, then this is marked as “late” by the Canvas:
So by using (a) REFERENCE_DATE
in this scenario, each time the grade is synced, it is overwritten with a new “result_date” (timestamp of the sync), and thus eventually this will be later than the “due_date” and thus show-up as late in Canvas.
This “late” message is something that instructors do not like as it does not reflect the reality in Aktiv (i.e. students have not submitted the assignment late), so typically they want this feature just removed from the LMS. Unfortunately it is not possible to disable this in Canvas (at time of writing).
Thus, to overcome this issue, we should just send a fixed date for all students at some point before the assignment due date. Thus guaranteeing that the “result_date” is always before the “due_date” for all students. And thus putting to bed this “late” message in Canvas.
To do this in Aktiv, one should use (d) SOURCE_DATE
, which is a fixed date, taken from the assignment created date, which will always be before the assignment due date.
Note! If you set the Canvas & LTI 1.3. Advantage for the LTI Source properties (when you created this in Admin Site LTI Source), then the Aktiv backend will automatically choose SOURCE_DATE
always (regardless of what is set for course gradebook settings).
Alternatively, you should edit the LTI source admin.aktiv.com (Admin Site) and set the LMS provider and grade sync mode, so that the Aktiv backend knows to use this SOURCE_DATE
as an override. IMPORTANT! You will then need to remove the existing grade values in Canvas, before re-syncing.
(a) If the integration was migrated to LTI 1.3. Advantage and the columns already exist in Canvas (with grade values of some date), you may have to delete the existing grade values so that the sync process can work. You see, now that the integration is Canvas LTI 1.3 Advantage, the sync process will want to sync with result_date set to SOURCE_DATE
, which may be an earlier result date that the existing result date values in Canvas. If Canvas receives a sync request with older result date values than existing ones it will reject the request. So the only way to solve this is to remove the existing grade submissions in Canvas (for the affected columns)!
(b) If the instructor had setup the columns beforehand and they have existing grade submissions, i.e. before the integration is setup to LTI 1.3 Advantage, then the same issue described above may also occur. So again it is imperative that the existing grade submissions are cleared for the Aktiv sync process to work (and for no late labels to appear).