TS props script, notes

This commit is contained in:
Norm Rasmussen
2023-01-05 17:15:12 -05:00
parent 3bf4d6a151
commit 26610f8ae0
12 changed files with 368 additions and 116 deletions

View File

@ -4,7 +4,7 @@
[X] Wistia Project, what access do they have? [X] Wistia Project, what access do they have?
[X] Share button with /app/course within course viewer bright green 52 front [X] Share button with /app/course within course viewer bright green 52 front
[X] EXpert led categories url not working [X] Expert led categories url not working
[X] Change Enroll in Course to Watch Video [X] Change Enroll in Course to Watch Video
## Notes ## Notes
@ -59,8 +59,8 @@ Problems/Opportunities:
* They are less concerned with activated/active learners and really want to see individuals and get names and emails. * They are less concerned with activated/active learners and really want to see individuals and get names and emails.
* Can Google Apps allow _any_ google account user to sign up with Omnisend? Is this the same as social login? * Can Google Apps allow _any_ google account user to sign up with Omnisend? Is this the same as social login?
FEAT: * They want Google Social Login for external users. They also want 2FA for internal users. FEAT: * They want Google Social Login for external users. They also want 2FA for internal users.
TODO: Can Google Apps allow social login? Can anyone with a google account have an account in Northpass? DONE: Can Google Apps allow social login? Can anyone with a google account have an account in Northpass?
TODO: What needs to be done to setup a new instance with Google Apps auth? The documentation is really limited. DONE: What needs to be done to setup a new instance with Google Apps auth? The documentation is really limited.
* What Audrius would prefer is to have public pages, but the actual content must be behind login. * What Audrius would prefer is to have public pages, but the actual content must be behind login.
* They need to switch to a better acquisition model. The original idea was to be like Youtube, but to be honest, this will never be like Youtube. * They need to switch to a better acquisition model. The original idea was to be like Youtube, but to be honest, this will never be like Youtube.
* Responsiveness with Screens: * Responsiveness with Screens:
@ -71,5 +71,33 @@ TODO: What needs to be done to setup a new instance with Google Apps auth? The d
DONE: * Submit Ticket to move the Course Image on the overview page all the way to the right of the screen. DONE: * Submit Ticket to move the Course Image on the overview page all the way to the right of the screen.
* Contract: * Contract:
* Doesn't need 3000 learners - wants to slash the price. 1500-2000 learners especially if they switch to Google Auth. * Doesn't need 3000 learners - wants to slash the price. 1500-2000 learners especially if they switch to Google Auth.
TODO: Send Contract information, updating pricing for fewer learners but an additional instance. DONE: Send Contract information, updating pricing for fewer learners but an additional instance.
* Audrius is away from 5th of December until the end of the year.* So if we can setup the Google Auth answers this week, it will be helpful so he doesn't have as much work to do while he is gone. * Audrius is away from 5th of December until the end of the year.* So if we can setup the Google Auth answers this week, it will be helpful so he doesn't have as much work to do while he is gone.
## 01/04/2023
### Bernard, Existing Customers
He runs Omnisend blog.
86-90k clients. Large volume, small cost.
They want an academy for existing customers to see new content and go back for a resource
Retention and Engagement.
Most of their "brands" are free, and then a small portion of paying customers. They have two plans: standard and pro. Both are paid.
~$50/month for each plan. This is the main audience.
They want to tease free customers to join and become paid customers.
Main pain point from their customers?
* Email marketing is weak for these customers, which could be 1-person shops. eCommerce shops are doing everything and are also inundated with emails. This is an alternative to facebook ads. The Omnisend academy would teach them how to better use their product. The Academy would also give them more specific content.
Content Creation Plan?
* For the time being, it would fall on Bernard. Blog is mostly SEO content and quite generic/top of funnel. So freelancers can start it and then he adds in specifics. This academy content must be built in house, leveraging agency partnerships.
Optimal Situation:
* He wants to see all the content in a catalog with category type. And be able to have users to click the category and show those courses.
The difficult thing for him is how to chop up the information and categories.

