Self-paced

Explore our extensive collection of courses designed to help you master various subjects and skills. Whether you're a beginner or an advanced learner, there's something here for everyone.

Bootcamp

Learn live

Join us for our free workshops, webinars, and other events to learn more about our programs and get started on your journey to becoming a developer.

Upcoming live events

Learning library

For all the self-taught geeks out there, here is our content library with most of the learning materials we have produced throughout the years.

It makes sense to start learning by reading and watching videos about fundamentals and how things work.

Search from all Lessons


LoginGet Started
← Back to Lessons
  • learnpack

Edit on Github

Telemetry Configuration

Improve your experience in LearnPack with telemetry configuration

Improve your experience in LearnPack with telemetry configuration

Discover the power of LearnPack and take your course management to the next level by configuring telemetry. This feature is not just about collecting data; it's about unlocking insights that can revolutionize the learning journey. But how do you configure the path for telemetry.json or transmit events as they occur?

Simplify with learn.json

Each LearnPack course comes with a learn.json file, your command center for exercise testing, compiler selection, and more. The "telemetry" key is the latest innovation here, designed to streamline your data tracking.

Check out this example of telemetry key configuration: Telemetry Key Example

For registered users, LearnPack is always aware, transmitting events for key interactions:

  • Pressing the "next" button (event: open_step)
  • Running code with the "run" button (event: compile)
  • Launching tests with the "run tests" button (event: test)
  • Consulting the AI tutor (event: ai_interaction)

How often is telemetry sent?

Telemetry accumulates events to send them in key situations:

Batch

  • After executing learnpack start: When starting the LearnPack exercise, if telemetry is configured, it will be sent for the first time.
  • Opening a new step: After moving from one step to the next, the next step is marked as started and the current copy of telemetry is sent to the configured batch URL.

Stream

  • For each new event, if the stream URL is configured, LearnPack will send information through a webhook to the specified endpoint.

Remember: For telemetry to work and be sent correctly, you must configure both URLs as specified above.

What is the structure of telemetry?

Telemetry stores information about each exercise that is opened and when it was done, the results for each compilation or test, each work session, when the tutorial was first started, where it is being worked on, and identifiers for telemetry and the student if it is a 4Geeks student.

Here is an example of what telemetry looks like:

