# Facebook Inbox — ការភ្ជាប់ផេកទៅ POS

កំណែដំបូងនេះសម្រាប់ Admin៖ ទទួលសារ Messenger និង Comment ថ្មីពីផេកច្រើន និងកត់ស្ថានភាពដោះស្រាយ។ មិនផ្ញើសារឆ្លើយតបពី POS និងមិនទាញប្រវត្តិមុនភ្ជាប់។ មិនបញ្ចូលអ្នកទាក់ទងទៅអតិថិជន ឬបំណុលដោយស្វ័យប្រវត្តិ។ បើ Meta មិនផ្ដល់ឈ្មោះ វាបង្ហាញ Sender ID ដែលមានវិសាលភាពតាមផេក/កម្មវិធី; មិនសន្មតថា ID ពីផេកផ្សេងជាមនុស្សតែមួយទេ។

## ឯកសារដែលត្រូវដាក់

1. `kase-pos-deploy.zip` → Cloudflare **Pages** សម្រាប់វេបសាយ POS។
2. `google-apps-script/Code.gs` ថ្មី → Apps Script deployment ចាស់ ជា **New version** រក្សា URL `/exec` ដដែល។
3. ថត `facebook-worker` → Cloudflare **Worker + Queues** ដាច់ដោយឡែក។ កុំ Upload Worker ទៅ Pages ជំនួសវេបសាយ។ ត្រូវមានសិទ្ធិប្រើ Queues ក្នុងគណនី Cloudflare; ពិនិត្យកម្រិតប្រើប្រាស់/តម្លៃក្នុងគណនី។

## 1. កំណត់សោសម្រាប់ Worker និង Apps Script

បង្កើតសោចៃដន្យឯកជនយ៉ាងតិច 32 តួអក្សរ។ ក្នុង Apps Script → Project Settings → Script Properties ដាក់៖

- `POS_FACEBOOK_RELAY_SECRET` = សោចៃដន្យនេះ។

កុំដាក់សោនេះ ឬ Meta App Secret ក្នុង `app.js`, HTML, ZIP វេបសាយ ឬផ្ញើក្នុង Chat។

## 2. Deploy Cloudflare Worker

ក្នុង `facebook-worker/wrangler.jsonc` កែ `POS_APPS_SCRIPT_URL` ទៅ URL `/exec` របស់អ្នក។ កុំបញ្ចូលសោក្នុងឯកសារនេះ។ បើប្រើ Wrangler CLI ដែលបានដំឡើង និង Login រួច៖

```text
npx wrangler queues create pos-facebook-events
npx wrangler queues create pos-facebook-dead
npx wrangler secret put META_APP_SECRET
npx wrangler secret put META_VERIFY_TOKEN
npx wrangler secret put POS_RELAY_SECRET
npx wrangler deploy
```

រត់ពីក្នុងថត `facebook-worker`។ `META_APP_SECRET` មកពី Meta App របស់អ្នក។ `META_VERIFY_TOKEN` ជាសោចៃដន្យមួយផ្សេងទៀតដែលអ្នកកំណត់។ `POS_RELAY_SECRET` ត្រូវដូច `POS_FACEBOOK_RELAY_SECRET` ក្នុង Apps Script។ បើ secret command សួរបង្កើត Worker ថ្មី សូមប្រើឈ្មោះ `kase-pos-facebook`។

Webhook URL គឺ `https://<worker-name>.<account-subdomain>.workers.dev/webhook` (ប្រើ URL ដែលបានពី Deploy)។ Worker ពិនិត្យ `X-Hub-Signature-256` មុនរក្សាព្រឹត្តិការណ៍ក្នុង Queue ហើយចុះហត្ថលេខាផ្ទេរទៅ Apps Script។

## 3. កំណត់ Meta App និងផេកនីមួយៗ

- ត្រូវមានសិទ្ធិគ្រប់គ្រងផេកនីមួយៗ និង Meta Developer App ដែលមាន Messenger/Pages use case សមស្រប។
- កំណត់ Page Webhook Callback URL ទៅ Worker `/webhook` និង Verify Token ដូច `META_VERIFY_TOKEN`។
- Subscribe fields `messages` និង `feed` (Comment ក្នុង feed) ដែល App និងផេករបស់អ្នកមានសិទ្ធិប្រើ។
- ភ្ជាប់/Subscribe **ផេកនីមួយៗ** ទៅ App ផង; កំណត់ Callback URL តែមួយមុខមិនគ្រប់គ្រាន់ទេ។ ប្រើ Meta Dashboard ឬ `/{PAGE-ID}/subscribed_apps` តាមឯកសារ Meta សម្រាប់ Graph API version ដែល App របស់អ្នកកំពុងប្រើ។
- ពិនិត្យសិទ្ធិដែល Meta ទាមទារសម្រាប់ use case របស់អ្នក រួមមាន `pages_messaging`, `pages_manage_metadata` និងសិទ្ធិអាន Page engagement/user content សម្រាប់ Comment។ Live access អាចត្រូវការ App Review, Advanced Access, Business Verification និង Privacy Policy/Data deletion URL តាមដែល Dashboard ទាមទារ។
- កុំប្រើតែ Test event ដើម្បីសន្និដ្ឋានថាភ្ជាប់ពេញលេញ; សាកជាមួយផេក និងសិទ្ធិពិតដែលបានអនុញ្ញាត។