View File

@ -1,5 +1,9 @@
# Pipedrive
## 11/02/2022 ## 11/02/2022
### Strategy Session - Implementation ### Strategy Session - Implementation
* Priority is indexed pages * Priority is indexed pages
* What does it take to get someone certified? - James * What does it take to get someone certified? - James
* Explanation of certifications administration * Explanation of certifications administration
@ -23,6 +27,7 @@
* The least experience comes in actual course creation. * The least experience comes in actual course creation.
## 12/1/2022 ## 12/1/2022
### Security Meeting ### Security Meeting
*Message sent to Slack Channel from Kaisa:* *Message sent to Slack Channel from Kaisa:*
@ -32,6 +37,7 @@
> heres a recap of agendas for the two meetings we have today :slightly_smiling_face: > heres a recap of agendas for the two meetings we have today :slightly_smiling_face:
> >
> *Security Meeting* > *Security Meeting*
>
> * Security vulnerabilities and how Northpass security team approaches them in relation to having Northpass platform under Pipedrive domain (learn.pipedrive.com) > * Security vulnerabilities and how Northpass security team approaches them in relation to having Northpass platform under Pipedrive domain (learn.pipedrive.com)
> * Cookies that should be included in OneTrust, user preference to be respected. We have had a conversation with Norm around this but want to confirm were all good > * Cookies that should be included in OneTrust, user preference to be respected. We have had a conversation with Norm around this but want to confirm were all good
> * Deletion of data - how is this working on the Northpass side (for user account created for learn.pipedrive.com). Northpass has already confirmed its possible but we need to document how > * Deletion of data - how is this working on the Northpass side (for user account created for learn.pipedrive.com). Northpass has already confirmed its possible but we need to document how
@ -43,6 +49,7 @@
During the SSO process, only one company is passed per user. During the SSO process, only one company is passed per user.
Overview of how they use Segment: Overview of how they use Segment:
* On the website: * On the website:
* Similar to Google Analytics * Similar to Google Analytics
* Segment snippet is loaded on the side * Segment snippet is loaded on the side
@ -75,17 +82,26 @@ Some clarification from Bjorn: are we discussing a scenario of segment tracking
Third point: There is some native tracking. Is there a point at building everything up via Segment? Such as Course Completion, are these being passed via events? We have some webhooks, but what do they mean by "events"? Third point: There is some native tracking. Is there a point at building everything up via Segment? Such as Course Completion, are these being passed via events? We have some webhooks, but what do they mean by "events"?
Internal Questions for Pipedrive: Internal Questions for Pipedrive:
* Can OneTrust share consent snippet across pages? Main snippet is from Pipedrive.com, but it would carry over to other sites from the source snippet. * Can OneTrust share consent snippet across pages? Main snippet is from Pipedrive.com, but it would carry over to other sites from the source snippet.
* Will we know who _hasn't_ given OneTrust consent? We could create a boolean prop to show who has or hasn't given consent. * Will we know who *hasn't* given OneTrust consent? We could create a boolean prop to show who has or hasn't given consent.
* Are they/can they tie this into Consent and Privacy Policies as dictated by Pipedrive? Good question (Kaisa) and this will need to be brought up in their meeting next week. * Are they/can they tie this into Consent and Privacy Policies as dictated by Pipedrive? Good question (Kaisa) and this will need to be brought up in their meeting next week.
* Would it be possible (or are they considering) to extend their Cookie Banner into Northpass? Yes, they are. * Would it be possible (or are they considering) to extend their Cookie Banner into Northpass? Yes, they are.
* Do they tie the consent to the Pipedrive ID? No, they don't. This is completely on the user and browser side. No real client information. * Do they tie the consent to the Pipedrive ID? No, they don't. This is completely on the user and browser side. No real client information.
_Umbrella Question from Bjorn:_ *Umbrella Question from Bjorn:*
Three main questions they want to understand Three main questions they want to understand
* Acquisition - what are the sources of their arrival? * Acquisition - what are the sources of their arrival?
* What are they clicking on? * What are they clicking on?
* Business Specific data - course completion, etc * Business Specific data - course completion, etc
What are the options to get the data out of Northpass and into their warehouse? What are the options to get the data out of Northpass and into their warehouse?
TODO: Send Bjorn our data schema. Send him our 3-4 options in an email so he can read through the options. The options I provided were: Encrypted Dump into S3 bucket (Flink), Secure Data Transfer, Webhooks (not ideal), and Snowflake/Look for customers who are also on Snowflake or Looker.
DONE: Bjorn our data schema. Send him our 3-4 options in an email so he can read through the options. The options I provided were Encrypted Dump into S3 bucket (Flink), Secure Data Transfer, Webhooks (not ideal), and Snowflake/Look for customers who are also on Snowflake or Looker.
## 01/03/2023
### Content & Uploading
Video Promo URL not embedding correctly? Why? iFrame wasn't working, but she was using embed URL not single http:// url.

