API សាធារណៈ & សោ API
ចូលប្រើកន្លែងធ្វើការតាមកម្មវិធី — អានគម្រោង វគ្គ ព្រឹត្តិការណ៍ផ្ទាល់ខ្លួន និងក្រុមចម្រោះ ហើយភ្ជាប់លេខសម្គាល់អតិថិជនទៅវគ្គ — ការពារដោយសោ API ដែលកំណត់វិសាលភាពតាមកន្លែងធ្វើការ។
1. ទិដ្ឋភាពទូទៅ
API MousePlayer អនុញ្ញាតឱ្យទាញទិន្នន័យពីកន្លែងធ្វើការទៅផ្ទាំងគ្រប់គ្រង ឃ្លាំងទិន្នន័យ ឬឧបករណ៍ផ្ទៃក្នុងផ្ទាល់។ ក្រៅពីការភ្ជាប់លេខសម្គាល់អតិថិជនទៅវគ្គ (identify ត្រូវការសោមានវិសាលភាពសរសេរ មើលវិសាលភាពសោ) វាជា ការអានតែប៉ុណ្ណោះ៖ មិនអាចកែ ឬលុបទិន្នន័យតាម API។
- URL មូលដ្ឋាន៖
https://www.mouseplayer.com/api/v1/ - ចម្លើយទាំងអស់ជា JSON។
- សំណើនីមួយៗត្រូវបានផ្ទៀងផ្ទាត់ដោយសោ API ហើយកំណត់វិសាលភាពស្វ័យប្រវត្តិទៅកន្លែងធ្វើការដែលសោជាកម្មសិទ្ធិ — សោពីកន្លែងធ្វើការមួយមិនដែលអាចឃើញទិន្នន័យកន្លែងផ្សេង សូម្បីតែដោយចៃដន្យ។
- ការថតចាក់វគ្គឡើងវិញពេញលេញ (ចលនាកណ្តុរ រូបថត DOM) មិន ត្រូវបានផ្តល់តាម API ទេ។ ទទួលបានទិន្នន័យមេតាវគ្គ ការមើលទំព័រ ព្រឹត្តិការណ៍ផ្ទាល់ខ្លួន និងក្រុមចម្រោះ — គ្រប់គ្រាន់សម្រាប់បង្កើតរបាយការណ៍ និងផ្ទាំងគ្រប់គ្រង ដោយមិនបញ្ជូនទិន្នន័យចាក់ឡើងវិញដើមទៅមក។
2. ការផ្ទៀងផ្ទាត់
បង្កើត និងគ្រប់គ្រងសោ API ក្រោម សោ API ក្នុងម៉ឺនុយគណនី (/api-keys)។ មានតែម្ចាស់ និងអ្នកគ្រប់គ្រងកន្លែងធ្វើការដែលអាចបង្កើត ឬដកហូតសោ។
រក្សាសោជាសម្ងាត់។ វាផ្តល់សិទ្ធិអានអ្វីទាំងអស់ក្នុងកន្លែងធ្វើការ។ សោពេញលេញបង្ហាញម្តងគត់ភ្លាមក្រោយបង្កើត — រក្សាវាក្នុងកម្មវិធីគ្រប់គ្រងពាក្យសម្ងាត់ ឬឃ្លាំងសោសម្ងាត់។ បើបាត់ ដកហូតវា ហើយបង្កើតថ្មី។
ផ្ញើសោជាតូខឹន Bearer ក្នុងបឋមកថា Authorization នៃសំណើនីមួយៗ៖
សោបាត់ មានទម្រង់ខុស ឬត្រូវបានដកហូត ទទួលចម្លើយ 401 ៖
តម្រូវការកញ្ចប់សេវា
REST API ជាផ្នែកនៃកញ្ចប់ Business និង Enterprise ។ កញ្ចប់សេវាយកពី ម្ចាស់ កន្លែងធ្វើការ ដូច្នេះសមាជិកក្រុមដែលបានអញ្ជើញទទួលតាម។ ការពិនិត្យរត់លើ រាល់សំណើមិនមែនតែពេលបង្កើតសោ — បើបន្ថយកញ្ចប់កន្លែងធ្វើការ សោដែលមានស្រាប់ឈប់ដំណើរការ ហើយផ្តល់ 403។
វិសាលភាពសោ
សោនីមួយៗមានវិសាលភាពក្នុងបុព្វបទផ្ទាល់ ដូច្នេះអាចដឹងមុខងារដោយគ្រាន់តែមើលវា — ក្នុង .envក្នុងសំបុត្របញ្ហា ឬក្នុងស្ថានីយ។
| បុព្វបទ | អត្ថន័យ |
|---|---|
mp_ro_ | អានតែប៉ុណ្ណោះ។ អានគម្រោង វគ្គ ព្រឹត្តិការណ៍ និងក្រុមចម្រោះ។ មិនអាចប្តូរអ្វី។ |
mp_rw_ | អាន និងសរសេរ។ អ្វីទាំងអស់ខាងលើ បន្ថែមការភ្ជាប់លេខសម្គាល់អតិថិជនតាមចំណុចបញ្ចប់ identify។ |
403 ជាមួយសារប្រាប់ប្រភេទសោ និងតម្រូវការចំណុចបញ្ចប់។ មិនអាចប្តូរវិសាលភាពក្រោយមក — បង្កើតសោថ្មី ហើយដកហូតសោចាស់។3. កម្រិតអត្រា
សោ API នីមួយៗត្រូវបានកំណត់ត្រឹម 60 សំណើក្នុងមួយនាទីដោយតាមដានតាមបង្អួចពេលរំកិល។ ពេលលើស សំណើទទួលចម្លើយ 429 រហូតដល់បង្អួចពេលទំនេរ៖
កំពុងបង្កើតអ្វីដែលត្រូវការកម្រិតខ្ពស់ជាង? ទាក់ទងតាម ជំនួយ ហើយប្រាប់ករណីប្រើប្រាស់។
4. ចំណុចបញ្ចប់
GET/api/v1/projects
រាយគម្រោងទាំងអស់ (គេហទំព័រដែលតាមដាន) ក្នុងកន្លែងធ្វើការ។
GET/api/v1/projects/{channelid}/sessions
រាយវគ្គអ្នកចូលមើលដែលបានថតសម្រាប់គម្រោង ថ្មីបំផុតមុន។ មានការបែងចែកទំព័រ។
| ប៉ារ៉ាម៉ែត្រសំណួរ | ការពិពណ៌នា |
|---|---|
page | លេខទំព័រ លំនាំដើម 1។ |
per_page | លទ្ធផលក្នុងមួយទំព័រ លំនាំដើម 25អតិបរមា 100។ |
since | តែវគ្គចាប់ផ្តើមនៅ ឬក្រោយកាលបរិច្ឆេទនេះ (YYYY-MM-DD)។ |
until | តែវគ្គចាប់ផ្តើមនៅ ឬមុនកាលបរិច្ឆេទនេះ។ |
GET/api/v1/sessions/{session_id}
ទិន្នន័យមេតាសម្រាប់វគ្គមួយ និងការមើលទំព័ររបស់វា។ មានចេតនាមិនរួមបញ្ចូលទិន្នន័យចាក់ឡើងវិញពេញលេញ — ប្រើកម្មវិធីចាក់ក្នុងផ្ទាំងគ្រប់គ្រងសម្រាប់វា។
GET/api/v1/sessions/{session_id}/events
ព្រឹត្តិការណ៍ផ្ទាល់ខ្លួនដែលដំណើរការក្នុងវគ្គ (ដូចព្រឹត្តិការណ៍ដែលផ្ញើដោយ mp('event', ...)) រួមទាំងប៉ារ៉ាម៉ែត្ររបស់វា។
GET/api/v1/projects/{channelid}/segments
រាយក្រុមចម្រោះអ្នកចូលមើលដែលបានកំណត់សម្រាប់គម្រោង (ទាំងក្រុមជាក់លាក់គម្រោង និងក្រុមទូទាំងកន្លែងធ្វើការ)។
5. ភ្ជាប់លេខសម្គាល់អតិថិជនពីប្រព័ន្ធខាងក្រោយ
កម្មវិធីរុករកជាញឹកញាប់មិនដឹងថាអ្នកណាកំពុងប្រើ។ ក្នុងផលិតផល B2B អត្តសញ្ញាណត្រូវបានកំណត់ក្រោយចូលគណនី — ក្នុងប្រព័ន្ធខាងក្រោយ។ ក្នុងហាង វាត្រូវបានកំណត់ជាមួយការបញ្ជាក់ការបញ្ជាទិញ។ ចំណុចបញ្ចប់នេះសម្រាប់ពេលនោះជាក់លាក់។
POST /api/v1/sessions/{session_id}/identify
Authorization: Bearer mp_live_xxxxxxxxxxxx
Content-Type: application/json
{"user_id": "customer-4711"}
// 200 OK
{"data": {"session_id": "s_a1b2c3", "user_id": "customer-4711",
"changed": true, "previous": null, "webhook_queued": true}}បន្ទាប់មកលេខសម្គាល់បង្ហាញក្នុងបញ្ជីវគ្គ អាចស្វែងរកនៅទីនោះ ហើយ webhook session_identified ដំណើរការ — នេះជាវិធីដែលវាទៅដល់ CRM។
"changed": false ហើយមិនផ្ញើ webhook។ ការបញ្ជាទិញដដែលមិនបង្កើតអតិថិជនសក្តានុពលទីពីរ។| ស្ថានភាព | ពេលណា |
|---|---|
400 | វាលបាត់ user_id វែងលើស 128 តួអក្សរ ឬមានតួអក្សរបញ្ជា។ យើងបដិសេធជំនួសកាត់ខ្លី — លេខសម្គាល់ដែលកាត់ដោយស្ងាត់មិនផ្គូផ្គងអ្វីក្នុង CRM ប៉ុន្តែមើលទៅជោគជ័យ។ |
404 | វគ្គមិនមាន ឬ មិនជារបស់កន្លែងធ្វើការ។ មានចេតនាឆ្លើយដូចគ្នាសម្រាប់ទាំងពីរ។ |
403 | កញ្ចប់សេវាកន្លែងធ្វើការមិនរួម API។ |
6. Webhook៖ ផ្ទៀងផ្ទាត់ហត្ថលេខា
Webhook កំណត់តាមគម្រោងក្រោម ការតភ្ជាប់រួមដែលមានសោសម្ងាត់ចុះហត្ថលេខាផងដែរ។ ការបញ្ជូននីមួយៗផ្ទុកបឋមកថាទាំងនេះ៖
| បឋមកថា | អត្ថន័យ |
|---|---|
X-MousePlayer-Event | ឈ្មោះព្រឹត្តិការណ៍ ឧ. session_identified |
X-MousePlayer-Timestamp | វិនាទី Unix — ជាផ្នែកនៃអត្ថបទចុះហត្ថលេខា |
X-MousePlayer-Attempt | 1 នៅការសាកដំបូង ខ្ពស់ជាងនៅការសាកឡើងវិញ |
X-MousePlayer-Signature | sha256=<hex> |
ហត្ថលេខាជា HMAC-SHA256 លើ timestamp + "." + raw bodyដោយប្រើសោសម្ងាត់ចុះហត្ថលេខារបស់គម្រោង។
// PHP $erwartet = 'sha256=' . hash_hmac('sha256', $timestamp . '.' . $rawBody, $secret); if (!hash_equals($erwartet, $signature)) { http_response_code(401); exit; } // Node const expected = 'sha256=' + crypto.createHmac('sha256', secret) .update(timestamp + '.' + rawBody).digest('hex');
ការបញ្ជូន និងការសាកឡើងវិញ
ការបញ្ជូនបរាជ័យត្រូវបានសាកឡើងវិញបន្ទាប់ពី 1 នាទី 5 នាទី 15 នាទី 1 ម៉ោង និង 6 ម៉ោងរួចបោះបង់។ 4xx ដែលឆ្លើយក្រៅពី 408 និង 429 នឹង មិន ត្រូវបានសាកឡើងវិញ — វាប្រាប់ "មិនមែនរបៀបនេះ" មិនមែន "មិនមែនឥឡូវ"។ ឆ្លើយ 2xx ឱ្យលឿន ហើយធ្វើការក្រោយ។ ការបញ្ជូនអស់ពេលបន្ទាប់ពី 10 វិនាទី។
ព្រឹត្តិការណ៍ដែលមាន
| ព្រឹត្តិការណ៍ | ដំណើរការ |
|---|---|
session_identified | ពេលវគ្គទទួលលេខសម្គាល់អតិថិជនជាលើកដំបូង — ពីកម្មវិធីរុករក ឬ API |
session_ended | ម្តង ពេលវគ្គបិទ |
goal_reached | ម្តងក្នុងមួយវគ្គ ពេលព្រឹត្តិការណ៍ផ្ទាល់ខ្លួនសម្រេចគោលដៅមួយ។ តែគោលដៅប្រភេទ “event” — គោលដៅ URL រយៈពេល ការមើលទំព័រ និងចីវលោមិនត្រូវបានវាយតម្លៃ។ ផ្ទុក goal_id, goal_name, goal_value និង currency។ |
high_value_session | ពេលអ្នកចូលមើលឆ្លងកម្រិតតម្លៃរបស់គម្រោងនេះជាលើកដំបូងក្នុងថ្ងៃណាមួយ។ កម្រិតនេះ គណនាពីការបែងចែកពិន្ទុផ្ទាល់ (ភាគរយទី 90 ក្នុង 90 ថ្ងៃចុងក្រោយ) មិនមែនលេខថេរ ហើយមិនមានរហូតដល់អ្នកចូលមើលយ៉ាងតិច 20 នាក់ត្រូវបានដាក់ពិន្ទុ។ ផ្ទុក visitor_id, value_score, threshold និងវគ្គដែលគួរមើលបំផុតក្នុងថ្ងៃនោះ។ |
funnel_dropoff | នៅចុងវគ្គដែលចូលចីវលោមួយ ប៉ុន្តែមិនបញ្ចប់។ ប្រាប់ជំហានដែលឈប់ (dropped_at)។ ការបោះបង់ជាអវត្តមានព្រឹត្តិការណ៍ ដូច្នេះអាចដឹងតែពេលវគ្គបញ្ចប់។ វគ្គដែលមិនធ្លាប់ចូលចីវលោមិនមែនជាការបោះបង់ ហើយមិនបង្កព្រឹត្តិការណ៍។ |
high_friction_session | ម្តងក្នុងមួយវគ្គ ពេលពិន្ទុឧបសគ្គឈានដល់កម្រិតកំណត់ជាលើកដំបូង (លំនាំដើម 60 ក្នុងចំណោម 100)។ ផ្ទុក friction_scoreសញ្ញាដែលជាមូលដ្ឋាន (reasons) និងសញ្ញាដែលធ្វើឱ្យឆ្លងកម្រិត (trigger)។ |
element_broken | ម្តង ពេលធាតុតាមដានរកមិនឃើញអ្វីក្នុងការមើលទំព័រដែលបានពិនិត្យអស់ជាច្រើនថ្ងៃ — ជាធម្មតាក្រោយរចនាឡើងវិញ។ វាដំណើរការម្តងទៀតតែក្រោយការសម្គាល់បានត្រូវគ្នា ហើយខូចម្តងទៀត។ ព្រឹត្តិការណ៍នេះជារបស់ គ្មានវគ្គណាមួយ៖ session_id និង session_url ជា null, link_url បើកការសម្គាល់ជំនួស ហើយ subject_id ប្រាប់ឈ្មោះការសម្គាល់ — ដូចគ្នាសម្រាប់គ្រប់កំណែ ដូច្នេះឧបករណ៍ជ្រើសរើសថ្មីដែលខូចម្តងទៀតចូលហេតុការណ៍បើកដដែល។ ផ្ទុក rule_id, rule_name, selector, page, checked_page_views, window_days និង last_matched។ គ្មានទិន្នន័យអ្នកចូលមើល។ |
element_recovered | សញ្ញាបញ្ចប់បញ្ហាសម្រាប់ element_broken៖ ម្តង ពេលការសម្គាល់ពិតជារកឃើញធាតុវិញ — ការមើលទំព័រតិចពេកមិនគ្រប់គ្រាន់។ ផ្ញើតែបើ element_broken បានចេញតាម webhook ហើយវាគ្មានប៊ូតុងបើកផ្ទាល់៖ ការជាវ element_broken រួមបញ្ចូលវា។ មាន subject_idដូចគ្នា ដូច្នេះ PagerDuty ដោះស្រាយហេតុការណ៍ ហើយ Opsgenie បិទការជូនដំណឹង។ ផ្ទុក matched_page_views និង checked_page_views បន្ថែម។ |
anomaly_detected | ម្តងក្នុងមួយថ្ងៃ ពេលម្សិលមិញខុសយ៉ាងច្បាស់ពី 28 ថ្ងៃមុន៖ វគ្គតិច ឬច្រើនជាងខ្លាំង អត្រាគោលដៅធ្លាក់ចុះ វគ្គមានឧបសគ្គ ឬកំហុស JS ច្រើនជាង។ ម៉ែត្រ និងទិសដដែលនៅស្ងាត់មួយសប្តាហ៍ (អាចកែបាន)។ ព្រឹត្តិការណ៍នេះជារបស់ គ្មានវគ្គណាមួយ៖ session_id និង session_url ជា null, link_url បើកទិដ្ឋភាពទូទៅគម្រោង ហើយ subject_id ប្រាប់ម៉ែត្រ ទិស និងថ្ងៃ។ ផ្ទុក metric (sessions, goal_rate, friction_rate, js_error_rate, lcp_p75, inp_p75, cls_p75), direction, day, value, expected, sessions, robust_z, z_score និងអត្ថបទអាចអានបាន summary និង hint។ គ្មានទិន្នន័យអ្នកចូលមើល។ សម្រាប់ Web Vitals measurements ជំនួស sessionsហើយ page (ទទេសម្រាប់គេហទំព័រទាំងមូល) និង device (desktop ឬ mobil) ប្រាប់កន្លែងដែលកើតឡើង; link_url បន្ទាប់មកបើកផ្ទាំង Web Vitals។ |
rage_click | ពេលរកឃើញការចុចដោយកំហឹង |
error_detected | ពេលមានករណីលើកលែងខាងមុខ |
ce | ការជាវរួមសម្រាប់ព្រឹត្តិការណ៍ផ្ទាល់ខ្លួន។ វា មិន រួមបញ្ចូលព្រឹត្តិការណ៍ខាងលើ — ព្រឹត្តិការណ៍ទាំងនោះមានប៊ូតុងបើកផ្ទាល់។ |
7. កំហុស & កូដស្ថានភាព
| ស្ថានភាព | អត្ថន័យ |
|---|---|
200 | ជោគជ័យ។ |
401 | សោ API បាត់ ទម្រង់ខុស ឬត្រូវបានដកហូត។ |
404 | គម្រោង ឬវគ្គដែលស្នើមិនមាន ឬមិនជារបស់កន្លែងធ្វើការ។ |
429 | លើសកម្រិតអត្រា — ផ្ញើលើស 60 សំណើក្នុងមួយនាទីជាមួយសោនេះ។ |
403 | កញ្ចប់កន្លែងធ្វើការមិនរួម REST API។ សារប្រាប់ទាំងកញ្ចប់ដែលត្រូវការ និងកញ្ចប់បច្ចុប្បន្ន។ |
8. ចំណាំសុវត្ថិភាព
- សោអានតែប៉ុណ្ណោះ (mp_ro_) មិនអាចប្តូរអ្វី។ សោសរសេរ (mp_rw_) អាចតែភ្ជាប់លេខសម្គាល់អតិថិជន។ គ្មានសោណាអាចលុបទិន្នន័យ ឬនាំចេញទិន្នន័យចាក់ឡើងវិញដើម។
- សំណើនីមួយៗត្រូវបានកំណត់វិសាលភាពស្វ័យប្រវត្តិទៅកន្លែងធ្វើការរបស់សោ — គ្មានវិធីបញ្ជូនលេខសម្គាល់កន្លែងធ្វើការផ្សេង ហើយឃើញទិន្នន័យអ្នកផ្សេង។
- ដកហូតសោគ្រប់ពេលពី /api-keys។ ការដកហូតមានប្រសិទ្ធភាពភ្លាម។
- ចាត់ទុកសោ API ដូចពាក្យសម្ងាត់។ បើ commit វាទៅឃ្លាំងកូដសាធារណៈដោយចៃដន្យ ដកហូតភ្លាម ហើយបង្កើតថ្មី។
ទំព័រព្រឹត្តិការណ៍មានកម្រិត (API v1, 14 តុលា 2026)
GET /api/v1/sessions/{session_id}/events ផ្តល់អតិបរមា 100 ព្រឹត្តិការណ៍តាមលំនាំដើម។ កំណត់ per_page ជាចំនួនគត់ពី 1 ដល់ 100។ បន្តតាម pagination.next_cursor ដោយផ្ញើ cursor ដដែលក្នុងសំណើបន្ទាប់ ហើយរក្សាវគ្គ និងកន្លែងធ្វើការដដែល។ ព្រឹត្តិការណ៍តម្រៀបតាម created_at និង event_id។ Cursor មានហត្ថលេខា ហើយភ្ជាប់ទៅវគ្គ និងកន្លែងធ្វើការនោះ។ មិនផ្តល់ចំនួនសរុប ឬលេខទំព័រ។
អារេ data និងផែនទី params ដែលមានស្រាប់នៅតែអាចប្រើបាន។ pagination.returned ជាចំនួនពិតដែលផ្តល់ ហើយ pagination.has_more បង្ហាញថាមានទំព័របន្ទាប់។ next_cursor ជា null ពេលបញ្ចប់។ ចម្លើយកំណត់ត្រឹម 524288 បៃ ដូច្នេះទំព័រមួយអាចមានព្រឹត្តិការណ៍តិចជាង per_page។ ក្នុងព្រឹត្តិការណ៍មួយ ផ្តល់អតិបរមា 128 ជួរប៉ារ៉ាម៉ែត្រ។ params_truncated ជា true បើមានច្រើនជាង។ ប៉ារ៉ាម៉ែត្រខ្សែអក្សរនីមួយៗនៅរក្សាកម្រិតមូលដ្ឋានទិន្នន័យ 255 តួអក្សរ។ ប៉ារ៉ាម៉ែត្រដែលកាត់ចេញមិនអាចប្រើតាមចំណុចបញ្ចប់នេះ។ ការបន្ថយ per_page មិនបង្កើនកម្រិតប៉ារ៉ាម៉ែត្រ។
ទំហំទំព័រមិនត្រឹមត្រូវ cursor ដែលកែ និង cursor សម្រាប់វគ្គ/កន្លែងធ្វើការផ្សេងផ្តល់ 400។ ទិន្នន័យព្រឹត្តិការណ៍មួយដែលធំពេកផ្តល់ 413។ ការពិនិត្យសិទ្ធិដែលមានស្រាប់នៅតែផ្តល់ 401, 403, 404 ឬ 409 តាមករណី។
កម្រិតនៅតែ 60 សំណើដែលបានផ្ទៀងផ្ទាត់ក្នុងមួយសោ API ក្នុងមួយនាទី។ ពេលអស់ ផ្តល់ 429 ជាមួយ Retry-After: 60។ បើ Redis ឬឧបករណ៍កំណត់អត្រាមិនអាចប្រើបាន សំណើផ្តល់ 503 ជាមួយ Retry-After: 5។ មិនដែលអនុញ្ញាតដោយគ្មានកម្រិតទេ។ គោរព Retry-After ហើយបន្ថែមការរង់ចាំថយក្រោយចៃដន្យ។ កុំសាកឡើងវិញជារង្វិលជុំរហ័ស។ ការបរាជ័យមូលដ្ឋានទិន្នន័យព្រឹត្តិការណ៍ក៏ផ្តល់ 503។ Cursor មិនបង្កករូបថតទេ៖ ការបញ្ចូលព្រមគ្នាដែលមានត្រាពេលវេលាចាស់ជាង អាចត្រូវការស្កេនថ្មី។
GET /api/v1/sessions/s_example/events?per_page=25 GET /api/v1/sessions/s_example/events?per_page=25&cursor=SIGNED_CURSOR
/api/v1/native ជាផ្លូវគ្រប់គ្រងប្រព័ន្ធខាងក្រោយសម្រាប់តែ Dev នៃការមើលជាមុន SDK ណេទីវ។ វានៅបិទក្នុងផលិតកម្ម។ សោ Bearer ខាងក្រោយត្រូវការវិសាលភាពអានសម្រាប់ list/replay និងសរសេរសម្រាប់ register/grant/delete/disable។ មានការពិនិត្យភាពអាចប្រើការមើលជាមុនណេទីវបន្ថែម។ កុំបង្កប់សោ API កន្លែងធ្វើការអចិន្ត្រៃយ៍ក្នុងកម្មវិធីចល័ត។