Skuid Notes. Some new template changes. Added Luminate's GAS to the repo.
This commit is contained in:
@ -3,10 +3,10 @@
|
||||
{% for course_activity in course_section.activities %}
|
||||
{% assign activities_count = activities_count | plus: 1 %}
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
|
||||
<div class="np-course-details">
|
||||
<div class="np-course-detail" id='hideable'>
|
||||
<div class="np-course-detail" id='hideable'>
|
||||
<strong>{{ activities_count }}</strong>
|
||||
<span class="np-details-label">
|
||||
{% if activities_count == 1 %}Activity{% else %}Activities{% endif %}
|
||||
@ -33,7 +33,7 @@
|
||||
{% if course.properties.np_course_rating >= i %}
|
||||
<svg width="20" height="19" viewBox="0 0 20 19" preserveAspectRatio fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M10 0L12.5863 6.44033L19.5106 6.90983L14.1846 11.3597L15.8779 18.0902L10 14.4L4.12215 18.0902L5.81535 11.3597L0.489435 6.90983L7.41374 6.44033L10 0Z" fill="#089FB7"/>
|
||||
</svg>
|
||||
</svg>
|
||||
{% else %}
|
||||
<svg width="20" height="19" viewBox="0 0 20 19" preserveAspectRatio fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path opacity="0.25" d="M10 0L12.5863 6.44033L19.5106 6.90983L14.1846 11.3597L15.8779 18.0902L10 14.4L4.12215 18.0902L5.81535 11.3597L0.489435 6.90983L7.41374 6.44033L10 0Z" fill="#089FB7"/>
|
||||
@ -59,4 +59,4 @@
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</style>
|
||||
@ -54,9 +54,9 @@
|
||||
{% include "section_tips_tricks" %}
|
||||
|
||||
{% include "section_faqs" %}
|
||||
|
||||
|
||||
</main>
|
||||
{% include "footer" %}
|
||||
<script>
|
||||
$(".np-sub-navigation-content-item-link:contains('Home')").parent().addClass("np-sub-navigation-content-item-active")
|
||||
</script>
|
||||
</script>
|
||||
@ -260,3 +260,24 @@ DONE: Move the Skuid Recipe to Skuad
|
||||
DONE: Remove Points Node from Skuad Recipe
|
||||
DONE: Register button should immediately change the property to Registered.
|
||||
DONE: Set Register button to webhook > email
|
||||
|
||||
## 08/03/2023
|
||||
|
||||
### New Structure and Metrics
|
||||
|
||||
Tony - CCO
|
||||
|
||||
Anna now reports to Matt who reports to Jackson
|
||||
|
||||
Customers engaged, new learners from those accounts.
|
||||
Figuring it out as they go.
|
||||
Product behavior - how much people are using the product pre and post academy.
|
||||
Less support cases.
|
||||
Somehow combining data between the systems. API Extracts?
|
||||
|
||||
Kat: What are they using for tracking data - Heap.
|
||||
Left over Alexa tasks? Search results.
|
||||
Kat: Advocacy? How are doing it - Round tables? Events? Case studies?
|
||||
Anna: One of the movements after the "riff" is to work with sales and work together.
|
||||
|
||||
No risk in the renewal from Anna.
|
||||
|
||||
@ -154,3 +154,17 @@ List from Stephanie:
|
||||
Sanitized search.
|
||||
* She doesn't love the learning path cover page. Send learning path examples of a more minimal design.
|
||||
* Add categories tag to search results boxes.
|
||||
|
||||
## 08/03/2023
|
||||
|
||||
### Finalizing Modals
|
||||
|
||||
TODO: Setup google sheet for Quiz completion webhook
|
||||
DONE: Talk to Kaitlyn about the modal. See list below:
|
||||
|
||||
* Make modal accessible in the sandbox.
|
||||
* She wants a "survey" modal to show up 2 weeks after the first modal. Can we:
|
||||
* Add timestamp local storage
|
||||
* Check timestamp every time the function runs
|
||||
* If timestamp == 2 weeks, show new modal
|
||||
* Set secondary modal boolean to True/False.
|
||||
|
||||
@ -63,3 +63,14 @@ DONE: Submit tickets from [this page](https://docs.google.com/spreadsheets/d/1kV
|
||||
|
||||
TODO: Check if we can "mimic" the start button across all courses in LP so any click = start LP.
|
||||
TODO: Get Assignment Download link into Google Sheets. Webhook followed by API call. Data points: UID, Course, Submitted At, and URL.
|
||||
|
||||
Notes for Sophie:
|
||||
|
||||
To get the assignments outside of Northpass, you would need to log them to a Google sheet. However, since we don't have any webhooks for an assignment completion that contains the cdn.filestack download link, you'd have to get this via API. The Assignment Submissions API should have everything you need, including the download link.
|
||||
|
||||
The other portion of this that was mentioned to me is that the people that need these criminal records have to grab it in "close" to real time. So the flow of data and API calls would have to be the following:
|
||||
|
||||
1. Webhook is the trigger that starts the flow. It points to a workflow engine, google sheet, SFDC, where ever Zenjob wants.
|
||||
2. Parse the webhook and check for activity name. If Activity name == Course A
|
||||
3. Make an API call to the Assignments endpoint and grab the following information: Learner Email/SSO UID, Course Name, Activity Name, Download link
|
||||
4. Add those values to a spreadsheet or Salesforce. Wherever you want the employees to grab the criminal record upload.
|
||||
|
||||
1
Scripts/GoogleScripts/Luminate_API_Exam/.clasp.json
Normal file
1
Scripts/GoogleScripts/Luminate_API_Exam/.clasp.json
Normal file
@ -0,0 +1 @@
|
||||
{"scriptId":"1s6f3wOHnnkJXNH6RoO5_NBfT5xJh62RPBm5LdGS7cgBlsfgPCnNxheIE","rootDir":"/Users/normrasmussen/Documents/Work/Scripts/GoogleScripts/Luminate_API_Exam"}
|
||||
58
Scripts/GoogleScripts/Luminate_API_Exam/WebhookParseer.js
Normal file
58
Scripts/GoogleScripts/Luminate_API_Exam/WebhookParseer.js
Normal file
@ -0,0 +1,58 @@
|
||||
function doGet(e) {
|
||||
return HtmlService.createHtmlOutput("get request received");
|
||||
}
|
||||
// ac4fbf2e-ed8f-404d-b995-f0ef73481466
|
||||
//this is a function that fires when the webapp receives a POST request
|
||||
function doPost(e) {
|
||||
var params = JSON.stringify(e.postData.contents);
|
||||
params = JSON.parse(params);
|
||||
var now = new Date();
|
||||
var timeAdded = Utilities.formatDate(now,'America/New_York','MM/dd/yyyy');
|
||||
|
||||
var learnerName = params.substring(params.indexOf('{"name":"') + 7, params.lastIndexOf('"email"'));
|
||||
learnerName = learnerName.slice(learnerName.indexOf('"') + 1, learnerName.lastIndexOf('"'),);
|
||||
//Logger.log("Name = " + learnerName);
|
||||
|
||||
var learnerEmail = params.substring(params.indexOf('"sso_uid":"') + 9, params.lastIndexOf('"full_name"'));
|
||||
learnerEmail = learnerEmail.slice(learnerName.indexOf('"') + 3, learnerEmail.lastIndexOf('"'),);
|
||||
//Logger.log("Email = " + learnerEmail);
|
||||
|
||||
var courseName = params.substring(params.indexOf('"course_name":') + 4, params.lastIndexOf('}},{"id"'));
|
||||
courseName = courseName.slice(courseName.indexOf('"') + 3, courseName.lastIndexOf('"'),);
|
||||
//Logger.log("Course = " + courseName);
|
||||
|
||||
var activityName = params.substring(params.indexOf('"title":"') + 4, params.lastIndexOf('"course_name"'));
|
||||
activityName = activityName.slice(activityName.indexOf('"') + 3, activityName.lastIndexOf('"'),);
|
||||
//Logger.log("Activity = " + activityName);
|
||||
|
||||
var quizScore = params.substring(params.indexOf('"value":') + 8, params.lastIndexOf(',"created_at"'));
|
||||
//quizScore = quizScore.slice(quizScore.indexOf('"') + 3, quizScore.lastIndexOf('"'),);
|
||||
//Logger.log("Quiz Score = " + quizScore);
|
||||
|
||||
var dateCompleted = params.substring(params.indexOf('"updated_at":"') + 4, params.lastIndexOf('"activated_at"'));
|
||||
dateCompleted = dateCompleted.slice(dateCompleted.indexOf('"') + 3, dateCompleted.lastIndexOf('"'),);
|
||||
var localTime = new Date(dateCompleted);
|
||||
localTime = localTime.toString();
|
||||
localTime = localTime.slice(0,localTime.indexOf(' GMT'));
|
||||
//dateCompleted = dateCompleted.toString();
|
||||
//Logger.log("Completed on = " + dateCompleted);
|
||||
|
||||
if (courseName == "API Certification Exam") {
|
||||
var sheet = SpreadsheetApp.getActiveSheet();
|
||||
var lastRow = Math.max(sheet.getLastRow(),1);
|
||||
sheet.insertRowAfter(lastRow);
|
||||
sheet.getRange(lastRow + 1, 1).setValue(timeAdded);
|
||||
sheet.getRange(lastRow + 1, 2).setValue(learnerName);
|
||||
sheet.getRange(lastRow + 1, 3).setValue(learnerEmail);
|
||||
sheet.getRange(lastRow + 1, 4).setValue(courseName);
|
||||
sheet.getRange(lastRow + 1, 5).setValue(activityName);
|
||||
sheet.getRange(lastRow + 1, 6).setValue(localTime);
|
||||
sheet.getRange(lastRow + 1, 7).setValue(quizScore+"%");
|
||||
sheet.getRange(lastRow + 1, 8).setValue(params);
|
||||
}
|
||||
|
||||
|
||||
SpreadsheetApp.flush();
|
||||
return HtmlService.createHtmlOutput("post request received");
|
||||
}
|
||||
|
||||
1
Scripts/GoogleScripts/Papa_Quiz/.clasp.json
Normal file
1
Scripts/GoogleScripts/Papa_Quiz/.clasp.json
Normal file
@ -0,0 +1 @@
|
||||
{"scriptId":"1Mu3E-vjk8KvwFzZ_9HIEuhO-0aMMjZHCwtDLpXEpp82FA_1LZJGljSbZ","rootDir":"/Users/normrasmussen/Documents/Work/Scripts/GoogleScripts/Papa_Quiz"}
|
||||
56
Scripts/GoogleScripts/Papa_Quiz/Code.js
Normal file
56
Scripts/GoogleScripts/Papa_Quiz/Code.js
Normal file
@ -0,0 +1,56 @@
|
||||
function doGet(e) {
|
||||
return HtmlService.createHtmlOutput("get request received");
|
||||
}
|
||||
|
||||
//this is a function that fires when the webapp receives a POST request
|
||||
function doPost(e) {
|
||||
var params = JSON.stringify(e.postData.contents);
|
||||
params = JSON.parse(params);
|
||||
var now = new Date();
|
||||
var timeAdded = Utilities.formatDate(now,'America/New_York','MM/dd/yyyy');
|
||||
|
||||
var learnerName = params.substring(params.indexOf('{"name":"') + 7, params.lastIndexOf('"email"'));
|
||||
learnerName = learnerName.slice(learnerName.indexOf('"') + 1, learnerName.lastIndexOf('"'),);
|
||||
//Logger.log("Name = " + learnerName);
|
||||
|
||||
var learnerEmail = params.substring(params.indexOf('"sso_uid":"') + 9, params.lastIndexOf('"full_name"'));
|
||||
learnerEmail = learnerEmail.slice(learnerName.indexOf('"') + 3, learnerEmail.lastIndexOf('"'),);
|
||||
//Logger.log("Email = " + learnerEmail);
|
||||
|
||||
var courseName = params.substring(params.indexOf('"course_name":') + 4, params.lastIndexOf('}},{"id"'));
|
||||
courseName = courseName.slice(courseName.indexOf('"') + 3, courseName.lastIndexOf('"'),);
|
||||
//Logger.log("Course = " + courseName);
|
||||
|
||||
var activityName = params.substring(params.indexOf('"title":"') + 4, params.lastIndexOf('"course_name"'));
|
||||
activityName = activityName.slice(activityName.indexOf('"') + 3, activityName.lastIndexOf('"'),);
|
||||
//Logger.log("Activity = " + activityName);
|
||||
|
||||
var quizScore = params.substring(params.indexOf('"value":') + 8, params.lastIndexOf(',"created_at"'));
|
||||
//quizScore = quizScore.slice(quizScore.indexOf('"') + 3, quizScore.lastIndexOf('"'),);
|
||||
//Logger.log("Quiz Score = " + quizScore);
|
||||
|
||||
var dateCompleted = params.substring(params.indexOf('"updated_at":"') + 4, params.lastIndexOf('"activated_at"'));
|
||||
dateCompleted = dateCompleted.slice(dateCompleted.indexOf('"') + 3, dateCompleted.lastIndexOf('"'),);
|
||||
var localTime = new Date(dateCompleted);
|
||||
localTime = localTime.toString();
|
||||
localTime = localTime.slice(0,localTime.indexOf(' GMT'));
|
||||
//dateCompleted = dateCompleted.toString();
|
||||
//Logger.log("Completed on = " + dateCompleted);
|
||||
|
||||
var sheet = SpreadsheetApp.getActiveSheet();
|
||||
var lastRow = Math.max(sheet.getLastRow(),1);
|
||||
|
||||
sheet.insertRowAfter(lastRow);
|
||||
sheet.getRange(lastRow + 1, 1).setValue(timeAdded);
|
||||
sheet.getRange(lastRow + 1, 2).setValue(learnerName);
|
||||
sheet.getRange(lastRow + 1, 3).setValue(learnerEmail);
|
||||
sheet.getRange(lastRow + 1, 4).setValue(courseName);
|
||||
sheet.getRange(lastRow + 1, 5).setValue(activityName);
|
||||
sheet.getRange(lastRow + 1, 6).setValue(localTime);
|
||||
sheet.getRange(lastRow + 1, 7).setValue(quizScore+"%");
|
||||
sheet.getRange(lastRow + 1, 8).setValue(params);
|
||||
|
||||
|
||||
SpreadsheetApp.flush();
|
||||
return HtmlService.createHtmlOutput("post request received");
|
||||
}
|
||||
56
Scripts/GoogleScripts/Papa_Quiz/WebhookParser.js
Normal file
56
Scripts/GoogleScripts/Papa_Quiz/WebhookParser.js
Normal file
@ -0,0 +1,56 @@
|
||||
function doGet(e) {
|
||||
return HtmlService.createHtmlOutput("get request received");
|
||||
}
|
||||
|
||||
//this is a function that fires when the webapp receives a POST request
|
||||
function doPost(e) {
|
||||
var params = JSON.stringify(e.postData.contents);
|
||||
params = JSON.parse(params);
|
||||
var now = new Date();
|
||||
var timeAdded = Utilities.formatDate(now,'America/New_York','MM/dd/yyyy');
|
||||
|
||||
var learnerName = params.substring(params.indexOf('{"name":"') + 7, params.lastIndexOf('"email"'));
|
||||
learnerName = learnerName.slice(learnerName.indexOf('"') + 1, learnerName.lastIndexOf('"'),);
|
||||
//Logger.log("Name = " + learnerName);
|
||||
|
||||
var learnerEmail = params.substring(params.indexOf('"sso_uid":"') + 9, params.lastIndexOf('"full_name"'));
|
||||
learnerEmail = learnerEmail.slice(learnerName.indexOf('"') + 3, learnerEmail.lastIndexOf('"'),);
|
||||
//Logger.log("Email = " + learnerEmail);
|
||||
|
||||
var courseName = params.substring(params.indexOf('"course_name":') + 4, params.lastIndexOf('}},{"id"'));
|
||||
courseName = courseName.slice(courseName.indexOf('"') + 3, courseName.lastIndexOf('"'),);
|
||||
//Logger.log("Course = " + courseName);
|
||||
|
||||
var activityName = params.substring(params.indexOf('"title":"') + 4, params.lastIndexOf('"course_name"'));
|
||||
activityName = activityName.slice(activityName.indexOf('"') + 3, activityName.lastIndexOf('"'),);
|
||||
//Logger.log("Activity = " + activityName);
|
||||
|
||||
var quizScore = params.substring(params.indexOf('"value":') + 8, params.lastIndexOf(',"created_at"'));
|
||||
//quizScore = quizScore.slice(quizScore.indexOf('"') + 3, quizScore.lastIndexOf('"'),);
|
||||
//Logger.log("Quiz Score = " + quizScore);
|
||||
|
||||
var dateCompleted = params.substring(params.indexOf('"updated_at":"') + 4, params.lastIndexOf('"activated_at"'));
|
||||
dateCompleted = dateCompleted.slice(dateCompleted.indexOf('"') + 3, dateCompleted.lastIndexOf('"'),);
|
||||
var localTime = new Date(dateCompleted);
|
||||
localTime = localTime.toString();
|
||||
localTime = localTime.slice(0,localTime.indexOf(' GMT'));
|
||||
//dateCompleted = dateCompleted.toString();
|
||||
//Logger.log("Completed on = " + dateCompleted);
|
||||
|
||||
var sheet = SpreadsheetApp.getActiveSheet();
|
||||
var lastRow = Math.max(sheet.getLastRow(),1);
|
||||
|
||||
sheet.insertRowAfter(lastRow);
|
||||
sheet.getRange(lastRow + 1, 1).setValue(timeAdded);
|
||||
sheet.getRange(lastRow + 1, 2).setValue(learnerName);
|
||||
sheet.getRange(lastRow + 1, 3).setValue(learnerEmail);
|
||||
sheet.getRange(lastRow + 1, 4).setValue(courseName);
|
||||
sheet.getRange(lastRow + 1, 5).setValue(activityName);
|
||||
sheet.getRange(lastRow + 1, 6).setValue(localTime);
|
||||
sheet.getRange(lastRow + 1, 7).setValue(quizScore+"%");
|
||||
sheet.getRange(lastRow + 1, 8).setValue(params);
|
||||
|
||||
|
||||
SpreadsheetApp.flush();
|
||||
return HtmlService.createHtmlOutput("post request received");
|
||||
}
|
||||
10
Scripts/GoogleScripts/Papa_Quiz/appsscript.json
Normal file
10
Scripts/GoogleScripts/Papa_Quiz/appsscript.json
Normal file
@ -0,0 +1,10 @@
|
||||
{
|
||||
"timeZone": "America/New_York",
|
||||
"dependencies": {},
|
||||
"exceptionLogging": "STACKDRIVER",
|
||||
"runtimeVersion": "V8",
|
||||
"webapp": {
|
||||
"executeAs": "USER_DEPLOYING",
|
||||
"access": "ANYONE_ANONYMOUS"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user