View File

@ -89,7 +89,7 @@ Kathleen has some questions and/or bring something to our attention:
- Her team is trying to anticipate some changes that are happening in the company, and looking for long-term solutions. 4-Year Plan, repackaging and bundling the products. Potentially, one of the products could have 3 different names. For example: - Her team is trying to anticipate some changes that are happening in the company, and looking for long-term solutions. 4-Year Plan, repackaging and bundling the products. Potentially, one of the products could have 3 different names. For example:
- Currently: Fulfillment - Currently: Fulfillment
- Future: Retail, Warehouse, Vendor/Supplier - three different fulfillment product names - Future: Retail, Warehouse, Vendor/Supplier - three different fulfillment product names
- They also want to replace user guides. Putting User Guide content in Northpass. Using text editor/RTE - just copy and pasting it into Northpass. - They also want to replace user guides. Putting User Guide content in Northpass. Using text ed:Titor/RTE - just copy and pasting it into Northpass.
## 12/21/2022 ## 12/21/2022
@ -98,3 +98,7 @@ Kathleen has some questions and/or bring something to our attention:
They use a lot of tables in their content. They use this to display text and pictures, this is mostly used for formatting. However, they had to go into the HTML to make the borders invisible. Thankfully, they had a designer willing to help them. They use a lot of tables in their content. They use this to display text and pictures, this is mostly used for formatting. However, they had to go into the HTML to make the borders invisible. Thankfully, they had a designer willing to help them.
Froala doesn't by default allow to hide borders on tables. Can Northpass add it? Or, can I provide some quick html/css to add to any RTE that they don't want borders in. Froala doesn't by default allow to hide borders on tables. Can Northpass add it? Or, can I provide some quick html/css to add to any RTE that they don't want borders in.
## 01/04/2023
FEAT: Add email filter for SCA report.

View File

@ -134,3 +134,18 @@ Two other items from Alexa:
* Rich Text Editor is not always working. Support blames the additional code, but Alexa says they are only copying and pasting from Google. But then when she tries to add the Wistia * Rich Text Editor is not always working. Support blames the additional code, but Alexa says they are only copying and pasting from Google. But then when she tries to add the Wistia
* Skuad Skool - notifications for when a person completes 10 courses between 1/1 and 3/31 * Skuad Skool - notifications for when a person completes 10 courses between 1/1 and 3/31
* Skuid Skool - notifications for when someone completes the first two levels - LPs 1-9 and 10-13 * Skuid Skool - notifications for when someone completes the first two levels - LPs 1-9 and 10-13
## 01/05/2023
### Integrating Quizzes
Survey and Exam Tools are what they are looking at.
All SCORM vendors like Captivate/Articulate Rise have hot spot.
* Hot spot is the main type of question they want.
They want to ask questions like "which option".
She wants to be integrated into Northpass, like passing scores and milestones.
Pro-profs & Question Pro at the top contenders.
Skuid's founder is retiring and joining the board and wants the RTE "beautified". Even the code guy said that.