1{ 2 "telemetry_id": "atlbmot8wvalltng", 3 "slug": "prompt-engineering-for-beginners", 4 "agent": "vscode", 5 "tutorial_started_at": 1718211567826, 6 "steps": [ 7 { 8 "slug": "00-welcome", 9 "position": 0, 10 "files": [ 11 { 12 "path": "exercises\\00-welcome/README.es.md", 13 "name": "README.es.md", 14 "hidden": true 15 }, 16 { 17 "path": "exercises\\00-welcome/README.md", 18 "name": "README.md", 19 "hidden": true 20 }, 21 { 22 "path": "exercises\\00-welcome/__pycache__", 23 "name": "__pycache__", 24 "hidden": true 25 } 26 ], 27 "ai_interactions": [], 28 "compilations": [], 29 "tests": [], 30 "is_testeable": false 31 }, 32 { 33 "slug": "01.1-obtain-api-key", 34 "position": 3, 35 "files": [ 36 { 37 "path": "exercises\\01.1-obtain-api-key/app.py", 38 "name": "app.py", 39 "hidden": false 40 }, 41 { 42 "path": "exercises\\01.1-obtain-api-key/README.es.md", 43 "name": "README.es.md", 44 "hidden": true 45 }, 46 { 47 "path": "exercises\\01.1-obtain-api-key/README.md", 48 "name": "README.md", 49 "hidden": true 50 }, 51 { 52 "path": "exercises\\01.1-obtain-api-key/test.py", 53 "name": "test.py", 54 "hidden": true 55 }, 56 { 57 "path": "exercises\\01.1-obtain-api-key/__pycache__", 58 "name": "__pycache__", 59 "hidden": true 60 } 61 ], 62 "ai_interactions": [], 63 "compilations": [ 64 { 65 "stderr": "DQpbbm90aWNlXSBBIG5ldyByZWxlYXNlIG9mIHBpcCBhdmFpbGFibGU6IDIyLjMuMSAtPiAyNC4wDQpbbm90aWNlXSBUbyB1cGRhdGUsIHJ1bjogcHl0aG9uLmV4ZSAtbSBwaXAgaW5zdGFsbCAtLXVwZ3JhZGUgcGlwDQo=", 66 "stdout": "RW50ZXIgeW91ciBBUEkga2V5OiBSZXF1aXJlbWVudCBhbHJlYWR5IHNhdGlzZmllZDogcHl0aG9uLWRvdGVudiBpbiBjOlx1c2Vyc1xsZWdpb25cYXBwZGF0YVxsb2NhbFxwcm9ncmFtc1xweXRob25ccHl0aG9uMzExXGxpYlxzaXRlLXBhY2thZ2VzIChmcm9tIC1yIHJlcXVpcmVtZW50cy50eHQgKGxpbmUgMSkpICgxLjAuMSkNClJlcXVpcmVtZW50IGFscmVhZHkgc2F0aXNmaWVkOiBncm9xIGluIGM6XHVzZXJzXGxlZ2lvblxhcHBkYXRhXGxvY2FsXHByb2dyYW1zXHB5dGhvblxweXRob24zMTFcbGliXHNpdGUtcGFja2FnZXMgKGZyb20gLXIgcmVxdWlyZW1lbnRzLnR4dCAobGluZSAyKSkgKDAuOC4wKQ0KUmVxdWlyZW1lbnQgYWxyZWFkeSBzYXRpc2ZpZWQ6IGFueWlvPDUsPj0zLjUuMCBpbiBjOlx1c2Vyc1xsZWdpb25cYXBwZGF0YVxsb2NhbFxwcm9ncmFtc1xweXRob25ccHl0aG9uMzExXGxpYlxzaXRlLXBhY2thZ2VzIChmcm9tIGdyb3EtPi1yIHJlcXVpcmVtZW50cy50eHQgKGxpbmUgMikpICg0LjQuMCkNClJlcXVpcmVtZW50IGFscmVhZHkgc2F0aXNmaWVkOiBkaXN0cm88Miw+PTEuNy4wIGluIGM6XHVzZXJzXGxlZ2lvblxhcHBkYXRhXGxvY2FsXHByb2dyYW1zXHB5dGhvblxweXRob24zMTFcbGliXHNpdGUtcGFja2FnZXMgKGZyb20gZ3JvcS0+LXIgcmVxdWlyZW1lbnRzLnR4dCAobGluZSAyKSkgKDEuOS4wKQ0KUmVxdWlyZW1lbnQgYWxyZWFkeSBzYXRpc2ZpZWQ6IGh0dHB4PDEsPj0wLjIzLjAgaW4gYzpcdXNlcnNcbGVnaW9uXGFwcGRhdGFcbG9jYWxccHJvZ3JhbXNccHl0aG9uXHB5dGhvbjMxMVxsaWJcc2l0ZS1wYWNrYWdlcyAoZnJvbSBncm9xLT4tciByZXF1aXJlbWVudHMudHh0IChsaW5lIDIpKSAoMC4yNy4wKQ0KUmVxdWlyZW1lbnQgYWxyZWFkeSBzYXRpc2ZpZWQ6IHB5ZGFudGljPDMsPj0xLjkuMCBpbiBjOlx1c2Vyc1xsZWdpb25cYXBwZGF0YVxsb2NhbFxwcm9ncmFtc1xweXRob25ccHl0aG9uMzExXGxpYlxzaXRlLXBhY2thZ2VzIA==", 67 "signal": "SIGTERM", 68 "memoryUsage": 532480, 69 "cpuUsage": 0, 70 "errorType": "run-time", 71 "starting_at": 1718211884140, 72 "source_code": "aW1wb3J0IG9zDQojIERPIE5PVCBDSEFOR0UgVEhJUyBDT0RFDQoNCg0KQVBJX0tFWSA9IGlucHV0KCJFbnRlciB5b3VyIEFQSSBrZXk6ICIpDQoNCiMgU2F2ZSB0aGUgQVBJX0tFWSBpbiB0aGUgZG90ZW52IGZpbGUNCndpdGggb3BlbigiLmVudiIsICJ3IikgYXMgZjoNCiAgICBmLndyaXRlKGYiR1JPUV9BUElfS0VZPXtBUElfS0VZfVxuIikNCg0KIyBFeHBvcnQgdGhlIEFQSV9LRVkgYXMgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUNCm9zLmVudmlyb25bIkdST1FfQVBJX0tFWSJdID0gQVBJX0tFWQ0KDQojIEluc3RhbGwgdGhlIGRlcGVuZGVuY2llcyBpbiB0aGUgcmVxdWlyZW1lbnRzLnR4dCBmaWxlDQpwcmludCgiSW5zdGFsbGluZyBkZXBlbmRlbmNpZXMuLi4iKQ0Kb3Muc3lzdGVtKCJwaXAgaW5zdGFsbCAtciByZXF1aXJlbWVudHMudHh0IikNCg==", 73 "ended_at": 1718211886645, 74 "exit_code": null 75 } 76 ], 77 "tests": [ 78 { 79 "starting_at": 1718211893013, 80 "source_code": "aW1wb3J0IG9zDQojIERPIE5PVCBDSEFOR0UgVEhJUyBDT0RFDQoNCg0KQVBJX0tFWSA9IGlucHV0KCJFbnRlciB5b3VyIEFQSSBrZXk6ICIpDQoNCiMgU2F2ZSB0aGUgQVBJX0tFWSBpbiB0aGUgZG90ZW52IGZpbGUNCndpdGggb3BlbigiLmVudiIsICJ3IikgYXMgZjoNCiAgICBmLndyaXRlKGYiR1JPUV9BUElfS0VZPXtBUElfS0VZfVxuIikNCg0KIyBFeHBvcnQgdGhlIEFQSV9LRVkgYXMgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUNCm9zLmVudmlyb25bIkdST1FfQVBJX0tFWSJdID0gQVBJX0tFWQ0KDQojIEluc3RhbGwgdGhlIGRlcGVuZGVuY2llcyBpbiB0aGUgcmVxdWlyZW1lbnRzLnR4dCBmaWxlDQpwcmludCgiSW5zdGFsbGluZyBkZXBlbmRlbmNpZXMuLi4iKQ0Kb3Muc3lzdGVtKCJwaXAgaW5zdGFsbCAtciByZXF1aXJlbWVudHMudHh0IikNCg==", 81 "ended_at": 1718211893606, 82 "stdout": "G1sxbT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IHRlc3Qgc2Vzc2lvbiBzdGFydHMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0bWzBtDQpwbGF0Zm9ybSB3aW4zMiAtLSBQeXRob24gMy4xMS4zLCBweXRlc3QtOC4yLjIsIHBsdWdneS0xLjUuMA0Kcm9vdGRpcjogQzpcVXNlcnNcTEVHSU9OXFByb2plY3RzXGpvYnNcNGdlZWtzXHR1dG9yaWFsc1xwcm9tcHQtZW5nDQpwbHVnaW5zOiBhbnlpby00LjQuMCwgdGVzdGRveC0zLjEuMA0KY29sbGVjdGVkIDEgaXRlbQ0KDQpleGVyY2lzZXNcMDEuMS1vYnRhaW4tYXBpLWtleVx0ZXN0LnB5IBtbMzJtLhtbMG0bWzMybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMTAwJV0bWzBtDQoNChtbMzJtPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IBtbMzJtG1sxbTEgcGFzc2VkG1swbRtbMzJtIGluIDAuMDNzG1swbRtbMzJtID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PRtbMG0NCg==", 83 "stderr": "", 84 "exit_code": 0 85 } 86 ], 87 "is_testeable": true, 88 "opened_at": 1718211866688, 89 "completed_at": 1718211893606 90 }, 91 { 92 "slug": "02-write-your-first-prompt-", 93 "position": 4, 94 "files": [ 95 { 96 "path": "exercises\\02-write-your-first-prompt-/prompt.txt", 97 "name": "prompt.txt", 98 "hidden": false 99 }, 100 { 101 "path": "exercises\\02-write-your-first-prompt-/README.es.md", 102 "name": "README.es.md", 103 "hidden": true 104 }, 105 { 106 "path": "exercises\\02-write-your-first-prompt-/README.md", 107 "name": "README.md", 108 "hidden": true 109 }, 110 { 111 "path": "exercises\\02-write-your-first-prompt-/test.py", 112 "name": "test.py", 113 "hidden": true 114 }, 115 { 116 "path": "exercises\\02-write-your-first-prompt-/__pycache__", 117 "name": "__pycache__", 118 "hidden": true 119 } 120 ], 121 "ai_interactions": [], 122 "compilations": [], 123 "tests": [ 124 { 125 "starting_at": 1718211911284, 126 "ended_at": 1718211913734, 127 "stdout": "G1sxbT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IHRlc3Qgc2Vzc2lvbiBzdGFydHMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0bWzBtDQpwbGF0Zm9ybSB3aW4zMiAtLSBQeXRob24gMy4xMS4zLCBweXRlc3QtOC4yLjIsIHBsdWdneS0xLjUuMA0Kcm9vdGRpcjogQzpcVXNlcnNcTEVHSU9OXFByb2plY3RzXGpvYnNcNGdlZWtzXHR1dG9yaWFsc1xwcm9tcHQtZW5nDQpwbHVnaW5zOiBhbnlpby00LjQuMCwgdGVzdGRveC0zLjEuMA0KY29sbGVjdGVkIDMgaXRlbXMNCg0KZXhlcmNpc2VzXDAyLXdyaXRlLXlvdXItZmlyc3QtcHJvbXB0LVx0ZXN0LnB5IBtbMzJtLhtbMG0bWzMybS4bWzBtG1szMW1GG1swbRtbMzFtICAgICAgICAgICAgICAgICAgICAgICAgWzEwMCVdG1swbQ0KDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IEZBSUxVUkVTID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQobWzMxbRtbMW1fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18gdGVzdF9wcm9tcHQgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fG1swbQ0KDQogICAgQHB5dGVzdC5tYXJrLml0KCJUaGUgcHJvbXB0IE1VU1QgaW5jbHVkZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2hhcmFjdGVycywgdGhlIHNjZW5lLCBhbmQgYXQgbGVhc3Qgb25lIG1vcmUgZWxlbWVudC4iKQ0KICAgIGRlZiB0ZXN0X3Byb21wdCgpOg0KICAgICAgICBQUk9NUFQgPSBvcGVuKHBhdGgsICJyIikucmVhZCgpDQogICAgICAgIHJlc3VsdCA9IGNyZWF0ZV9wcm9tcHQoVEVTVEVSX1BST01QVCwgUFJPTVBUKQ0KICAgIA0KICAgICAgICBpZiAiQkFEX1BST01QVCIgaW4gcmVzdWx0Og0KICAgICAgICAgICAgc2F2ZV9yZXBvcnQocmVzdWx0KQ0KICAgICAgICBlbHNlOg0KICAgICAgICAgICAgZGVsZXRlX3JlcG9ydCgpDQogICAgDQo+ICAgICAgIGFzc2VydCAiR09PRF9QUk9NUFQiIGluIHJlc3VsdA0KXHgxYlsxbVx4MWJbMzFtRSAgICAgICBhc3NlcnQgJ0dPT0RfUFJPTVBUJyBpbiAiIyBCQURfUFJPTVBUIFxVMDAwMWY2YTlcXG5cXG5JdCBzZWVtcyBsaWtlIHlvdXIgcHJvbXB0IGlzIG1pc3Npbmcgc29tZSBlc3NlbnRpYWwgaW5mb3JtYXRpb24uIFRvIGNyZWF0ZSBhbiBlbmdhZ2luZyBzdG9yeSwgd2UgbmUuLi5lIHRoZXNlIGVzc2VudGlhbCBlbGVtZW50cywgYW5kIEknbGwgYmUgaGFwcHkgdG8gaGVscCB5b3UgY3JlYXRlIGEgY29tcGVsbGluZyBzdG9yeSBhYm91dCBDb29rZW5zaW8sIHRoZSBlbnRyZXByZW5ldXIhIlx4MWJbMG0NCg0KG1sxbRtbMzFtZXhlcmNpc2VzXDAyLXdyaXRlLXlvdXItZmlyc3QtcHJvbXB0LVx0ZXN0LnB5G1swbTo4MzogQXNzZXJ0aW9uRXJyb3INChtbMzZtG1sxbT09PT09PT09PT09PT09PT09PT09PT09PT09PSBzaG9ydCB0ZXN0IHN1bW1hcnkgaW5mbyA9PT09PT09PT09PT09PT09PT09PT09PT09PT0bWzBtDQpceDFiWzMxbUZBSUxFRFx4MWJbMG0gZXhlcmNpc2VzLzAyLXdyaXRlLXlvdXItZmlyc3QtcHJvbXB0LS90ZXN0LnB5OjpceDFiWzFtdGVzdF9wcm9tcHRceDFiWzBtIC0gYXNzZXJ0ICdHT09EX1BST01QVCcgaW4gIiMgQkFEX1BST01QVCBcVTAwMDFmNmE5XFxuXFxuSXQgc2VlbXMgbGlrZSB5b3VyIHByb21wdCBpcyBtaS4uLg0KG1szMW09PT09PT09PT09PT09PT09PT09PT09PT09IBtbMzFtG1sxbTEgZmFpbGVkG1swbSwgG1szMm0yIHBhc3NlZBtbMG0bWzMxbSBpbiAxLjg0cxtbMG0bWzMxbSA9PT09PT09PT09PT09PT09PT09PT09PT09G1swbQ0K", 128 "stderr": "G1sxbT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IHRlc3Qgc2Vzc2lvbiBzdGFydHMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0bWzBtDQpwbGF0Zm9ybSB3aW4zMiAtLSBQeXRob24gMy4xMS4zLCBweXRlc3QtOC4yLjIsIHBsdWdneS0xLjUuMA0Kcm9vdGRpcjogQzpcVXNlcnNcTEVHSU9OXFByb2plY3RzXGpvYnNcNGdlZWtzXHR1dG9yaWFsc1xwcm9tcHQtZW5nDQpwbHVnaW5zOiBhbnlpby00LjQuMCwgdGVzdGRveC0zLjEuMA0KY29sbGVjdGVkIDMgaXRlbXMNCg0KZXhlcmNpc2VzXDAyLXdyaXRlLXlvdXItZmlyc3QtcHJvbXB0LVx0ZXN0LnB5IBtbMzJtLhtbMG0bWzMybS4bWzBtG1szMW1GG1swbRtbMzFtICAgICAgICAgICAgICAgICAgICAgICAgWzEwMCVdG1swbQ0KDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IEZBSUxVUkVTID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQobWzMxbRtbMW1fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18gdGVzdF9wcm9tcHQgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fG1swbQ0KDQogICAgQHB5dGVzdC5tYXJrLml0KCJUaGUgcHJvbXB0IE1VU1QgaW5jbHVkZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2hhcmFjdGVycywgdGhlIHNjZW5lLCBhbmQgYXQgbGVhc3Qgb25lIG1vcmUgZWxlbWVudC4iKQ0KICAgIGRlZiB0ZXN0X3Byb21wdCgpOg0KICAgICAgICBQUk9NUFQgPSBvcGVuKHBhdGgsICJyIikucmVhZCgpDQogICAgICAgIHJlc3VsdCA9IGNyZWF0ZV9wcm9tcHQoVEVTVEVSX1BST01QVCwgUFJPTVBUKQ0KICAgIA0KICAgICAgICBpZiAiQkFEX1BST01QVCIgaW4gcmVzdWx0Og0KICAgICAgICAgICAgc2F2ZV9yZXBvcnQocmVzdWx0KQ0KICAgICAgICBlbHNlOg0KICAgICAgICAgICAgZGVsZXRlX3JlcG9ydCgpDQogICAgDQo+ICAgICAgIGFzc2VydCAiR09PRF9QUk9NUFQiIGluIHJlc3VsdA0KXHgxYlsxbVx4MWJbMzFtRSAgICAgICBhc3NlcnQgJ0dPT0RfUFJPTVBUJyBpbiAiIyBCQURfUFJPTVBUIFxVMDAwMWY2YTlcXG5cXG5JdCBzZWVtcyBsaWtlIHlvdXIgcHJvbXB0IGlzIG1pc3Npbmcgc29tZSBlc3NlbnRpYWwgaW5mb3JtYXRpb24uIFRvIGNyZWF0ZSBhbiBlbmdhZ2luZyBzdG9yeSwgd2UgbmUuLi5lIHRoZXNlIGVzc2VudGlhbCBlbGVtZW50cywgYW5kIEknbGwgYmUgaGFwcHkgdG8gaGVscCB5b3UgY3JlYXRlIGEgY29tcGVsbGluZyBzdG9yeSBhYm91dCBDb29rZW5zaW8sIHRoZSBlbnRyZXByZW5ldXIhIlx4MWJbMG0NCg0KG1sxbRtbMzFtZXhlcmNpc2VzXDAyLXdyaXRlLXlvdXItZmlyc3QtcHJvbXB0LVx0ZXN0LnB5G1swbTo4MzogQXNzZXJ0aW9uRXJyb3INChtbMzZtG1sxbT09PT09PT09PT09PT09PT09PT09PT09PT09PSBzaG9ydCB0ZXN0IHN1bW1hcnkgaW5mbyA9PT09PT09PT09PT09PT09PT09PT09PT09PT0bWzBtDQpceDFiWzMxbUZBSUxFRFx4MWJbMG0gZXhlcmNpc2VzLzAyLXdyaXRlLXlvdXItZmlyc3QtcHJvbXB0LS90ZXN0LnB5OjpceDFiWzFtdGVzdF9wcm9tcHRceDFiWzBtIC0gYXNzZXJ0ICdHT09EX1BST01QVCcgaW4gIiMgQkFEX1BST01QVCBcVTAwMDFmNmE5XFxuXFxuSXQgc2VlbXMgbGlrZSB5b3VyIHByb21wdCBpcyBtaS4uLg0KG1szMW09PT09PT09PT09PT09PT09PT09PT09PT09IBtbMzFtG1sxbTEgZmFpbGVkG1swbSwgG1szMm0yIHBhc3NlZBtbMG0bWzMxbSBpbiAxLjg0cxtbMG0bWzMxbSA9PT09PT09PT09PT09PT09PT09PT09PT09G1swbQ0KLAoKICAgCiAgICAgICAgICAbWzMxbVlvdXIgY29kZSBtdXN0IHRvIGNvbXBseSB3aXRoIHRoZSBmb2xsb3dpbmcgdGVzdHM6G1szOW0gCgogICAgIBtbMzFtG1sxbXggKGZhaWwpG1syMm0bWzM5bSAwLiAbWzM3bVRoZSBwcm9tcHQgTVVTVCBpbmNsdWRlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjaGFyYWN0ZXJzLCB0aGUgc2NlbmUsIGFuZCBhdCBsZWFzdCBvbmUgbW9yZSBlbGVtZW50LhtbMzltIAoK", 129 "exit_code": 1 130 } 131 ], 132 "is_testeable": true, 133 "opened_at": 1718211875020 134 }, 135 ...rest of the files... 136 ], 137 "workout_session": [ 138 { 139 "started_at": 1718211567826, 140 "ended_at": 1718211913735 141 }, 142 { 143 "started_at": 1718211952333 144 } 145 ], 146 "last_interaction_at": 1718211913735 147}

Ensure that your streaming and batch URLs are configured to receive POST requests. It is up to you to devise the logic that will distill the essential data from these interactions.

Dive into the world of telemetry configuration and elevate the educational experience with LearnPack!