← ត្រឡប់ទៅ Billbook

API កត់ត្រាបញ្ជីពីចម្ងាយ

ធ្វើបច្ចុប្បន្នភាពចុងក្រោយ៖ ១០ ឧសភា ២០២៦

កត់ត្រាធាតុចូលពី cURL, iOS Shortcuts ឬស្គ្រីបស្វ័យប្រវត្តិកម្មដោយប្រើ token API ផ្ទាល់ខ្លួន។ token គឺ សម្រាប់សរសេរតែប៉ុណ្ណោះ — វាអាចបញ្ចូលប្រតិបត្តិការ និងអានបញ្ជីប្រភេទ / ស្លាក ប៉ុន្តែមិនអាចអាន ឬលុបទិន្នន័យប្រតិបត្តិការណាមួយឡើយ។

1. ទទួលបាន token

ចូលជា admin បើក ការកំណត់ → 🔑 API កត់ត្រាបញ្ជីពីចម្ងាយ ហើយចុច "បង្កើត token"។

token អត្ថបទធម្មតាត្រូវបានបង្ហាញ តែម្តងគត់ — សូមចម្លងវាភ្លាមៗ។ ម៉ាស៊ីនមេរក្សាទុកតែ hash SHA-256 របស់វា ដូច្នេះ token ដែលបាត់អាចជំនួសបានតែដោយការបង្វិល (ដែលធ្វើឱ្យ token ចាស់លែងមានសុពលភាព)។

ទម្រង់ token៖ bb_<userId>_<secret>។ ផ្ញើវាជាមួយរាល់សំណើជា Authorization: Bearer <token>

2. POST /api/ingest — បញ្ចូលប្រតិបត្តិការមួយ

body នៃសំណើគឺជា object JSON ដែលមានវាលទាំងនេះ៖

  • title (string, ចាំបាច់) — ឈ្មោះប្រតិបត្តិការ
  • amount (number, ចាំបាច់) — ត្រូវតែជាចំនួនវិជ្ជមាន
  • type (string, ស្រេចចិត្ត, លំនាំដើម expense) — មួយក្នុងចំណោម expense / income / prepaid_expense / pending_income
  • category (string, ស្រេចចិត្ត) — ឈ្មោះប្រភេទ
  • note (string, ស្រេចចិត្ត) — កំណត់ចំណាំសេរី
  • created_at (string, ស្រេចចិត្ត) — ISO 8601; លំនាំដើមឥឡូវនេះ
curl -X POST https://billbook.me/api/ingest \
  -H "Authorization: Bearer bb_<userId>_<secret>" \
  -H "Content-Type: application/json" \
  -d '{"title":"Coffee","amount":120,"type":"expense","category":"Food"}'

# response: 201
{ "id": "...", "created_at": "..." }

3. GET /api/ingest/categories — បញ្ជីប្រភេទ

ត្រឡប់ឈ្មោះប្រភេទរបស់ admin តាមលំដាប់ម៉ឺនុយទម្លាក់ចុះនៃផ្ទាំងគ្រប់គ្រង។ ការឆ្លើយតបមានតែឈ្មោះប៉ុណ្ណោះ — គ្មាន ids, user ids ឬទិន្នន័យប្រតិបត្តិការ។

curl https://billbook.me/api/ingest/categories \
  -H "Authorization: Bearer bb_<userId>_<secret>"

# response: 200
{ "categories": ["Food", "Rent", "..."] }

4. GET /api/ingest/tags — ស្លាកដែលប្រើថ្មីៗ

ត្រឡប់បុព្វបទស្លាកដែលបានធ្វើបច្ចុប្បន្នភាពថ្មីៗបំផុត (សញ្ញា #XXX ដែលបង្កប់ក្នុងចំណងជើង)។ លំនាំដើម ២០; ប្រើ ?limit= ដើម្បីបដិសេធ (អតិបរមា ១០០)។

ត្រឡប់ array ទទេជំនួសឱ្យកំហុស ប្រសិនបើតារាង tag_prefixes មិនទាន់មាននៅឡើយ។

curl "https://billbook.me/api/ingest/tags?limit=20" \
  -H "Authorization: Bearer bb_<userId>_<secret>"

# response: 200
{ "tags": ["#management-fee", "#travel", "..."] }

5. លេខកូដកំហុស

កំហុសទាំងអស់គឺជា JSON៖ { "error": "message" }

  • 401 — ខ្វះការអនុញ្ញាត, ទម្រង់ token មិនត្រឹមត្រូវ, ត្រូវបានដកហូត ឬមិនត្រូវគ្នា
  • 402 — ការជាវផុតកំណត់; ត្រូវការបន្តដើម្បីសរសេរ
  • 405 — វិធីសាស្ត្រមិនគាំទ្រ (ឧ. GET លើ /api/ingest)
  • 501 — ម៉ាស៊ីនមេខ្វះ SUPABASE_SERVICE_ROLE_KEY
  • 500 — កំហុសផ្ទៃក្នុងផ្សេងទៀត

6. សុវត្ថិភាព និងដែនកំណត់

តាមការរចនា token អាចសរសេរបានតែទៅអង្គភាពផ្ទាល់ខ្លួនរបស់វា — វាមិនអាចក្លែងបន្លំជា orgs ផ្សេង ឬអានទិន្នន័យដែលមានស្រាប់ឡើយ៖

  • user_id តែងតែជាម្ចាស់ token; មិនអាចក្លែងបន្លំបាន
  • org_id តែងតែជា org របស់ម្ចាស់; ការសរសេររវាង orgs គឺមិនអាចទៅរួច
  • token ត្រូវបានចេញតែទៅតួនាទី admin (manager / staff ទទួលបាន 403)
  • ការឆ្លើយតបមិនដែលលេចធ្លាយជួរផ្សេង — ត្រឡប់តែ { id, created_at }
  • ការដកហូតមានភ្លាមៗ; បង្វិលនៅពេលណាក៏បានពីការកំណត់

7. ឧទាហរណ៍ iOS Shortcut

បន្ថែមសកម្មភាព "Get Contents of URL", URL https://billbook.me/api/ingest, វិធីសាស្ត្រ POST, header Authorization: Bearer bb_... និង Content-Type: application/json, និង body សំណើជា JSON៖ {"title":"កាហ្វេ","amount":120,"type":"expense"}។ ភ្ជាប់ title និង amount ទៅនឹងធាតុចូល Shortcut ឬអថេរ "សួរគ្រប់ពេល"។

ឯកសារនេះគឺជាឯកសារយោងរហ័ស; កូដ backend គឺជាប្រភពនៃការពិតសម្រាប់អាកប្បកិរិយាជាក់ស្តែង។