View File

@ -232,7 +232,7 @@ Molly met with Mary Potter this morning (she is head of compliance). They are ab
DONE: -can NP trigger an email after course completion? DONE: -can NP trigger an email after course completion?
TODO: -can we see the analytics/details of the email and who it was sent to? TODO: -can we see the analytics/details of the email and who it was sent to?
TODO: -can we receive an automated report of providers who have been assigned the training but 1) havent accessed the training, 2) started but have not yet completed the training. DONE: -can we receive an automated report of providers who have been assigned the training but 1) havent accessed the training, 2) started but have not yet completed the training.
DONE: Turn on Workflows for 1099 School and create course completion email workflow recipe. DONE: Turn on Workflows for 1099 School and create course completion email workflow recipe.
## 12/16/2022 ## 12/16/2022
@ -246,7 +246,7 @@ Her Ideas:
* Emails to supervisors when someone hasn't completed a course. * Emails to supervisors when someone hasn't completed a course.
Course to test: Psychiatry Tickets Training Course to test: Psychiatry Tickets Training
c147d36c-3416-49e2-b665-37342d215d9a c147d36c-3416-49e2-b665-37342d215d9a,
DONE: Add total completion percentage column to Group Reports. DONE: Add total completion percentage column to Group Reports.
@ -257,3 +257,14 @@ DONE: Add total completion percentage column to Group Reports.
TODO: Delays with Webhooks. Upon course completion webhook, wait 11 months, reset or revoke course progress. TODO: Delays with Webhooks. Upon course completion webhook, wait 11 months, reset or revoke course progress.
Other pressing question: She has a list of selected/approved courses (awaiting feedback from Mary Potter), and wants to make sure all the courses are up to date with the most recent content. She wants to make sure they are setup well. Other pressing question: She has a list of selected/approved courses (awaiting feedback from Mary Potter), and wants to make sure all the courses are up to date with the most recent content. She wants to make sure they are setup well.
Jenna to send the list of courses that she wants us to check and make sure they are up to date. Jenna to send the list of courses that she wants us to check and make sure they are up to date.
## 01/03/2023
### Workflows & Reports
Therapists have 30 days from the date they completed the managed care course.
Add when they completed the entire group of training
Need to know:
* Date Managed Care/Getting Started Course completed (Start Date)
* All Compliance Courses Completed (Completion Date)
* 30 difference/requirement between those dates.

View File

@ -245,7 +245,7 @@ Krystal still wants the custom Dashboard
#### (4.) PDF of Resources When Launched #### (4.) PDF of Resources When Launched
TODO: The auto-screen capture app from Rob needs to be ready for end of January for next big push. No OneDrive access yet. DONE: The auto-screen capture app from Rob needs to be ready for end of January for next big push. No OneDrive access yet.
#### (3.) Resource Descriptions in Search Results #### (3.) Resource Descriptions in Search Results
@ -266,3 +266,14 @@ Two big follow ups:
* The timestamp links in any activity. * The timestamp links in any activity.
* SCORM File Testing * SCORM File Testing
## 01/04/2023
### Content Sync
Feedback mock up:
Is it easier to go to legal with visual stuff instead of just ideas.
Krystal: Content wise, the big push for new resources is happening right now for the end of the month.
Krystal will need Cam's help to great gifs, just like we did last time. Jan 31st. Some screens are already existing, so Northpass was getting an error message.
TODO: Give Cam a heads up to look through the drafts.
Walmart to create course images.

View File

