Webhook និងព្រឹត្តិការណ៍
កំណែ API 2026-10-affable-towhee
Lingara កត់ត្រាអ្វីដែលកើតឡើងចំពោះផែនការមេរៀន និងការប្រើប្រាស់នៃគណនីរបស់អ្នក ជាព្រឹត្តិការណ៍ ហើយទទួលព្រឹត្តិការណ៍ពីហ្គេម ឬកម្មវិធីរបស់អ្នក។ ព្រឹត្តិការណ៍នីមួយៗ មិនថាធ្វើដំណើរតាមផ្លូវណាទេ មានស្រោមសំបុត្រដូចគ្នា ហើយកាតាឡុកព្រឹត្តិការណ៍រាយបញ្ជីពួកវាទាំងអស់។
ស្រោមសំបុត្រ
ព្រឹត្តិការណ៍នីមួយៗផ្ទុកវាលប្រាំមួយ។ id ចាប់ផ្ដើមដោយ lgr_evt_ មានតែមួយគត់ ហើយជាសោសម្រាប់លុបការស្ទួន។ type ដាក់ឈ្មោះព្រឹត្តិការណ៍។ created_at គឺជាពេលដែលវាកើតឡើង។ api_version គឺជាកំណែដែល data មានទម្រង់តាម៖ កំណែដែលក្លាយអិនត៍របស់អ្នកត្រូវបានភ្ជាប់ ឬនៅលើហ្វីដ និងស្ទ្រីម គឺកំណែដែលសំណើរបស់អ្នកបានដាក់ឈ្មោះក្នុង Lingara-Version។ subject ចាប់ផ្ដើមដោយ lgr_sub_ ហើយប្រាប់ថាព្រឹត្តិការណ៍និយាយអំពីនរណា៖ វាថេរសម្រាប់ក្លាយអិនត៍របស់អ្នក ប៉ុន្តែខុសគ្នាសម្រាប់ក្លាយអិនត៍នីមួយៗ ហើយមិនដែលជាអ៊ីមែល ឈ្មោះ ឬ ID គណនីទេ។ data តូច ហើយដាក់ឈ្មោះធនធាន ជាជាងចម្លងពួកវា៖ ទាញយកធនធានដោយវិសាលភាពដែលវាត្រូវការ។
ប្រភេទពីរត្រូវការការពន្យល់មួយប្រយោគម្នាក់ៗ។ lesson_plan.ready អាចមកដល់ពីរដងសម្រាប់ផែនការមួយ ដំបូងជាមួយ data.status partial ហើយបន្ទាប់មក complete៖ ធ្វើសកម្មភាពលើលើកទីមួយ ដើម្បីបានផែនការដែលអាចប្រើបាន ឬរង់ចាំ complete ដើម្បីបានគ្រប់សំណុំ។ usage.threshold_reached ត្រូវបានផ្ញើតែសម្រាប់គណនី និងក្លាយអិនត៍ដែលបង់តាមការប្រើប្រាស់ប៉ុណ្ណោះ ហើយការលោតហួសកម្រិតច្រើនក្នុងពេលតែមួយ រាយការណ៍តែកម្រិតខ្ពស់បំផុតដែលបានឆ្លងកាត់ប៉ុណ្ណោះ ដូច្នេះកុំរំពឹងព្រឹត្តិការណ៍មួយក្នុងមួយកម្រិត។
កំណត់ហេតុមួយ វិធីបីដើម្បីស្ដាប់វា
Webhook សមស្របសម្រាប់ម៉ាស៊ីនមេដែលមានចំណុចបញ្ចប់ HTTPS សាធារណៈ។ ហ្វីដ និងស្ទ្រីមសមស្របសម្រាប់កម្មវិធីដែលគ្មានវា ដូចជាហ្គេមនៅលើម៉ាស៊ីនរបស់អ្នកលេង។ ស្រោមសំបុត្រដូចគ្នានៅលើគ្រប់ផ្លូវ ដូច្នេះកម្មវិធីអាចចាប់ផ្ដើមនៅលើហ្វីដ ហើយប្ដូរទៅ webhook នៅពេលក្រោយ ដោយមិនប្ដូររបៀបដែលវាអានព្រឹត្តិការណ៍។ ផ្លូវព្រឹត្តិការណ៍ឆ្លើយតបកម្មវិធីដើម។ ហ្គេមដែលដំណើរការក្នុងកម្មវិធីរុករកមិនទាន់អាចហៅពួកវាបានទេ ព្រោះ /v1/ មិនឆ្លើយតបសំណើ preflight ឆ្លងប្រភពទេ។
អ្នកណាឮព្រឹត្តិការណ៍
ក្លាយអិនត៍ឮព្រឹត្តិការណ៍មួយ នៅពេលវាកាន់ events:read និងវិសាលភាពផ្ទាល់នៃប្រភេទព្រឹត្តិការណ៍នោះ ដែលកាតាឡុករាយបញ្ជី ហើយនៅពេលព្រឹត្តិការណ៍និយាយអំពីម្ចាស់របស់ក្លាយអិនត៍។ នៅលើហ្វីដ និងស្ទ្រីម វិសាលភាពនៃថូខឹនចូលប្រើបង្រួមវាបន្ថែមទៀត ហើយ types បង្រួមវាត្រឹមប្រភេទដែលអ្នកដាក់ឈ្មោះ។ webhook.test ទៅតែចំណុចបញ្ចប់ដែលវាត្រូវបានផ្ញើទៅប៉ុណ្ណោះ មិនដែលទៅហ្វីដទេ ហើយមិនអាចជាវបានទេ។ app.installed និង app.uninstalled ទៅតែក្លាយអិនត៍ផ្ទាល់របស់កម្មវិធីនោះប៉ុណ្ណោះ មិនដែលទៅក្លាយអិនត៍ផ្សេងទៀតនៃគណនីដដែលទេ។
ចុះឈ្មោះចំណុចបញ្ចប់
ចុះឈ្មោះចំណុចបញ្ចប់នៅលើទំព័រ Webhook នៃកម្មវិធីវេប Lingara នៅ app.getlingara.com/admin/webhooks ដោយជ្រើសរើសក្លាយអិនត៍ជាមុនសិន។ URL របស់វាត្រូវតែប្រើ https នៅលើច្រក 443 ហើយម៉ាស៊ីនរបស់វាត្រូវតែដោះស្រាយទៅអាសយដ្ឋានសាធារណៈតែប៉ុណ្ណោះ។ ជ្រើសរើស ព្រឹត្តិការណ៍ដែលត្រូវផ្ញើ៖ មានតែប្រភេទដែលវិសាលភាពរបស់ក្លាយអិនត៍អនុញ្ញាតប៉ុណ្ណោះដែលត្រូវបានផ្ដល់ជូន។ URL និងព្រឹត្តិការណ៍មិនអាចកែសម្រួលនៅពេលក្រោយបានទេ៖ បន្ថែមចំណុចបញ្ចប់ថ្មី ហើយលុបចំណុចចាស់។ សម្ងាត់ចុះហត្ថលេខាចាប់ផ្ដើមដោយ lgr_whsec_ ហើយត្រូវបានបង្ហាញតែម្ដងប៉ុណ្ណោះ។
ផ្ទៀងផ្ទាត់ការបញ្ជូន
ការបញ្ជូននីមួយៗគឺជា POST ដែលមានក្បាលបី តាមលក្ខណៈបច្ចេកទេស Standard Webhooks៖ webhook-id (id របស់ព្រឹត្តិការណ៍) webhook-timestamp និង webhook-signature។ សោ HMAC គឺជាផ្នែកនៃសម្ងាត់បន្ទាប់ពី lgr_whsec_ ដែលបានឌិកូដពី base64 មិនដែលជាសម្ងាត់ជាខ្សែអក្សរទេ។ ផ្ទៀងផ្ទាត់មុនពេលញែកតួ លើបៃដើមរបស់វា ដូចខាងក្រោម។ បដិសេធការបញ្ជូនដែលត្រាពេលវេលារបស់វាឃ្លាតពីពេលនេះលើសពីប្រាំនាទី ដែលជាលំនាំដើមនៃបណ្ណាល័យ Standard Webhooks៖ វាការពារការបញ្ជូនដែលត្រូវបានចាប់យក មិនឱ្យត្រូវបានចាក់ឡើងវិញ។
signed = webhook-id + "." + webhook-timestamp + "." + raw request body
key = base64_decode(the secret after its prefix)
expected = "v1," + base64(hmac_sha256(key, signed))
accept if |now - webhook-timestamp| <= 5 minutes
and some entry of webhook-signature (space-separated) equals expected
(compare in constant time)Standard Webhooks បោះពុម្ពកម្មវិធីផ្ទៀងផ្ទាត់សម្រាប់ភាសាភាគច្រើន។ ពួកវារំពឹងសម្ងាត់ដែលសរសេរជា whsec_ តាមដោយ base64 ឬជា base64 សុទ្ធ ដូច្នេះសូមផ្ដល់ឱ្យពួកវានូវផ្នែកនៃសម្ងាត់ Lingara បន្ទាប់ពី lgr_whsec_។ បណ្ណាល័យផ្ទាល់របស់ Lingara ទទួលយកសម្ងាត់ទាំងមូល។
ឆ្លើយតបឱ្យលឿន រំពឹងការព្យាយាមម្ដងទៀត
ឆ្លើយតបដោយ 2xx ណាមួយក្នុងរយៈពេល 10 វិនាទី ហើយធ្វើការងារនៅពេលក្រោយ។ អ្វីផ្សេងទៀត រួមទាំងការអស់ពេល ឬ 3xx (ការបញ្ជូនបន្តមិនត្រូវបានធ្វើតាមទេ) ត្រូវបានព្យាយាមម្ដងទៀតដោយចន្លោះពេលកាន់តែវែង ប្រហែលមួយថ្ងៃ។ 410 ដែលឆ្លើយតបនឹងការបញ្ជូនស្វ័យប្រវត្តិ បិទចំណុចបញ្ចប់ភ្លាមៗ ប៉ុន្តែ 410 ដែលឆ្លើយតបនឹងការសាកល្បង ឬការបញ្ជូនម្ដងទៀតមិនបិទទេ។ បន្ទាប់ពីការបញ្ជូនបរាជ័យប្រាំថ្ងៃ ចំណុចបញ្ចប់ក៏ត្រូវបានបិទដែរ។ ទោះយ៉ាងណាក៏ដោយ ម្ចាស់របស់វាទទួលបានអ៊ីមែល។ កំហុសនៅខាង Lingara មិនដែលរាប់ក្នុងការបិទចំណុចបញ្ចប់ទេ។ ពីទំព័រ Webhook អ្នកអាចផ្ញើការសាកល្បង ឬបញ្ជូនម្ដងទៀតនូវការបញ្ជូនណាមួយក្នុង 30 ថ្ងៃចុងក្រោយ។ នីមួយៗជាការព្យាយាមតែមួយ មិនដែលព្យាយាមម្ដងទៀតទេ ហើយត្រូវបានផ្ញើសូម្បីតែទៅចំណុចបញ្ចប់ដែលបានបិទ។
ការបញ្ជូនកើតឡើងយ៉ាងហោចណាស់ម្ដង ហើយមិនតាមលំដាប់។ ព្រឹត្តិការណ៍ដដែលអាចមកដល់ពីរដង ហើយការព្យាយាមម្ដងទៀតអាចមកដល់បន្ទាប់ពីព្រឹត្តិការណ៍ក្រោយ។ webhook-id ដូចគ្នានៅលើគ្រប់ការព្យាយាមម្ដងទៀត និងនៅលើការបញ្ជូនម្ដងទៀតរហូតដល់ 30 ថ្ងៃក្រោយ។ កត់ត្រា id នីមួយៗដែលអ្នកបានដោះស្រាយរយៈពេល 30 ថ្ងៃ ហើយមិនអើពើនឹងការស្ទួន។ តម្រៀបតាម created_at ប្រសិនបើលំដាប់សំខាន់។
ប្ដូរសម្ងាត់ចុះហត្ថលេខាថ្មី
ចំណុចបញ្ចប់មួយអាចកាន់សម្ងាត់ចុះហត្ថលេខាពីរក្នុងពេលតែមួយ។ ខណៈដែលទាំងពីរនៅសកម្ម webhook-signature ផ្ទុកធាតុ v1, ពីរ ហើយអ្នកទទួលដែលទទួលយកណាមួយក៏បាន នៅតែដំណើរការ។ បន្ថែមសម្ងាត់ថ្មីទៅម៉ាស៊ីនមេរបស់អ្នក ដាក់ឱ្យប្រើ បន្ទាប់មកដកហូតសម្ងាត់ចាស់។
ហ្វីដ
GET /v1/events ជាមួយថូខឹនចូលប្រើរបស់ក្លាយអិនត៍ ត្រឡប់ items (ស្រោមសំបុត្រ) next_cursor និង has_more។ ថូខឹនត្រូវការ events:read និងវិសាលភាពនៃប្រភេទនីមួយៗដែលអ្នកចង់ឮ៖ ដោយមានតែ events:read ហ្វីដគឺទទេ។ វាចាប់ផ្ដើមពីពេលនេះ។ ផ្ដល់ start=oldest សម្រាប់ព្រឹត្តិការណ៍ប្រហែល 30 ថ្ងៃចុងក្រោយ។ វាមិនត្រូវការចំណុចបញ្ចប់សាធារណៈ ឬសម្ងាត់ចុះហត្ថលេខាទេ៖ ថូខឹនចូលប្រើបញ្ជាក់ថាអ្នកណាកំពុងសួរ។ ការប្ដូរខាងក្រោមស្នើសុំវិសាលភាពទាំងពីរដែលព្រឹត្តិការណ៍ផែនការមេរៀនត្រូវការ។
export LINGARA_TOKEN="$(curl -sS --fail-with-body -X POST "https://api.getlingara.com/oauth/token" \
-u "$LINGARA_CLIENT_ID:$LINGARA_CLIENT_SECRET" \
-d "grant_type=client_credentials" \
--data-urlencode "scope=events:read lesson_plans:read" | jq -r '.access_token // error(.error)')"curl "https://api.getlingara.com/v1/events" \
-H "Authorization: Bearer $LINGARA_TOKEN"next_cursor តែងតែមាន៖ រក្សាទុកវា ហើយផ្ដល់វាមកវិញជា cursor។ វាស្រអាប់។ has_more true មានន័យថាហៅម្ដងទៀតឥឡូវនេះ ហើយ false មានន័យថាអ្នកតាមទាន់ហើយ៖ ហៅម្ដងទៀតនៅពេលក្រោយ ឬបើកស្ទ្រីម។ ទស្សន៍ទ្រនិចដែលចាស់ជាង 30 ថ្ងៃ ត្រូវបានបដិសេធដោយ 410 និង cursor_expired។ បើគ្មានទស្សន៍ទ្រនិច ហ្វីដចាប់ផ្ដើមពីពេលនេះ ហើយព្រឹត្តិការណ៍នៅចន្លោះត្រូវបានរំលង។ ដើម្បីយកពួកវាមកវិញ សូមហៅជាមួយ start=oldest ដែលឈានទៅក្រោយរហូតដល់កន្លែងដែលព្រឹត្តិការណ៍នៅតែត្រូវបានរក្សាទុក ហើយរំលងតម្លៃ id ដែលអ្នកបានដោះស្រាយរួចហើយ។
ស្ទ្រីម
GET /v1/events/stream ផ្ទុកព្រឹត្តិការណ៍ដូចគ្នាជា server-sent events។ data របស់ស៊ុម event នីមួយៗគឺជាស្រោមសំបុត្រមួយ ហើយ id: របស់ស៊ុមនីមួយៗគឺជាទស្សន៍ទ្រនិច ដែលជាថូខឹនដូចគ្នានឹង next_cursor ដូច្នេះអ្នកអាចប្ដូររវាងហ្វីដ និងស្ទ្រីមដោយគ្មានចន្លោះ។ បន្ទាប់ពីការតភ្ជាប់ដាច់ ស៊ុម done (ស្ទ្រីមបញ្ចប់ខ្លួនឯងម្ដងម្កាល) ឬស៊ុម error សូមតភ្ជាប់ឡើងវិញដោយកំណត់ Last-Event-ID ទៅ id: ចុងក្រោយដែលអ្នកបានទទួល។ ក្លាយអិនត៍ SSE ភាគច្រើនធ្វើការនេះឱ្យអ្នក ហើយ tailEvents ក្នុងបណ្ណាល័យរបស់ Lingara ក៏ដូចគ្នា (streamEvents នៅទីនោះជាការតភ្ជាប់តែមួយ)។ វាជាទស្សន៍ទ្រនិច មិនមែន id របស់ព្រឹត្តិការណ៍ទេ។ ស្ទ្រីមផ្ញើចង្វាក់បេះដូង ដូច្នេះការតភ្ជាប់ដែលស្ងាត់គឺជាការតភ្ជាប់ដែលស្លាប់។
curl -N "https://api.getlingara.com/v1/events/stream" \
-H "Authorization: Bearer $LINGARA_TOKEN"ផ្ញើព្រឹត្តិការណ៍ទៅ Lingara
POST /v1/events ជាមួយ events:write ផ្ញើព្រឹត្តិការណ៍ទៅ Lingara ជា {type, data}៖ world.context_changed (scene source_lang target_lang level និងជាជម្រើស npc ដែលមាន name និង persona ព្រមទាំង tags) ឬ world.practice_requested (topic និងភាសា និងកម្រិតដូចគ្នា)។ Idempotency-Key ជាការចាំបាច់៖ រហូតដល់ 255 តួអក្សរ ASCII ដែលមើលឃើញ ដូចជា UUID។ បើគ្មានវា ចម្លើយគឺ 400 និង idempotency_key_required។ កំណត់វាម្ដងក្នុងមួយព្រឹត្តិការណ៍ ហើយផ្ញើសោដដែលនៅពេលព្យាយាមម្ដងទៀត។ សោមួយគឺព្រឹត្តិការណ៍មួយ៖ ក្នុងរយៈពេលមួយថ្ងៃ សំណើទីពីរដែលមានសោដដែលទទួលបានចម្លើយទីមួយ (ស្មើគ្នាជា JSON មិនមែនបៃនីមួយៗទេ) ទោះបីតួរបស់វាខុសគ្នាក៏ដោយ ហើយបន្ទាប់ពីនោះ វាទទួលបានព្រឹត្តិការណ៍ដដែល ដូចខាងក្រោម។ ព្រឹត្តិការណ៍ចូលមិនត្រូវបានចុះហត្ថលេខាទេ៖ ថូខឹនចូលប្រើរបស់អ្នកគឺជាភស្តុតាង។ ពិពណ៌នាពិភពលោក មិនដែលពិពណ៌នាអ្នកលេងទេ៖ គ្មានឈ្មោះ ឬការជជែកក្នុង scene npc topic ឬ tags ទេ។
export LINGARA_TOKEN="$(curl -sS --fail-with-body -X POST "https://api.getlingara.com/oauth/token" \
-u "$LINGARA_CLIENT_ID:$LINGARA_CLIENT_SECRET" \
-d "grant_type=client_credentials" \
--data-urlencode "scope=events:write lesson_plans:write" | jq -r '.access_token // error(.error)')"curl -X POST "https://api.getlingara.com/v1/events" \
-H "Authorization: Bearer $LINGARA_TOKEN" \
-H "Idempotency-Key: $IDEMPOTENCY_KEY" \
-H "Content-Type: application/json" \
-d '{"type":"world.context_changed","data":{"scene":"A night market in Taipei, just after rain","npc":{"name":"Auntie Lin","persona":"a street-food vendor who likes to haggle"},"source_lang":"en","target_lang":"zh","level":3,"tags":["market","food","chapter-2"],"generate":true}}'វាលអត្ថបទនីមួយៗគឺជាបន្ទាត់មួយនៃតួអក្សរដែលមើលឃើញ ដែលរាប់បន្ទាប់ពីកាត់ដកឃ្លានៅចុងទាំងពីរចេញ៖ scene និង topic រហូតដល់ 160 npc.name រហូតដល់ 32 និង npc.persona រហូតដល់ 120។ ការចុះបន្ទាត់ ថេប និងតួអក្សរបញ្ជាផ្សេងទៀតត្រូវបានបដិសេធ ហើយតួអក្សរមើលមិនឃើញ និងតួអក្សរធ្វើទ្រង់ទ្រាយក៏ដូចគ្នា៖ តួអក្សរបង្ខំទិសដៅ តួអក្សរទទឹងសូន្យ ក្រៅពីតួភ្ជាប់ដែលអក្សរមួយចំនួន និងអេម៉ូជីត្រូវការ ប្លុកស្លាក និងតួអក្សរប្រើឯកជន។ tags ផ្ទុករហូតដល់ 8 ថូខឹនម៉ាស៊ីនអក្សរតូច ដែលនីមួយៗរហូតដល់ 24 តួអក្សរ ហើយមិនដែលទៅដល់ផែនការមេរៀនទេ។ level គឺពី 1 ដល់ 9 ហើយភាសាទាំងពីរត្រូវតែខុសគ្នា។ សំណើដែលនៅក្រៅដែនកំណត់ទាំងនេះត្រូវបានបដិសេធដោយ 400 ហើយមិនកត់ត្រាព្រឹត្តិការណ៍ទេ។
ជាមួយ "generate": true (លំនាំដើមសម្រាប់ world.practice_requested) ថូខឹនក៏ត្រូវការ lesson_plans:write ដែរ។ បើគ្មានវា សំណើត្រូវបានបដិសេធដោយ 403 ហើយគ្មានព្រឹត្តិការណ៍ត្រូវបានកត់ត្រាទេ។ បើមានវា Lingara ចាប់ផ្ដើមផែនការមេរៀនមួយ ដោយមានការពិនិត្យដូចគ្នា និងវិក្កយបត្រដូចគ្នានឹងការបង្កើតវាដោយផ្ទាល់ ហើយ reaction នៃចម្លើយ 202 ប្រាប់ពីអ្វីដែលបានកើតឡើង។ ជាមួយ started និង plan_status generating នោះ lesson_plan.ready ឬ lesson_plan.failed ដែល data.plan_id របស់វាជា plan_id នៃចម្លើយ នឹងមកតាមក្រោយ នៅលើគ្រប់ផ្លូវដែលអ្នកប្រើ។ ជាមួយ partial ឬ complete ផែនការមកពីបណ្ណាល័យ ហើយអាចអានបានឥឡូវនេះ ហើយគ្មានព្រឹត្តិការណ៍ណាមួយត្រូវបានសន្យាទេ៖ មួយអាចនៅតែមកដល់ ដូច្នេះមានតែ generating ទេដែលសមនឹងរង់ចាំ។ ជាមួយ refused ឬ failed ព្រឹត្តិការណ៍នៅតែមានសុពលភាព។ វាមិនត្រូវបានព្យាយាមម្ដងទៀតក្រោមសោដដែលទេ ដូច្នេះសូមផ្ញើព្រឹត្តិការណ៍ថ្មីដើម្បីព្យាយាមម្ដងទៀត។
ការព្យាយាមម្ដងទៀតក្នុងរយៈពេលមួយថ្ងៃទទួលបានចម្លើយទីមួយមកវិញ។ ការព្យាយាមម្ដងទៀតបន្ទាប់ពីនោះ ត្រូវបានសង់ឡើងវិញពីព្រឹត្តិការណ៍ដែលបានរក្សាទុក ដែលរក្សាផែនការដែលវាបានចាប់ផ្ដើម ប៉ុន្តែមិនរក្សាមូលហេតុដែលប្រតិកម្មត្រូវបានបដិសេធទេ។ ដូច្នេះការព្យាយាមម្ដងទៀតយឺត អាចឆ្លើយដោយ reaction failed និង internal៖ នោះមានន័យថាលទ្ធផលទីមួយមិនត្រូវបានកត់ត្រាទេ មិនមែនថាគ្មានផែនការទេ។ អានផែនការតាម plan_id របស់វា ប្រសិនបើអ្នកបានរក្សាទុកវា ឬផ្ញើព្រឹត្តិការណ៍ថ្មី។
Tidewater Games៖ ហ្គេមដែលគ្មានម៉ាស៊ីនមេ
Tidewater Games ដែលជាស្ទូឌីយោប្រឌិត បង្កើតហ្គេម Godot មួយ ដែលអ្នកលេងរុករកផ្សាររាត្រីមួយ។ អ្នកអភិវឌ្ឍន៍របស់វាដំណើរការហ្គេមនៅលើម៉ាស៊ីនផ្ទាល់ខ្លួន ជាមួយក្លាយអិនត៍ផ្ទាល់ខ្លួន។
អ្នកលេងដើរចូលតូបគុយទាវមួយ។ ហ្គេមផ្ញើ world.context_changed ជាមួយ "generate": true ដែលជាពាក្យបញ្ជាក្នុងផ្នែក «ផ្ញើព្រឹត្តិការណ៍ទៅ Lingara» ខាងលើ ហើយរក្សាទុក plan_id ពីចម្លើយ។
ប្រសិនបើ plan_status គឺ generating ហ្គេមអានស្ទ្រីម ឬហៅហ្វីដម្ដងហើយម្ដងទៀត រហូតដល់ lesson_plan.ready ដែលមាន plan_id នោះមកដល់។ បន្ទាប់មកវាអានផែនការជាមួយ lesson_plans:read ដូចខាងក្រោម។ ប្រសិនបើផែនការបាន complete រួចហើយ វាអានវាភ្លាមៗ។
export LINGARA_TOKEN="$(curl -sS --fail-with-body -X POST "https://api.getlingara.com/oauth/token" \
-u "$LINGARA_CLIENT_ID:$LINGARA_CLIENT_SECRET" \
-d "grant_type=client_credentials" \
--data-urlencode "scope=lesson_plans:read" | jq -r '.access_token // error(.error)')"curl "https://api.getlingara.com/v1/lesson-plans/$ID" \
-H "Authorization: Bearer $LINGARA_TOKEN"ក្រោយមក ស្ទូឌីយោបន្ថែមម៉ាស៊ីនមេតូចមួយដែលមានចំណុចបញ្ចប់ HTTPS ហើយចុះឈ្មោះវាសម្រាប់ lesson_plan.ready។ ព្រឹត្តិការណ៍ដដែលមកដល់ទីនោះ ជាមួយ id ដដែល ហើយកូដរបស់ហ្គេមសម្រាប់អានវាមិនផ្លាស់ប្ដូរទេ។
សម្ងាត់ក្លាយអិនត៍មិនត្រូវដាក់ក្នុងកំណែហ្គេមដែលចេញផ្សាយដាច់ខាត ព្រោះអ្វីៗនៅលើឧបករណ៍របស់អ្នកលេងអាចត្រូវបានអាន។ រហូតដល់ Lingara គាំទ្រការចូលគណនីជំនួសអ្នកលេង ហ្គេមនៅលើម៉ាស៊ីនរបស់អ្នកលេងនិយាយជាមួយម៉ាស៊ីនមេផ្ទាល់របស់ស្ទូឌីយោ ហើយមានតែច្បាប់ចម្លងផ្ទាល់របស់អ្នកអភិវឌ្ឍន៍ប៉ុណ្ណោះ ដែលនិយាយជាមួយ Lingara ដោយផ្ទាល់។
ថ្លៃនៃព្រឹត្តិការណ៍
ការប្រើប្រាស់របស់ក្លាយអិនត៍អ្នក រាប់ព្រឹត្តិការណ៍ចូលនីមួយៗដែលបានទទួលយក ការហៅហ្វីដនីមួយៗ និងស្ទ្រីមនីមួយៗដែលបានបើក ដូចដែលវារាប់គ្រប់ការហៅ /v1/។ ព្រឹត្តិការណ៍ដែលផ្ញើជាមួយ "generate": true ក៏ត្រូវបានរាប់ជាផែនការមេរៀនផងដែរ។ ការបញ្ជូន webhook នីមួយៗត្រូវបានរាប់ម្ដងក្នុងមួយព្រឹត្តិការណ៍ក្នុងមួយចំណុចបញ្ចប់ នៅ 2xx ដំបូងរបស់វា មិនថាជាការព្យាយាមលើកទីប៉ុន្មានទេ។ វាមិនដែលត្រូវបានរាប់ម្ដងទៀតទេ ហើយការសាកល្បងមិនដែលត្រូវបានរាប់ទេ។ GET /v1/usage បង្ហាញការប្រើប្រាស់ខែនេះរហូតមកដល់ពេលនេះ។
ប្រសិនបើការបកប្រែ និងឯកសារយោងជាភាសាអង់គ្លេសខុសគ្នា ឯកសារយោងជាភាសាអង់គ្លេសគឺជាឯកសារដែលត្រឹមត្រូវ។