Real-time Data of LMS Courses
The course consists of various learning activities on the ClassIn LMS. Currently, the learning activities that are available with real-time webhooks are:
- Assignment Score
- Assignment Submission
- Test Score
- AnswerSheet Score
Assignment Score
Trigger Timing: When assignment scores are generated or updated, typically after the teacher has graded the assignment.
Key | Data | Description |
---|---|---|
Cmd | String | Data Type:HomeworkScore |
SID | Int64 | School ID |
CourseID | Int64 | Course ID |
CourseName | String | Course Name |
Data | Object | Assignment Info and Scores |
└ UnitId | Int64 | Unit ID |
└ UnitName | String | Unit Name |
└ ActivityId | Int64 | Activity(Assignment) ID |
└ ActivityName | String | Activity(Assignment) Title |
└ Score | float | Full Score |
└ GradingPlan | String | GradingPlan, as '100-point scale' |
└ StudentScore | String | Displayed Score, as 'Amazing ' |
└ ReviewDetails | Object | Details of the result |
└ Correct | int | Number of Correct |
└ Wrong | int | Number of Wrong |
└ Trophy | int | Number of Trophy |
└ Excellent | int | 0 Not Excellent,1 Excellent |
└ Comment | String | comment |
└ StudentInfo | Object | Student Info |
└ StudentUid | Int64 | Student's UID |
└ StudentName | String | Student Name: The student's name as displayed in the assignment module of the ClassIn client. |
└ StudentAccount | String | Student Account: If the student has a registered mobile phone number, the mobile number will be used for the data push. If no mobile number is available, the email address will be used instead. |
└ SubmissionTime | Int64 | Assignment Submission Time |
└ CorrectionTime | Int64 | Grading Time |
└ StudentScoringRate | float | Student Score Rate: A decimal value, for example 0.8. Calculation logic: StudentScoringRate = The score students received in the assignment/Full score |
└ TeacherInfo | Object | Grading Teacher Information |
└ TeacherUid | Int64 | Teacher UID |
└ TeacherName | String | Teacher Name: The teacher's name as displayed in the assignment module of the ClassIn client. |
└ TeacherAccount | String | Teacher Account: If the teacher has a registered mobile phone number, the mobile number will be used for the data push. If no mobile number is available, the email address will be used instead. |
Instance
{
"Cmd" : "HomeworkScore",
"SID" : 2803666,
"CourseID" : 2279909,
"CourseName" : "Test",
"Data" : {
"UnitId" : 256,
"UnitName" : "Unit One",
"ActivityId" : 185647,
"ActivityName" : "Test Homework",
"Score" : 100,
"StudentScore": "90",
"ReviewDetails": {
"Trophy": 9,
"Comment": "<section class=\"eeo-editor-wrapper\" style=\"font-size: 15px; color: #38404a;\"><p>good job *2\u00a0</p></section>",
"Wrong": 6,
"Correct": 10,
"Excellent": 1
},
"StudentInfo" : {
"StudentUid" : 1000083,
"StudentName" : "Amy",
"StudentAccount" : "13451113311"
},
"SubmissionTime" : 1713053774,
"GradingPlan": "\u5206\u6570\u5236",
"CorrectionTime" : 1713083674,
"StudentScoringRate" : 0.9,
"TeacherInfo" : {
"TeacherUid" : 1000082,
"TeacherName" : "Mike",
"TeacherAccount" : "13466668866"
}
}
}
Assignment Submission
Trigger Timing: Each time students submit their assigments.
Key | Data | Description |
---|---|---|
Cmd | String | Message type: HomeworkSubmit |
SID | Int64 | Organization ID |
CourseID | Int64 | Class ID |
CourseName | String | Class name |
Data | Object | Assignment content |
└ UnitId | Int64 | Unit ID |
└ UnitName | String | Unit name |
└ ActivityId | Int64 | Activity (assignment) ID |
└ ActivityName | String | Activity (assignment) title |
StudentTotal | Int64 | Total number of students assigned: 10 |
SubmitTotal | Int64 | Number of submissions: 6 |
SubmissionTime | Int64 | Assignment submission timestamp |
IsSubmitLate | Int64 | 0: No, 1: Yes |
IsRevision | Int64 | 0: No, 1: Yes |
Content | String | Assignment text content |
Files | Object | List of assignment attachments |
└ Src | String | File download URL |
└ FileName | String | File name |
└ FileExtension | String | File format |
StudentInfo | Object | Student information |
└ StudentUid | Int64 | Student UID |
└ StudentName | String | Student name: Name displayed in client app |
└ StudentAccount | String | Student account: Push phone number if available, otherwise push email |
TeacherInfo | Object | Activity teacher information |
└ TeacherUid | Int64 | Teacher UID |
└ TeacherName | String | Teacher name: Name displayed in client app |
└ TeacherAccount | String | Teacher account: Push phone number if available, otherwise push email |
{
"ActionTime": 1741334951,
"CourseID": 26901289,
"TimeStamp": 1741335551,
"SafeKey": "d9a20c9bf3ac660766ddbfac4988ca31",
"Cmd": "HomeworkSubmit",
"CourseName": "test course",
"SID": 1068502,
"_id": "67caa9a7976eb388db162139",
"Data": {
"Files": [
{
"FileExtension": "png",
"src": "https://static.eeo.cn/upload/files/file01/20250307/03_03_71cfd3e-a71f-58e7-0cc8-577183e60485_1741334949147.png",
"fileName": "eeo.png"
}
],
"TeacherInfo": {
"TeacherName": "Lucy",
"TeacherAccount": "001-38102248",
"TeacherUid": 10602
},
"ActivityName": "Magic Key",
"UnitName": "test unit",
"IsSubmitLate": 1,
"StudentTotal": 2,
"Content": "<section class=\"eeo-editor-wrapper\" style=\"font-size:15px;color:#38404A;\"><p>start\u00a0</p></section>",
"ActivityId": 54911996,
"IsRevision": 0,
"StudentInfo": {
"StudentName": "GoodGuy",
"StudentAccount": "23672340105",
"StudentUid": 102494
},
"UnitId": 255618,
"SubmissionTime": 1741334950,
"SubmitTotal": 1
}
}
Test Score
Trigger Timing: When a test score is generated, either through automatic grading or teacher grading, the score will be pushed. However, if only partial scores are generated, the data will not be pushed. If the answers are modified, resulting in a score change, the updated score will be pushed.
Key | Data | Description | |
---|---|---|---|
Cmd | String | Data Type:ExamScore | |
SID | Int64 | School ID | |
CourseID | Int64 | Course ID | |
CourseName | String | Course Name | |
Data | Object | Test Info and Scores | |
└ UnitId | Int64 | Unit ID | |
└ UnitName | String | Unit Name | |
└ ActivityId | Int64 | Activity(Test) ID | |
└ ActivityName | String | Activity(Test) Title | |
└ClassId | Int64 | lesson id -- value if the test is published on the lesson | |
└ Score | float | Full Score | |
└ StudentInfo | Object | Student Info | |
└ StudentUid | Int64 | Student's UID | |
└ StudentName | String | Student Name: The student's name as displayed in the assignment module of the ClassIn client. | |
└ StudentAccount | String | Student Account: If the student has a registered mobile phone number, the mobile number will be used for the data push. If no mobile number is available, the email address will be used instead. | |
└ SubmissionTime | Int64 | Test Submission Time | |
└ AnswerDuration | Int64 | The time student spent on the test(second) | |
└ CorrectionTime | Int64 | Grading Time | |
└ StudentScoringRate | float | Student Score Rate: A decimal value, for example 0.8. Calculation logic: StudentScoringRate = The score students received in the assignment/Full score | |
└ TeacherInfo | Object | Grading Teacher Information | |
└ TeacherUid | Int64 | Teacher UID. If the test is auto grading, the value of Uid is 0 | |
└ TeacherName | String | Teacher Name: The teacher's name as displayed in the assignment module of the ClassIn client. Empty if the test is auto grading | |
└ TeacherAccount | String | Teacher Account: If the teacher has a registered mobile phone number, the mobile number will be used for the data push. If no mobile number is available, the email address will be used instead. Empty if the test is auto grading | |
└TopicDetails | array[object] | array | |
└TopicId | int | id of the topic as 1 | |
└TopicType | String | type of the topic, (string as "1") 1: Single choice,2: Multiple choice,3:True or False,4:Fills-up,5:essay question , 6: Comprehensive; | |
└ TopicResult | int | 0 = waiting for grading,1=correct,3=half correct,2=incorrect,4=no answer | |
└TopicScore | float | the student's score of the topic | |
└TopicMaxScore | float | max score of the topic | |
└SubTopicDetails | array[object] | if there's no subtopic, it's an empty array [] | |
└SubTopicId | int | id of the subtopic | |
└SubTopicType | String | type of the subtopic (string as "1") 1: Single choice, 2: Multiple choice, 3: True or False, 4: Fills-up, 5: essay question , 5: Comprehensive; | |
└SubTopicResult | int[] | 0 = waiting for grading,1=correct,3=half correct,2=incorrect,4=no answer | |
└SubTopicScore | float | score of the subtopic | |
└SubTopicMaxScore | int | max score of the subtopic |
Instance
{
"CourseID": 429724,
"Cmd": "ExamScore",
"CourseName": "Test Class",
"SID": 187286,
"Data": {
"ClassId": 34928113,
"TeacherInfo": {
"TeacherName": "Lucy",
"TeacherAccount": "12114444011",
"TeacherUid": 187286
},
"ActivityName": "test Monday",
"UnitName": "Unit 1",
"AnswerDuration": 57,
"ActivityId": 32044258,
"Score": 24,
"StudentInfo": {
"StudentName": "Tom",
"StudentAccount": "12133333301",
"StudentUid": 187268
},
"UnitId": 32014550,
"SubmissionTime": 1729576858,
"TopicDetails": [{
"TopicId": 1,
"TopicType": "1",
"SubTopicDetails": [],
"TopicResult": [2],
"TopicMaxScore": 5,
"TopicScore": 0
},
{
"TopicId": 2,
"TopicType": "5",
"SubTopicDetails": [],
"TopicResult": [3],
"TopicMaxScore": 4,
"TopicScore": 2
},
{
"TopicId": 3,
"TopicType": "4",
"SubTopicDetails": [],
"TopicResult": [2, 2, 2],
"TopicMaxScore": 6,
"TopicScore": 0
},
{
"TopicId": 4,
"TopicType": "6",
"SubTopicDetails": [{
"SubTopicId": 1,
"SubTopicType": "1",
"SubTopicResult": [2],
"SubTopicScore": 0,
"SubTopicMaxScore": 5
},
{
"SubTopicId": 2,
"SubTopicType": "2",
"SubTopicResult": [2],
"SubTopicScore": 0,
"SubTopicMaxScore": 4
}],
"TopicResult": [2],
"TopicMaxScore": 9,
"TopicScore": 0
}],
"StudentScoringRate": 0.083333,
"CorrectionTime": 1729576949
}
}
AnswerSheet Score
Trigger Timing: When an answerSheet score is generated, either through automatic grading or teacher grading, the score will be pushed. However, if only partial scores are generated, the data will not be pushed. If the answers are modified, resulting in a score change, the updated score will be pushed.
Key | Data | Description | |
---|---|---|---|
Cmd | String | Data Type: AnswerSheetScore | |
SID | Int64 | School ID | |
CourseID | Int64 | Course ID | |
CourseName | String | Course Name | |
Data | Object | AnswerSheet Info and Scores | |
└ UnitId | Int64 | Unit ID | |
└ UnitName | String | Unit Name | |
└ ActivityId | Int64 | Activity(AnswerSheet) ID | |
└ ActivityName | String | Activity(AnswerSheet) Title | |
└ClassId | Int64 | lesson id -- value if the AnswerSheet is published on the lesson | |
└ Score | float | Full Score | |
└ StudentInfo | Object | Student Info | |
└ StudentUid | Int64 | Student's UID | |
└ StudentName | String | Student Name: The student's name as displayed in the assignment module of the ClassIn client. | |
└ StudentAccount | String | Student Account: If the student has a registered mobile phone number, the mobile number will be used for the data push. If no mobile number is available, the email address will be used instead. | |
└ SubmissionTime | Int64 | AnswerSheet Submission Time | |
└ AnswerDuration | Int64 | The time student spent on the AnswerSheet(second) | |
└ CorrectionTime | Int64 | Grading Time | |
└ StudentScoringRate | float | Student Score Rate: A decimal value, for example 0.8. Calculation logic: StudentScoringRate = The score students received in the assignment/Full score | |
└ TeacherInfo | Object | Reserved Field Grading Teacher Information Currently empty | |
└ TeacherUid | Int64 | Reserved Field . Teacher UID. Currently, the value of Uid is 0,will be updated in some later verson | |
└ TeacherName | String | Reserved Field. Teacher Name: The teacher's name as displayed in the assignment module of the ClassIn client. Empty now | |
└ TeacherAccount | String | Reserved Field. Teacher Account: If the teacher has a registered mobile phone number, the mobile number will be used for the data push. If no mobile number is available, the email address will be used instead. Empty if the AnswerSheet is auto grading | |
└TopicDetails | array[object] | array | |
└TopicId | int | id of the topic as 1 | |
└TopicType | String | type of the topic, (string as "1") 1: Single choice,2: Multiple choice,3:True or False,4:Fills-up,5:essay question , 6: Comprehensive; | |
└ TopicResult | int | 0 = waiting for grading,1=correct,3=half correct,2=incorrect,4=no answer | |
└TopicScore | float | the student's score of the topic | |
└TopicMaxScore | float | max score of the topic | |
└SubTopicDetails | array[object] | if there's no subtopic, it's an empty array [] | |
└SubTopicId | int | id of the subtopic | |
└SubTopicType | String | type of the subtopic (string as "1") 1: Single choice, 2: Multiple choice, 3: True or False, 4: Fills-up, 5: essay question , 5: Comprehensive; | |
└SubTopicResult | int[] | 0 = waiting for grading,1=correct,3=half correct,2=incorrect,4=no answer | |
└SubTopicScore | float | score of the subtopic | |
└SubTopicMaxScore | int | max score of the subtopic |
Instance
{
"CourseID": 429724,
"Cmd": "ExamScore",
"CourseName": "Test Class",
"SID": 187286,
"Data": {
"ClassId": 34928113,
"TeacherInfo": {
"TeacherName": "",
"TeacherAccount": "",
"TeacherUid": 0
},
"ActivityName": "AnswerSheet on Monday",
"UnitName": "Unit 1",
"AnswerDuration": 57,
"ActivityId": 32044258,
"Score": 24,
"StudentInfo": {
"StudentName": "Tom",
"StudentAccount": "12133333301",
"StudentUid": 187268
},
"UnitId": 32014550,
"SubmissionTime": 1729576858,
"TopicDetails": [{
"TopicId": 1,
"TopicType": "1",
"SubTopicDetails": [],
"TopicResult": [2],
"TopicMaxScore": 5,
"TopicScore": 0
},
{
"TopicId": 2,
"TopicType": "5",
"TopicResult": [3],
"TopicMaxScore": 4,
"TopicScore": 2
},
{
"TopicId": 3,
"TopicType": "4",
"TopicResult": [2, 2, 2],
"TopicMaxScore": 6,
"TopicScore": 0
},
{
"TopicId": 4,
"TopicType": "3",
"TopicResult": [2],
"TopicMaxScore": 9,
"TopicScore": 0
}],
"StudentScoringRate": 0.083333,
"CorrectionTime": 1729576949
}
}