@ -0,0 +1,82 @@
import requests
import pandas as pd
csv = "/Users/normrasmussen/Downloads/ts_id_roles_test.csv"
apiKey = "18Zl2NAzWTE09FHbNEBngNOJO"
baseUrlemail = "https://api.northpass.com/v2/people?filter[email][eq]="
def readcsv(csv, apiKey, baseUrlemail):
emails = []
data = pd.read_csv(csv)
emails.extend(data["email"].tolist())
getfromEmail(emails, baseUrlemail, apiKey, data)
def getfromEmail(emails, baseUrlemail, apiKey, data):
email_ids = {}
errors = []
for email in emails:
url = baseUrlemail + f"{email}"
headers = {
"accept": "*/*",
"x-api-key": apiKey,
"content-type": "application/json",
}
response = requests.get(url, headers=headers)
if response.status_code == 200:
response = response.json()
try:
uuid = response["data"][0]["id"]
print(uuid)
email_ids.update({email: uuid})
except Exception as e:
errors.append(email)
pass
else:
print("Another Error!")
# print(email_ids)
data["uuid"] = data["email"].map(email_ids)
data.dropna(how='any', inplace=True)
# print(data)
# print(errors)
assignProps(data, apiKey)
errorstoCsv(errors)
def errorstoCsv(errors):
errorcsv = pd.DataFrame(errors)
errorcsv.to_csv(
path_or_buf="/Users/normrasmussen/Downloads/Talkspace_Emails_Not_Northpass.csv",
index=False
)
def assignProps(data, apiKey):
for row in data.itertuples():
print(row)
ts_id = row[2]
ts_role = row[3]
uuid = row[4]
url = "https://api.northpass.com/v2/properties/people/bulk"
payload = {
"data": [{
"type": "person_properties",
"attributes": {"properties": {
"user_id": ts_id,
"role_type": ts_role
}},
"id": uuid,
}]}
headers = {
"accept": "application/json",
"content-type": "application/json",
"X-Api-Key": apiKey,
}
response = requests.post(url, json=payload, headers=headers)
print(response)
if __name__ == "__main__":
readcsv(csv, apiKey, baseUrlemail)

View File

@ -0,0 +1,36 @@
import requests
import pandas as pd
# SPS Commerce
apiKey = "VNDXh8K4tLYJ-Nvp78bo6w"
def getEnrollments(apiKey):
course_uuid = input("What is the Course UUID? Enter it here: ")
x = 0
uuid = []
while True:
x += 1
url = f"https://api.northpass.com/v2/courses/{course_uuid}/enrollments"
headers = {
"accept": "application/json",
"X-Api-Key": apiKey
}
response = requests.get(url, headers=headers)
jsonResponse = response.json()
next = jsonResponse["links"]
for id in jsonResponse["data"]:
userid= id["attributes"]["person_id"]
email= id["attributes"]["progress"]
uuid.append(user)
if "next" not in next:
break
# def getCourse():
if __name__ == "__main__":
getEnrollments(apiKey)

View File