## 4. ចុះឈ្មោះក្នុង POS មុនសាកផ្ញើ

ចូល Admin → **Facebook Inbox → ផេកដែលត្រូវទទួលទិន្នន័យ និងការភ្ជាប់**។ បញ្ចូល Page ID ជាលេខ និងឈ្មោះផេក។ ធ្វើម្ដងសម្រាប់ផេកនីមួយៗ។

ការចុះឈ្មោះនេះជាបញ្ជីអនុញ្ញាតឱ្យទទួល មិនមែន Facebook Login/OAuth ទេ។ Worker មិនទាមទារ Page token នៅ POS។ ការអនុញ្ញាត និង Page subscription ត្រូវធ្វើក្នុង Meta។ ផេកដែលមិនបានចុះឈ្មោះ ឬផ្អាកនឹងមិនត្រូវរក្សាព្រឹត្តិការណ៍ថ្មី។ ព្រឹត្តិការណ៍ដែលបានរំលងមិនត្រូវទាញមកវិញដោយស្វ័យប្រវត្តិទេ។

## 5. សាកល្បង

1. ផ្ញើ Messenger មួយ និង Comment មួយពីគណនីដែល Meta App អនុញ្ញាត។
2. ពិនិត្យ **ពេលទទួលចុងក្រោយ** របស់ផេក និងសារនៅ POS។ ពេលទទួលចុងក្រោយបញ្ជាក់ថាធ្លាប់ទទួល មិនបញ្ជាក់ថាសិទ្ធិ Meta នៅមានជានិច្ចទេ។
3. មើលតម្រងផេក ប្រភេទ និងស្ថានភាព; កំណត់សារ «កំពុងដោះស្រាយ / បានដោះស្រាយ»។
4. UI ទាញទិន្នន័យរៀងរាល់ 30 វិនាទី នៅពេលទំព័រ Inbox បើក។ វាមិនមែន push notification ពេលបិទកម្មវិធីទេ។
5. សាកផេកទីពីរ និងពិនិត្យថាប្រវត្តិនៅដាច់ដោយ Page ID។

## ប្រសិនបើមិនមានសារចូល

ពិនិត្យ Meta subscriptions/permissions, Worker secrets, Page ID ក្នុង POS និង Apps Script deployment។ មើល Queue metrics និង dead-letter queue `pos-facebook-dead`។ សារដែលផ្ទេរទៅ Apps Script មិនជោគជ័យនឹង retry ហើយចូល dead-letter queue ក្រោយអស់ retries; ក្រោយកែ configuration អាចយកព្រឹត្តិការណ៍ពីទីនោះមក retry តាម Cloudflare។ កុំ purge queue បើមិនទាន់ផ្ទៀងផ្ទាត់។

ការផ្អាកក្នុង POS ឈប់រក្សាសារថ្មីសម្រាប់ផេកនោះ; វាមិន revoke សិទ្ធិ Meta ទេ។ ដើម្បីផ្ដាច់ពេញលេញ ដក Page subscription/សិទ្ធិក្នុង Meta ផង។

សារ និង Comment ដែលទទួលបានរក្សាក្នុង Sheets `FacebookInbox`; បញ្ជីផេកនៅ `FacebookPages`។ កុំចែករំលែក Sheets ទាំងនេះជាសាធារណៈ។ ឯកសារភ្ជាប់ក្នុង Messenger បង្ហាញជាសម្គាល់ឱ្យបើកនៅ Facebook; មិន download ឯកសារ ឬរូបភាពមកទុក។

## ឯកសារផ្លូវការ

- [Meta Messenger Platform](https://www.postman.com/meta/messenger-platform-api/documentation/iyp204x/messenger-platform-api)
- [Meta Webhooks setup](https://developers.facebook.com/docs/graph-api/webhooks/getting-started/)
- [Meta Page Webhook fields](https://developers.facebook.com/docs/graph-api/webhooks/reference/page/)
- [Cloudflare Queues APIs](https://developers.cloudflare.com/queues/configuration/javascript-apis/)
- [Cloudflare dead-letter queues](https://developers.cloudflare.com/queues/configuration/dead-letter-queues/)

## ការផ្ទៀងផ្ទាត់ក្នុងកូដ

បានសាកល្បងដោយទិន្នន័យសិប្បនិម្មិត និង mock services។ ត្រូវសាក live handshake, Page permissions និងព្រឹត្តិការណ៍ពិតក្រោយ Deploy ក្នុងគណនីរបស់អ្នក។
