PH Omni Centre · Karofi
{{ pageTitle }}
{{ shiftSub }}
{{ noShiftText }}
Preview as
{{ tagOptions }} {{ memberOptions }}
{{ filterCount }}
Checking access…
Check in to start your shift
Customer chats open after you check in. New leads are assigned only to sales on shift. Shift: Monday to Saturday, 08:00–17:00 (PH time).
Check in {{ gateNote }}
{{ p.name }} {{ p.sub }}
{{ c.dayLabel }}{{ c.dayCount }}
{{ c.ini }}
{{ c.name }} {{ c.time }}
{{ c.last }}
{{ tg.label }}{{ c.moreTags }} {{ c.win }} 24h closed {{ c.snooze }} {{ c.waitText }} · {{ c.ownerText }}
{{ emptyText }}
{{ moreNote }} {{ moreLabel }}
{{ sel.name }} {{ sel.statusLabel }}
{{ sel.ownerLine }} Covering for {{ sel.coveringName }} · 24h window: {{ sel.win }}
Transfer Snooze {{ sel.resolveLabel }}
{{ sel.formName }} {{ sel.leadState }}
{{ f.k }}{{ f.v }}
Source & UTM
{{ u.k }}{{ u.v }}
{{ sel.utmNote }}
In leader queue since {{ sel.time }} · assign to a sale on shift
Contact customer
Call
No phone number on this lead.
How did the call go?
Calls use your own phone for now. The hotline (click-to-call, recording) connects later.
Send with Viber · Karofi opens a Viber chat from the Karofi Philippines account here in the Inbox. WhatsApp and SMS open the app on this device.
{{ sel.contactLabel }}
Activity
{{ a.when }}{{ a.text }}
{{ ref.kind }} {{ ref.title }} {{ ref.sub }} View post ↗
{{ m.text }}
{{ m.text }} · {{ m.time }}
COMMENT ON {{ m.post }}
{{ m.text }}
{{ m.time }}
{{ at.name }}{{ at.size }}
{{ m.text }}
{{ m.time }}
{{ m.label }} {{ at.name }}{{ at.size }}
{{ m.text }}
{{ m.by }} · {{ m.time }}
{{ m.label }}
{{ m.text }}
{{ m.time }} · not counted in FRT
Note · only the team sees this
{{ m.text }}
{{ m.by }} · {{ m.time }}
Quick tags {{ qtHint }}
The 24-hour window closed {{ sel.closedAgo }}. Only approved templates can be sent until the customer replies. Send template
SAVED REPLIES
{{ pa.name }}{{ pa.size }}{{ pa.warnText }}
Type / for saved replies · Enter to send {{ sendLabel }}
Select a conversation.
What each Omni Centre role can do (BRD §5). Only admins change this table; the prototype applies a change right away. In production the same rules are enforced in the database (RLS), not only hidden on screen.
Add role
{{ roleDetail.name }} {{ roleDetail.desc }} {{ roleDetail.sub }}
{{ dr.label }} {{ dr.help }}
{{ dr.note }}
Permission {{ rh.name }} {{ rh.short }}
{{ r.label }}{{ r.help }} {{ cl.options }}
PH Omni Centre is locked by default: only people on this list can open it. Map each person to their Odoo salesperson so leads and orders are created under the right name.
New account
AccountOdoo salespersonOmni Centre role
{{ m.initials }}
{{ m.name }}YOU
{{ m.email }} · {{ m.role }}
{{ levelOptions }}
Directory not loaded (editor preview without sign-in).
{{ m.net }}{{ m.who }}{{ m.time }}
{{ m.text }}
{{ m.statusLabel }}{{ m.post }}
{{ cm.postKind }} · {{ cm.post }}
{{ cm.ini }}
{{ cm.who }}{{ cm.net }}{{ cm.time }}Hidden on page
{{ cm.text }}
KAROFI Philippines · public reply
{{ pb }}
Reply publicly {{ cm.hideLabel }}
Private reply{{ cm.statusLabel }}
Rule: {{ cm.rule }}
{{ cm.pr }}
Sent {{ cm.prTime }} · 1 private reply per comment, within 7 days
Not sent — {{ cm.reason }} Send private reply anyway
{{ cm.dmText }}Open conversation
LOG
{{ lg.t }}{{ lg.x }}
Refresh {{ llNote }}
{{ llSel.name }}
{{ llSel.ch }}{{ llSel.state }}
{{ f.k }} {{ f.v }}
Call {{ llSel.phone }}
No leads in this view.
LeadSourceFormPhoneCityStateOwnerReceived
{{ l.name }}{{ l.ch }}{{ l.form }}{{ l.phone }}{{ l.city }}{{ l.state }}{{ l.owner }}{{ l.time }}
No leads in this view.
Lead cards have no chat. Click a lead to open it, call or message on WhatsApp / Viber, then record the result with tags and Create lead.
{{ dashLoadText }}
{{ fnScope }}
Funnel{{ fnSub }}
{{ f.label }}
{{ f.value }} {{ f.rate }}
{{ r.label }}{{ r.value }}
By day {{ fnL1 }} Odoo lead {{ fnL3 }}
{{ d.msgs }}
{{ d.label }}
Sale{{ hd }}{{ fnLastHead }}
{{ r.name }}{{ r.status }}{{ v }}{{ r.cvr }}
{{ k.label }} {{ k.value }} {{ k.sub }}
Team today
SaleOpenWaitingFRT med.LeadsOrders
{{ p.name }}{{ p.status }} {{ p.open }}{{ p.waiting }}{{ p.frt }}{{ p.leads }}{{ p.orders }}
Leader queue
{{ q.ch }}{{ q.name }}since {{ q.time }}Assign
Queue is empty.
Alerts
{{ a.text }}
No alerts.
Timesheet
MemberDaysHoursAvg in{{ tsLateHead }}Early outOn scheduleMissed{{ tsLastHead }}
{{ r.name }}{{ r.days }}{{ r.hours }}{{ r.avgIn }}{{ r.late }}{{ r.early }}{{ r.cover }}{{ r.missed }}{{ r.lastOut }}
No check-ins in this period.
{{ tsNote }}
Shared check-in is not set up yet: run supabase/chat/sql/chat_step9_shifts.sql. Until then check-in is saved on each device only.
{{ dashNote }}
Auto-assign in Omni Centre{{ autoPillLabel }}
{{ autoText }}
1 · How new leads are shared
2 · Who can receive leads
Checked in and inside their hours in Shift schedule
Sales in rotation:
3 · Returning customer
{{ assignNote }}
Shift schedule · {{ schedDayLabel }}
{{ schedHint }}
Sale {{ h.ap }}{{ h.label }}
{{ r.name }}{{ r.sub }}
No sales yet. Members whose role needs check-in (Permissions) appear here.
Channels each sale can receive
{{ chanHint }}
{{ r.name }}{{ r.sub }}
Working hours (PH time, UTC+8)
Outside these hours and on holidays the Out of hours message is sent. Sales still check in and out themselves; only checked-in sales get leads.
Holidays
{{ h.date }}{{ h.label }}
Add
Check-in status now
{{ p.name }}{{ p.status }}
{{ a.title }}
{{ a.desc }}
PREVIEW
Hi, how much is the D66?
{{ a.label }}
{{ a.preview }}
Sent at most once per conversation per absence, chat channels only (not Lead Ads or web forms). Not counted in FRT.
Sales type / in the reply box to insert these. Shortcuts use lowercase letters and numbers, no spaces. Images are sent together with the text (JPG / PNG, max 8 MB each).
ShortcutMessage
/
Uploading…
Pancake tags · {{ pkTagCount }} (live)Tags are added and removed in Pancake too. Choose the group each one shows under; "Sale name" and "Hidden" are not shown to sales.
{{ t.text }}{{ t.count }}
Rename or hide tags. Hiding removes a tag from the picker but keeps its history for the Cockpit; tags are never deleted. Sale names are no longer tags — use the assignee.
{{ g.label }}
Add
Connection through the System User of BM Karofi (app Karofi Marketing). The token lives only in Supabase Edge Function secrets — this screen never shows it.
{{ chBtn }}
The chat-meta function is not deployed yet
  1. Run supabase/chat/sql/chat_step1_meta.sql in the Supabase SQL editor.
  2. Set secrets META_APP_SECRET, META_VERIFY_TOKEN, META_PAGE_ID (META_SYSTEM_USER_TOKEN is already set for the Cockpit).
  3. Deploy: supabase functions deploy chat-meta --no-verify-jwt, then press Check connection.
{{ r.label }}{{ r.text }}
{{ chWhen }}
Send private replies (via Pancake){{ prPillLabel }}
{{ prStatus }}
{{ r.stateLabel }}
Applies to
{{ r.foot }}
+ New rule{{ prVarsHint }}
Filters before sending
{{ prLogTitle }}
{{ l.time }}{{ l.who }}{{ l.text }}{{ l.result }}
{{ setNote }}
{{ mClock }}5G
PH Omni Centre · now
{{ mNotifText }}
Good {{ mDayPart }}, {{ mFirst }}
Check in to start receiving customers.
On iPhone, notifications need Add to Home Screen.
{{ mListTitle }}{{ mPillText }}
{{ c.ini }}
{{ c.name }}{{ c.time }}
{{ c.ch }}{{ c.last }}
Nothing here.
{{ sel.name }}
{{ sel.ch }} · {{ sel.statusLabel }}
{{ m.text }}
{{ m.meta }}
24h window closed — templates only.
Customer
{{ sel.name }}{{ sel.phone }}{{ f.k }}: {{ f.v }}
CUSTOMER 360
{{ k.label }}{{ k.value }}
TAGS
Create lead
An open Odoo lead already matches this phone: {{ dupLead.id }} · {{ dupLead.stage }} · {{ dupLead.owner }}.
Creating in Odoo…
Lead {{ lfDoneId }} createdLeadSubmitted sent to Meta.
Odoo did not accept it. Nothing was created; your input is kept.
{{ spNote }}
{{ lfErr }}
Create quotation
Creating in Odoo…
Quotation {{ ofDoneId }} created{{ ofDoneTotal }} · draft in Odoo
Odoo did not accept it. Nothing was created; your input is kept.
PRODUCTS
{{ ln.hint }}
{{ ln.subtotal }}
DELIVERY
{{ ofErr }}
{{ ofTotal }}incl. VAT {{ ofVat }}
Me
{{ me.initials }}{{ me.name }}{{ mShiftText }}
TODAY
{{ r.label }}{{ r.value }}
{{ mPickTitle }}
No match.
Try it
This is the 390px PWA. Same data and permissions as desktop: list → chat → customer, check in from the Me tab, tags, Create lead / order.
Simulate a new message
{{ k.label }}{{ k.value }}{{ k.sub }}
Dataset:
TimeEventCustomerOdoo refValueIdentityDatasetStatus
{{ e.time }}{{ e.event }}{{ e.customer }}{{ e.ref }}{{ e.value }} {{ e.identity }}{{ e.dataset }} {{ e.status }}
No events in this view.
Each Odoo lead or order sends an event once (key = Odoo ref + event name); duplicates are skipped and failed sends retry automatically. The log is append-only. The main page dataset stays off until cutover, when Pancake's CAPI is switched off at the same time.
{{ laterTitle }}
{{ laterBody }}
An open lead in Odoo already matches this phone. Link the conversation to it instead of creating a duplicate.
Lead {{ dupLead.id }}{{ dupLead.stage }}
Salesperson: {{ dupLead.owner }} · created {{ dupLead.created }}
Create new anyway Link to this lead
Creating lead in Odoo…
Lead {{ lfDoneId }} created
LeadSubmitted was sent to Meta.
Open in Odoo ↗ Done
Odoo did not accept the lead (timeout from g.karofi.com). Nothing was created; your input is kept.
Back to formRetry
{{ spNote }} {{ odooSourceNote }}
{{ lfErr }}
Cancel Create lead
Creating quotation in Odoo…
Quotation {{ ofDoneId }} created · {{ ofDoneTotal }}
Draft in Odoo. InitiateCheckout + OrderCreated were sent to Meta; Purchase is sent when the order is confirmed.
Open in Odoo ↗ Done
Odoo did not accept the quotation (product price list mismatch). Nothing was created; your lines are kept.
Back to formRetry
Source tags
ProductQtyUnit priceDisc. %Subtotal
{{ ln.hint }}
{{ ln.subtotal }}
Total {{ ofTotal }} incl. VAT 12% {{ ofVat }}
{{ spNoteOrder }} {{ odooSourceNote }}
{{ ofErr }}
Cancel Create quotation
The conversation reopens at that time, or earlier if the customer writes.
Cancel Snooze
{{ d.ch }}{{ d.name }}{{ d.phone }}
Pick the value to keep for each field. Messages, channels, tags, Odoo leads and orders from both are combined into one customer. The merge is logged; nothing is deleted.
Field{{ mgA }}{{ mgB }}
{{ r.label }}
Cancel Merge customers
Imported from Pancake · read only{{ pkMeta }}
{{ m.text }}
{{ m.meta }}
Original Pancake IDs are kept so re-imports update instead of duplicating. Tags from Pancake are mapped to the new tag groups; sale-name tags became the assignee.
Only sales on shift can receive leads.
ASSIGNMENT HISTORY
{{ h.when }}{{ h.text }}
The conversation goes back to the leader queue. You will no longer see it.
Cancel Transfer
Start from
The new role copies these permissions. Change them after it is created.
{{ rnErr }}
Cancel {{ rnSubmit }}
The account is created in the Workspace directory with the role "Omni Centre only" (no Cockpit access).
{{ addErr }}
Cancel {{ addLabel }}
{{ cpSub }}
When to call back?
A result is required after every call. It is saved to the customer's activity log and the sales report.
{{ toast }}