@ -3,8 +3,9 @@ import requests
baseUrl = "https://api.northpass.com/v2/people/" baseUrl = "https://api.northpass.com/v2/people/"
baseUrlname = "https://api.northpass.com/v2/people?filter[name][eq]=" baseUrlname = "https://api.northpass.com/v2/people?filter[name][eq]="
baseUrlemail = "https://api.northpass.com/v2/people?filter[email][eq]=" baseUrlemail = "https://api.northpass.com/v2/people?filter[email][eq]="
apiKey = "JRDpCGQ7vSRiva6t5OkWDr5eJ" #G2 apiKey = "JRDpCGQ7vSRiva6t5OkWDr5eJ" # G2
#apiKey = "6hUfJdAartHTHhHc0WIRZYPWe" #Walmart # apiKey = "6hUfJdAartHTHhHc0WIRZYPWe" #Walmart
def getfromName(baseUrlname, apiKey): def getfromName(baseUrlname, apiKey):
name = "Someone else" name = "Someone else"
@ -20,13 +21,14 @@ def getfromName(baseUrlname, apiKey):
else: else:
print("Another error! " + response.status_code) print("Another error! " + response.status_code)
response = response.json() response = response.json()
#print(response) # print(response)
#uuid = response["data"][0]["id"] # uuid = response["data"][0]["id"]
#print("Learner ID:" ) # print("Learner ID:" )
#print(uuid) # print(uuid)
def getfromEmail(baseUrlemail, apiKey): def getfromEmail(baseUrlemail, apiKey):
#email = "norm2test@northpass.com" # The %2B encodes the + sign in the URL. Using the + sign won't work. # email = "norm2test@northpass.com" # The %2B encodes the + sign in the URL. Using the + sign won't work.
email = " " email = " "
url = baseUrlemail + f"{email}" url = baseUrlemail + f"{email}"
print(url) print(url)
@ -42,10 +44,11 @@ def getfromEmail(baseUrlemail, apiKey):
else: else:
print("Another Error!") print("Another Error!")
response = response.json() response = response.json()
#print(response) # print(response)
uuid = response["data"] uuid = response["data"]
#print("Learner ID:" ) # print("Learner ID:" )
#print(uuid) # print(uuid)
def getfromUuid(baseUrl, apiKey): def getfromUuid(baseUrl, apiKey):
uuid = "57b2b5eb-aa56-4cee-bb32-8c678a2de1b7" uuid = "57b2b5eb-aa56-4cee-bb32-8c678a2de1b7"
@ -59,7 +62,8 @@ def getfromUuid(baseUrl, apiKey):
print(response.status_code) print(response.status_code)
print(response.text) print(response.text)
if __name__ == "__main__": if __name__ == "__main__":
getfromUuid(baseUrl, apiKey) getfromUuid(baseUrl, apiKey)
#getfromEmail(baseUrlemail, apiKey) # getfromEmail(baseUrlemail, apiKey)
#getfromName(baseUrlname, apiKey) # getfromName(baseUrlname, apiKey)

View File

@ -7,15 +7,16 @@ apiKey = ""
groupName = sys.argv[1] groupName = sys.argv[1]
peopleCsv = "/path/to/file/peopletogroups.csv" peopleCsv = "/path/to/file/peopletogroups.csv"
def createGroup(groupName, apiKey): def createGroup(groupName, apiKey):
#apiKey = input("What is your API Key? ") # apiKey = input("What is your API Key? ")
# Create a Group endpoint - params: group_uuid # Create a Group endpoint - params: group_uuid
url = "https://api.northpass.com/v2/groups" url = "https://api.northpass.com/v2/groups"
payload = {"data": {"attributes": {"name": f"{groupName}"}}} payload = {"data": {"attributes": {"name": f"{groupName}"}}}
headers = { headers = {
"accept": "application/json", "accept": "application/json",
"content-type": "application/json", "content-type": "application/json",
"X-Api-Key": apiKey "X-Api-Key": apiKey,
} }
groupresponse = requests.post(url, json=payload, headers=headers) groupresponse = requests.post(url, json=payload, headers=headers)
if "already have a group with this name" in groupresponse.text: if "already have a group with this name" in groupresponse.text:
@ -25,35 +26,37 @@ def createGroup(groupName, apiKey):
else: else:
readCSV(apiKey, groupresponse) readCSV(apiKey, groupresponse)
def readCSV(apiKey, groupresponse): def readCSV(apiKey, groupresponse):
people = [] people = []
readExport = pd.read_csv( readExport = pd.read_csv(
peopleCsv, peopleCsv,
usecols=['UUID'], usecols=["UUID"],
skipinitialspace=True, skipinitialspace=True,
) )
people.extend(readExport['UUID'].tolist()) people.extend(readExport["UUID"].tolist())
getgroupId(people, groupresponse, apiKey) getgroupId(people, groupresponse, apiKey)
def getgroupId(people, groupresponse, apiKey): def getgroupId(people, groupresponse, apiKey):
groupresponse = groupresponse.json() groupresponse = groupresponse.json()
groupID = groupresponse['data']['id'] groupID = groupresponse["data"]["id"]
ppltoGroup(people, groupID, apiKey) ppltoGroup(people, groupID, apiKey)
def ppltoGroup(people, groupID, apiKey): def ppltoGroup(people, groupID, apiKey):
for uuid in people: for uuid in people:
payload = {"data": [ payload = {
{ "data": [
"type":"people", {"type": "people", "id": uuid},
"id":uuid ]
}, }
]}
# Add People to a Group. Params needed: group_uuid # Add People to a Group. Params needed: group_uuid
url = f"https://api.northpass.com/v2/groups/{groupID}/relationships/people" url = f"https://api.northpass.com/v2/groups/{groupID}/relationships/people"
headers = { headers = {
"accept": "*/*", "accept": "*/*",
"content-type": "application/json", "content-type": "application/json",
"X-Api-Key": apiKey "X-Api-Key": apiKey,
} }
response = requests.post(url, json=payload, headers=headers) response = requests.post(url, json=payload, headers=headers)
if "404" in response.text: if "404" in response.text:
@ -62,12 +65,10 @@ def ppltoGroup(people, groupID, apiKey):
else: else:
pass pass
def errorNames(apiKey, uuid): def errorNames(apiKey, uuid):
url = f"https://api.northpass.com/v2/people/{uuid}" url = f"https://api.northpass.com/v2/people/{uuid}"
headers = { headers = {"accept": "application/json", "X-Api-Key": apiKey}
"accept": "application/json",
"X-Api-Key": apiKey
}
response = requests.get(url, headers=headers) response = requests.get(url, headers=headers)
response = response.json() response = response.json()
errorList = [] errorList = []
@ -75,8 +76,10 @@ def errorNames(apiKey, uuid):
errorList.append(names) errorList.append(names)
fullNames(errorList) fullNames(errorList)
def fullNames(errorList): def fullNames(errorList):
print(errorList) print(errorList)
if __name__ == "__main__": if __name__ == "__main__":
createGroup(groupName, apiKey) createGroup(groupName, apiKey)

View File

@ -37,3 +37,45 @@
* [ ] (TripleSeat) [11/15/2022] Screenshots of AppCues Examples * [ ] (TripleSeat) [11/15/2022] Screenshots of AppCues Examples
* [X] (TripleSeat) [11/15/2022] Send Holly/Katie details of what needs to be done for embedding. * [X] (TripleSeat) [11/15/2022] Send Holly/Katie details of what needs to be done for embedding.
* [X] (Talkspace) [11/15/2022] Create video showing how to setup a Webhook in Fountain for Molly and Taylor to talk to Gracie about. The goal is for a webhook to fire when someone completes a stage in Fountain that attests that they are seeing clients and that would enroll them in their appropriate group and courses. * [X] (Talkspace) [11/15/2022] Create video showing how to setup a Webhook in Fountain for Molly and Taylor to talk to Gracie about. The goal is for a webhook to fire when someone completes a stage in Fountain that attests that they are seeing clients and that would enroll them in their appropriate group and courses.
## Meeting with Travis
Figure out:How to offload implementation, support, and analytics from CSM
We should NOT be doing those three things
Figure out with Rob how to allow analytics team to create custom dashboards
Goal for Norm and Travis is to reduce variables and having CSMs create workflows on their own. They should start using a workflow we set out for them.
Support=0%
Implementation = 20% (content and strategy)
Analytics = 10% (delivery and showcase only)
Each CSM should have a visualization tool of their customer's hierarchy and structure
DONE: Create skeleton mind map for CSMs to use.
DONE: Create structure of daily workflows and how to be efficient at their job
Golden rules:
* Maintain a minimum of x points of contact (if you have 2, make 3.)
* On demand be able to articulate use case and what their client is trying to accomplish
* Short and long term goals for the client
* Renewal date and estimated amount
* Recent usage and changes over the last 2 months (weekly changes)
* Biggest pain point with Northpass
* Biggest satisfaction with Northpass
Travis is going to pull together an account health meeting for the team that looks at:
* Renewals within 6 months. We will go line-by-line.
* Norm and Travis to
### CSM Assignments and Territories
Google Slides of each quarter for CSMs to go through.
## 01/04/2023
### Safic-Alcan, Urgent Catch up
Use case: users must login
Can one of the fields be a list of groups?