WhatsApp Web Messaging · Enterprise master guide

Britixo WhatsApp Enterprise: complete how-to guide

Complete r26.0 operating manual for installation, QR accounts, permissions, Inbox, messages, customer verification, visitor leads, CRM services, OTP, Help Centre responses, portal history, audit, durable delivery, offline workers and security. The guide then takes you through the correct route, the checks to complete before making changes, the workflow in order, and the evidence to review afterwards.

Audience: administrators, account owners, support teams and implementation partnersPermission: varies by taskModule v1.0.0 · 2026.08.02-r26.0-portable-worker-bootstrap
Jump to steps
Where to goAdmin Area → WhatsApp → Inbox / Standard Replies / Connections / Access Control / Settings / Audit Trail
Version authority

This guide is based on a complete read of all 59 files in the supplied r26.0 installable archive. It supersedes the older r20.5 feature boundary only for this master guide; the existing 369 articles remain available as detailed historical and workflow references.

Schema authority: 2026.07.31-r21.4-exactly-once-replies. The r26.0 runtime/bootstrap changes do not rename the module or discard the retained linked-device sessions.

What the module provides

Britixo WhatsApp Enterprise embeds a permission-scoped, multi-account WhatsApp Web workspace inside the CRM. Each linked number has its own account identity, encrypted credentials, private runtime, event cursor, LocalAuth session and access matrix. Staff can work from the CRM Inbox while automated workflows continue without an open browser or signed-in administrator session.

Staff workspacesInbox, Standard Replies, Connections, Access Control, Settings and Audit Trail.
Customer surfacesVerified WhatsApp history in the client portal and a permission-scoped history tab on the administrator customer profile.
First-contact routesRegistered customer verification or verified visitor callback/lead capture.
Verified automationSupport ticket, callback task, team hand-off, Help Centre search, CRM status services and registration OTP.
Delivery modelOne durable, account-affine, exactly-once-aware queue with a shared rolling limit of 30 successful sends per minute.
Supported channelA normal WhatsApp Web linked-device session; not the WhatsApp Business API, Cloud API or Meta Graph API.
Operational boundary

The module is designed for one-to-one customer conversations. It does not document or expose bulk campaigns, number rotation to evade limits, public connector ports, arbitrary database queries or customer-selected CRM methods.

Access model and visible menus

Access is enforced in two layers. A native module capability controls whether a staff member may use a class of feature, and the per-account matrix controls what that person may do on each WhatsApp number.

Native ViewAllows the module Inbox and account-scoped read access where an account also grants View.
Manage standard repliesAllows Standard Replies when the staff member also has suitable account access.
Audit TrailAllows the audit workspace, restricted to explicitly viewable accounts for non-administrators.
Per-account ViewSee the account, conversations, messages, unread totals and authorised media.
Per-account ReplySend text or allowed attachments from that account.
Per-account ConvertCreate native Task, Ticket or Lead records from a conversation.
Per-account ManageUse account-level management functions available to authorised staff.
Administrator-onlyConnections and Access Control; Settings and sensitive lifecycle controls are also administrator governed.
  1. Go to staff roles and permissions and grant only the native capabilities required.
  2. Go to WhatsApp → Access Control.
  3. For each active staff member and account, grant View, Reply, Convert and Manage independently.
  4. Save the matrix, then test with that staff account. The header unread badge, account selector, assignment lists, media and customer-history visibility should reflect the saved scope.
Assignment rule

A conversation can be assigned only to a staff member who can view the selected WhatsApp account. Removing account access also removes that person from future eligible assignment lists.

Install, activate and verify r26.0

The module uses its own portable install.php and prefix-safe schema. Activation creates or upgrades sixteen module-owned tables and adds the current settings without deleting existing operational data.

  1. Keep a controlled copy of the currently installed module package and confirm the CRM supports normal module installation.
  2. Upload the supplied archive through the CRM module installer, following Upload and activate the module.
  3. Activate Britixo WhatsApp Enterprise. Allow the installer to create or upgrade the module-owned schema.
  4. Go to WhatsApp → Connections. A new or existing account must enter the managed preparation flow rather than exposing Node, port or token fields.
  5. Complete the post-activation verification: menu visibility, schema state, account preparation, QR/connected readiness, Inbox, queue, worker health and audit.
16 module tablesaccounts, access, conversations, messages, quick_replies, quick_reply_staff, conversions, audit.
Automation and verification tablesverification_sessions, verification_events, automation_sessions, help_articles, client_accounts, outbound_queue, otp_challenges, customer_registration_otp.
Runtime requirementSupported existing Node.js 20.11+ or the module-owned private Node.js provisioner.
Bundled connector stackwhatsapp-web.js 1.34.7, Puppeteer 24.38.0 and private Chromium 147.0.0.
Session preservationLinked-device LocalAuth and protected runtime state live outside the replaceable module directory.
SaaS isolationA stable tenant namespace separates tenant credentials, sessions, locks, event store and worker health from the SaaS master and other tenants.
Do not replace server infrastructure

Normal preparation does not require root access, a global Node replacement, a systemd unit, a global cron entry, a public connector port or a server/network configuration change. Use only the module-owned Connections actions.

Create and link a WhatsApp account

  1. Go to Admin Area → WhatsApp → Connections.
  2. Enter a descriptive account name, up to 191 characters, and choose whether the account is Active.
  3. Create the account. The module generates the account key, encrypted connector token, encrypted wake credential, private loopback port and isolated session/runtime paths.
  4. Wait for automatic preparation. Readiness requires a usable runtime, a real headless-browser launch, authenticated loopback status, QR or connected state, a healthy supervisor/scheduler and a successful browser-independent CRM worker pass.
  5. On the phone, open WhatsApp → Linked devices → Link a device, then scan the live QR shown for that exact account.
  6. Wait for Connected. The connector imports the bounded recent history window and begins live event processing.
  7. Go to Inbox, select the new account and confirm conversations, unread state and message direction.
Connect/repairRebuild or repair the managed runtime while preserving retained LocalAuth where possible.
RestartRecycle the account connector and scheduler without intentionally unlinking the phone.
Sync historyImport the configured recent chat count and messages-per-chat window.
Active / inactiveExclude or include the account in normal Inbox operation and unread totals without deleting history.
RenameChange the visible account name while keeping the account key, session and history.
Rotate tokenAdministrator security action that replaces the connector bearer secret and updates managed runtime credentials.

Repair, restart, unlink and delete safely

These actions are deliberately different. Choose the least disruptive action that matches the fault.

Connect/repairUse when preparation is incomplete, runtime files are missing, browser admission fails or a stopped connector needs staged recovery.
RestartUse when the linked session should remain but the account process needs a clean restart.
Sync historyUse when recent chats or messages need a bounded reconciliation without changing the linked-device session.
Unlink WhatsAppRequires the exact confirmation UNLINK. It removes the linked-device authentication for that account and requires a new QR scan.
Delete accountRequires the exact confirmation DELETE. It removes the isolated operational runtime and archives the account from active use.
Retained evidenceDeletion preserves messages, conversions, verified portal history, verification evidence and audit records.
  1. Use Connect/repair first for a runtime preparation fault.
  2. Use Restart for a healthy retained session that needs process recovery.
  3. Use Sync history for bounded reconciliation.
  4. Use Unlink only when you intend to invalidate that linked device.
  5. Use Delete only when the account must leave operational use. If runtime removal fails, the model fails safe and does not partially change the account record.

Operate the multi-account Inbox

  1. Go to WhatsApp → Inbox.
  2. Use the account selector to switch numbers. The selected numeric account ID is retained for that staff member, but every request revalidates server-side permission.
  3. Search by conversation/contact text and combine it with All, Open, Pending or Closed status.
  4. Enable Unread only when you need conversations with current unread messages.
  5. Go to a conversation. Older messages are loaded in bounded pages; stale responses from a previously selected account are discarded.
  6. Use Sync now only when you need a controlled recent-history reconciliation. Live events continue through the authenticated shared long-poll and fallback refresh.
Account selectorOnly active, accessible, non-deleted accounts appear.
SearchFilters the selected account’s bounded conversation register.
Status filtersAll, Open, Pending and Closed.
Unread onlyShows conversations with a positive authoritative CRM unread value.
Staff assignment filterSupported by the data endpoint for authorised assignment-focused views.
Header badgeAggregates unread conversations/messages only across accounts the current staff member may view.
Live waitOne permission-scoped server long-poll can wait up to 18 seconds, with bounded fallback refresh.
Retained selectionStored only as a staff-scoped numeric account identifier; it is not an access grant.

Send messages, attachments and read acknowledgements

  1. Go to the intended conversation and verify the selected account before replying.
  2. Enter up to 10,000 characters and use Send, or choose a permitted file.
  3. For files, follow Send an attachment. The configured maximum is 1–32 MB; the default is 8 MB.
  4. The message enters the durable outbound queue. When capacity is available it is immediately eligible for the conversation’s existing account.
  5. Check direction, timestamp and delivery acknowledgement. Internal staff attribution is retained separately from customer-visible content.
  6. When opening an unread conversation, the module calls WhatsApp’s authenticated seen operation before applying the local read change; see Mark as read.
ImagesJPEG, PNG, GIF and WebP.
DocumentsPDF, plain text, ZIP, DOCX and XLSX.
AudioOGG, MP3 and M4A.
VideoMP4.
StorageRandom filename under the protected uploads path, grouped by account/year/month, with restrictive file permissions.
DownloadServed only through an authorised controller with MIME/content protection and audit evidence.
DeduplicationWhatsApp message IDs are unique per account, preventing repeated imports and unread increments.
Profile photoOptional URL storage only; disable it in General settings if the privacy policy does not permit it.
Attachment validation

The declared/accepted MIME must be on the allow-list and the decoded file must remain within the configured limit. Unsupported media, invalid base64 and failed protected storage are rejected rather than saved under the original filename.

Control status, assignment, priority and tags

  1. Go to conversation controls in the selected conversation.
  2. Set status to Open, Pending or Closed.
  3. Assign an eligible staff member or remove the assignment.
  4. Set priority to Low, Normal, High or Urgent.
  5. Add validated tags or remove existing tags.
  6. Save and verify the conversation list reflects the new controls without changing another account’s conversation.
Automatic reopenWhen enabled, a new inbound live message reopens a closed conversation. History synchronisation alone does not.
Assignment scopeOnly active staff with View access to the selected account are eligible.
Priority valuesLow, Normal, High and Urgent.
TagsNormalised and validated before persistence.
Account isolationConversation identifiers are resolved within the authorised selected account.
AuditMaterial operator actions are recorded with actor, account, conversation, time and applicable staff-request IP.

Create and use Standard Replies

  1. Go to WhatsApp → Standard Replies.
  2. Enter a title, optional slash shortcut, optional category and the reply body.
  3. Select Global only if you are an administrator and the text should apply across authorised accounts; otherwise select one account.
  4. Select All authorised staff or Selected staff. If Selected, tick the permitted staff members.
  5. Set sort order and Active/Inactive, then save.
  6. In Inbox, insert the reply through the standard reply picker or its shortcut, review the text and send it through the normal queue.
TitleRequired visible name.
ShortcutOptional slash-style lookup key.
CategoryOptional grouping label.
ScopeOne account, or administrator-created global reply.
VisibilityAll authorised staff or selected staff members.
Sort orderControls ordering in management and Inbox selection.
Active stateInactive replies remain stored but are not offered for normal use.
PermissionsAdministrator, or native Manage standard replies plus suitable per-account management access.

Create native CRM records manually

Manual conversion remains available independently of automated customer workflows. It requires Convert access to the selected account and uses native CRM models rather than creating parallel records.

TaskTitle, description, priority, assignee, start date and due date; optionally related to the matched CRM context supported by the adapter.
Support TicketSubject/details, support department and native ticket priority.
LeadName/details with Lead source and status; default/first-available choices are supported where configured.
Conversion historyThe WhatsApp conversation records the created entity type, ID, summary, staff member and message context.
ValidationAssignees, departments, lead sources and statuses must exist and be permitted by the native CRM.
AuditSuccessful and failed conversion actions are recorded without exposing connector credentials.

Understand all customer verification routes

r26.0 contains two deliberate registered-customer verification patterns plus a visitor route. The active route depends on whether Contact entry is enabled and whether the number already has a unique registered-mobile match.

Route A — unique registered mobile

  1. An inbound one-to-one message is normalised and compared with active customer contact telephone values.
  2. Exactly one active contact match verifies the conversation automatically when Registered mobile recognition is enabled.
  3. The module links the conversation to the customer/contact, records the verification evidence and sends the registered-number welcome/service continuation.
  4. Ambiguous matches are not automatically assigned.

Route B — configurable registered contact entry

  1. An unknown contact receives the welcome and chooses option 1 / registered customer. Accepted wording includes “registered”, “registered customer”, “customer” and “client”.
  2. The customer supplies an exact active contact email address.
  3. The CRM emails a cryptographically generated six-digit code; only its password hash is retained.
  4. The customer replies with the code before the configured 2–15 minute expiry and within the configured 3–10 attempt limit.
  5. RESEND is available after the configured 15–300 second cooldown; CHANGE EMAIL restarts the email step.
  6. On success the conversation is securely linked. The contact telephone is updated only when the canonical number is genuinely different.

Route C — legacy registered email plus customer account number

  1. When the older verification session applies, the contact supplies the exact active registered email.
  2. The module asks for the six-digit customer account number, or accepts EMAIL to send that number to the registered address once for the session.
  3. A matching number verifies the customer. Repeated failure reaches manual review after the configured maximum attempts.
  4. Account numbers are generated and managed by the module’s client-account service; raw verification replies are not copied into audit context.
Group and ambiguous contacts

Automatic customer verification is limited to supported one-to-one conversations. Group chats and ambiguous active-contact matches are not silently linked to a CRM customer.

Route registered customers and visitors professionally

Contact entry is the controlled first-response workflow for a new unknown or ambiguous one-to-one contact. The first reply is immediately eligible and all routes share the aggregate delivery ceiling.

Registered customer route

EnablementMaster Contact entry toggle plus Registered customer option.
IdentityExact active contact email.
ProofSix-digit email code, hash at rest.
Expiry2–15 minutes.
Attempts3–10.
Resend cooldown15–300 seconds.
Recovery wordsRESEND and CHANGE EMAIL.
CompletionVerified customer linkage, optional telephone normalisation and continuation to verified automation.

Visitor route

  1. The contact chooses option 2 / not registered. Accepted wording includes “not registered”, “non registered”, “visitor”, “new customer” and “new”.
  2. Collect full name.
  3. Collect the callback telephone number, including country code, or accept SAME to use the WhatsApp number.
  4. Collect email and send the same protected six-digit email-code challenge.
  5. After email verification, collect the callback reason/message.
  6. Create one native CRM Lead using the configured source/status, or the first valid available values when set to zero.
  7. Return the Lead reference. The pending visitor payload is encrypted while the workflow is incomplete.
Duplicate safetyThe processing state and durable references prevent repeated lead creation for the same completed branch.
Transport failureThe customer receives the configured email-delivery failure wording and may retry safely.
Invalid inputThe module repeats the exact required field without jumping to an unrelated branch.
Lead intentEven a brief first contact enters a controlled route; a visitor is converted only after required verified details are collected.
No artificial delayThe r26.0 code keeps all automated replies immediately eligible.
Audit privacyEvents record state, field presence/length, delivery result and record reference—not raw customer replies or codes.

Configure verified-customer service automation

After a verified match, the service menu presents only enabled branches. Customers may answer by number or recognised wording. MENU reopens the menu after a completed branch.

Support ticketCollect short subject, then detailed issue/reference and required outcome; create a native ticket in the configured department and priority.
CallbackCollect callback reason, then preferred date, time and timezone; create a native CRM task assigned to the configured owner where available.
Team hand-offCollect enquiry details and pass the conversation to the team without pretending a separate ticket was created.
Help Centre searchCollect a natural-language question and return one sufficiently close article plus its category, or the full Help Centre URL when no close match exists.
CRM self-serviceReturn up to the latest three ownership-scoped records from enabled validated providers.
Registration OTPIssue a session-scoped six-digit WhatsApp code for an authorised registration continuation flow.
Master switchAutomated responses.
Service menuEnable/disable the post-verification menu.
Ticket branchEnable/disable support ticket creation.
Callback branchEnable/disable callback creation.
Hand-off branchEnable/disable team enquiry hand-off.
Customer emailSend the configured completion notification through the CRM mailer.
Admin emailSend to up to 20 validated administrator recipients.
OwnerChoose the automation staff owner used by supported native records.
Ticket departmentChoose an existing support department, or the supported first-available behaviour.
Ticket priorityLow, Medium, High or Urgent in the settings UI.
Duplicate ticket protection

A second WhatsApp-created support ticket is blocked while the previous WhatsApp ticket is still awaiting staff response. The customer is told to wait and may still choose callback or team enquiry.

Enable built-in and custom CRM self-service

The CRM Services tab discovers providers only when the required native tables and fields exist. Every query is read-only and restricted to the verified customer account.

Invoice statusLatest three customer invoices, with paid/unpaid/partly paid/overdue/cancelled/draft interpretation and due date where available.
Estimate statusLatest three estimates, including draft/sent/declined/accepted/expired and expiry where available.
Project statusLatest three projects, including not started/in progress/on hold/finished/cancelled and deadline where available.
Subscription statusLatest three subscriptions with native status and subscribed date.
Support ticket statusLatest three owned tickets with open/in progress/answered/on hold/closed and date.
Order statusAvailable only when a compatible order table and required fields are detected; returns native status/date.
External providersAnother module may register a validated provider through the documented service registry hook.
Result boundaryCustomer input cannot select an arbitrary model, method, table, command or another customer’s record.

Custom numbered menu options

  1. Go to Settings → CRM services.
  2. Enable the validated providers that may appear.
  3. Add as many custom menu rows as needed.
  4. Select a validated service provider for each row and write the customer-facing label, for example “Check your application progress”.
  5. Save. The next available menu number is assigned automatically; selecting a provider in a custom row also enables that service.
  6. Test with a verified customer that has and does not have records, confirming the result remains ownership scoped.

Use both registration OTP modes correctly

Verified-customer service-menu OTP

  1. Enable Settings → Registration OTP and set expiry to 2–15 minutes and attempts to 3–10.
  2. Keep Registration verification code enabled in the verified service menu.
  3. A verified customer chooses the option. The module queues a six-digit code with OTP priority, stores only its password hash and binds it to the current session.
  4. The customer replies with the code. Success emits the authorised registration-OTP verified event; expiry, attempt exhaustion and success all make the challenge unusable.

New customer self-registration gate

  1. Separately enable Setup → Settings → Customers → Verify new customer registrations through WhatsApp.
  2. The save action performs a live readiness check: current schema, linked account, detached supervisor and a fresh browser-independent scheduler worker pass.
  3. When both this customer setting and the Registration OTP master switch are enabled, a newly self-registered contact receives a six-digit code at the registered WhatsApp number.
  4. The registration page shows WhatsApp verification as step 1. After success, the module invokes the CRM’s normal verification-email model and sends the contact to the existing email-verification step 2.
  5. Existing customers, administrator-created contacts, staff sessions and unrelated email templates retain their normal behaviour. Disabling the Customers setting restores the default registration flow.
Capacity rule

OTP has queue priority, but it does not own hidden capacity and does not bypass the single 30-message rolling-minute limit.

Connect a client-specific Help Centre

  1. Go to Settings → Help Centre.
  2. Enable the feature and enter the public HTTPS directory URL for the client’s Help Centre.
  3. The source must expose assets/search-index.js and help-centre-manifest.json at the expected paths.
  4. Save. The module validates and synchronises the index; an unsafe or invalid source is rejected without replacing the previous active source.
  5. Set the service-menu label and customise the question prompt, matched response and no-match response.
  6. Test a verified customer query. A match returns one article URL plus the related category URL; a low-confidence result returns the full Help Centre URL.
Default stateDisabled.
URL rulePublic HTTPS directory URL only.
Required filesSearch index and manifest.
Stored evidenceSource hash, article count, category count and last synchronised timestamp.
Matched variables{{article_title}}, {{article_url}}, {{category_name}}, {{category_url}}.
No-match variable{{help_centre_url}}.
IsolationEnabling Help Centre does not alter other service-menu branches.
SafetyNo arbitrary remote PHP, script or CRM command is executed from the Help Centre content.

Complete administrator settings reference

General

Maximum attachment size1–32 MB; default 8 MB.
Inbox refresh interval4–60 seconds; default 6 seconds for fallback behaviour.
History chat limit1–500 recent chats; default 100.
Messages per chat1–200; default 50.
Synchronise on Inbox loadEnable/disable a bounded sync when Inbox opens.
Cron synchronisationEnable/disable the module’s CRM cron participation; always-on worker operation remains a separate runtime path.
Automatic CRM phone matchEnable/disable general CRM telephone matching.
Reopen closed on inboundEnable/disable live inbound reopening.
Store profile URLEnable/disable storing the profile-photo URL.

Verification

Customer verificationMaster enable/disable for registered-customer verification.
Registered mobile recognitionEnable/disable automatic unique mobile matching.
Maximum attempts1–10 for the legacy email/account-number verification branch.

Contact entry

Contact entry masterEnable/disable the whole first-contact workflow.
Registered optionOffer or hide the registered-customer route.
Visitor optionOffer or hide the visitor route.
First replyImmediate eligibility is enforced; all traffic shares the delivery limit.
Email-code expiry2–15 minutes.
Email-code attempts3–10.
Resend cooldown15–300 seconds.
Visitor Lead source/statusChoose valid native values; zero uses first available.

Automation and delivery

Automated responsesMaster switch.
Service menu / Ticket / Callback / Hand-offIndependent branch switches.
Customer and admin completion emailIndependent notification switches.
Admin recipientsUp to 20 validated email addresses.
Ticket department / priorityNative department; Low, Medium, High or Urgent.
Automation ownerActive staff member used by supported records.
Outbound capacityHard aggregate maximum 30 successful sends per rolling minute across all linked accounts.
Account affinityEvery conversation keeps its existing linked number; additional accounts do not rotate around the limit.

CRM Services, Registration OTP and Help Centre

CRM servicesEnable only discovered and validated providers.
Custom menu rowsUnlimited repeatable rows, automatically numbered, each bound to a validated provider.
Registration OTPEnable/disable; expiry 2–15 minutes; attempts 3–10.
Customer registration gateSeparate Customers-setting switch with live worker readiness admission.
Help CentreEnable/disable, HTTPS URL, label, source validation and three response templates.

Every editable customer-facing template

Templates change wording only; they do not disable validation, remove identity checks, change the queue or create an unsupported branch. Each field accepts up to 4,000 characters in the current view.

Core verification and automation templates

  • Initial registered-email prompt
  • Invalid email-format response
  • Registered email not matched response
  • Matched-email account-number prompt
  • Invalid or unmatched account-number response
  • Account-number email sent response
  • Repeated account-number email request response
  • Account-number email failure response
  • Manual-review response
  • Successful verification response
  • Registered-number and continuation welcome ({{company_name}}, {{client_name}})
  • Service-menu introduction ({{contact_name}})
  • Invalid menu choice response
  • Open-ticket duplicate response ({reference})
  • Simultaneous-request response
  • Support-ticket subject prompt
  • Support-ticket details prompt
  • Callback reason prompt
  • Callback date/time/timezone prompt
  • Team hand-off details prompt
  • Support-ticket confirmation ({reference})
  • Callback confirmation ({reference})
  • Team hand-off confirmation
  • Automatic-action failure response

Contact-entry templates

  • Welcome introduction ({{company_name}})
  • Option 1 label
  • Option 2 label
  • Invalid option response
  • Registered email prompt
  • Registered email not verified
  • Email-code sent response ({{masked_email}}, {{minutes}})
  • Email-code resend cooldown ({{seconds}})
  • Email transport rejection response
  • Invalid email-code response
  • Expired / attempts-exhausted response
  • Registered verification success ({{client_name}}, {{company_name}})
  • Visitor full-name prompt
  • Visitor callback-number prompt
  • Visitor email prompt
  • Visitor callback-reason prompt
  • Visitor lead confirmation ({reference})
  • Contact-entry failure response

Help Centre templates

  • Question prompt.
  • Matched response using {{article_title}}, {{article_url}}, {{category_name}} and {{category_url}}.
  • No close match response using {{help_centre_url}}.

Registration code wording

  • Verified-customer OTP message using {{code}} and {{minutes}}.
  • Invalid, expired/attempts-exhausted and successful OTP responses.
  • New customer registration OTP message using {{company_name}}, {{code}} and {{minutes}}.
Template safety

Keep the purpose, next action, expiry and privacy warning clear. Do not insert secrets, connector credentials, raw audit context or wording that promises a record was created before the native CRM confirms it.

Use protected customer and administrator history

Client portal menuAppears only when the logged-in contact owns at least one verified WhatsApp conversation.
Portal listShows account, conversation/session identity, latest message and activity.
Portal transcriptLoads the authorised conversation and bounded older pages.
Portal mediaDownloads through an ownership-checked controller and records the event.
Administrator customer tabAppears only for accessible verified conversations belonging to that customer.
Admin account scopeNon-administrators see only WhatsApp accounts where they have explicit View access.
Deletion retentionArchived/deleted account history can remain visible as compliance evidence while the account is excluded from active operation.
AuditPortal views, admin customer-history views and media downloads are recorded.

Review audit, verification and compliance evidence

  1. Go to WhatsApp → Audit Trail.
  2. Filter by account, staff member and action text.
  3. Check general audit rows for connection transitions, access changes, sends, read actions, history, files, CRM conversions, portal/customer history and account lifecycle.
  4. Check verification sessions/events for route, state, actor and outcome.
  5. Use account-scoped evidence to diagnose a workflow; do not rely on raw server logs as the normal user-facing record.
General audit limitUp to 500 rows in the current administrator view.
Verification session limitUp to 250 sessions.
ActorsStaff, system and contact actors are distinguished.
Context protectionCredential, authorisation, QR, base64 and message-body fields are recursively redacted; context size is bounded.
Connection deduplicationNo-op status reconciliations do not create repeated connection rows.
System eventsDo not inherit the polling staff member’s IP address.
All accountsAdministrator scope is unrestricted.
Non-admin auditConfined to accounts with explicit View access.

Understand exactly-once delivery and offline operation

Every staff and automated outbound message enters one module-owned queue before connector delivery. The queue, connector and worker use layered references and locks so retries do not knowingly transmit a second message.

Rolling capacityNo more than 30 successful sends in any rolling minute across all linked numbers in the CRM/tenant.
PriorityOTP and interactive operational replies receive priority, but share the same capacity.
No number rotationThe existing conversation account remains authoritative.
Deterministic referenceAutomation derives a stable reference from session, inbound identity and response kind.
Queue deduplicationA unique reference suppresses replay before a second outbound row can be created.
Connector single-flightConcurrent requests for the same accepted reference share one in-flight result.
Payload retentionSuccessful and permanently failed rows discard message/attachment payload after the delivery decision.
RetryCapacity-blocked and transport-failed work remains durable and is retried through the worker path.

Always-on runtime

  • One lightweight user-space supervisor per account owns an exclusive mode-0600 lease and independently supervises connector and scheduler children.
  • The scheduler watches protected event/wake state every 200 ms and supplies a CRM worker pass at least once per second.
  • A matching PHP CLI is preferred only after a bounded, read-only tenant/account/credential probe succeeds.
  • Deterministic CLI failure falls through to certificate-validated HTTPS in the same pass; an uncertain timeout is not replayed immediately because that could duplicate a send.
  • The same-host local virtual HTTPS route is attempted before public HTTPS when no verified matching CLI is available.
  • On Linux, the live supervisor launches children through /proc/self/exe so a private runtime path refresh cannot strand a still-running supervisor.
  • The connector and scheduler use a crash-recoverable account lock, event cursor, queue lock and reference identity as exactly-once authorities.
  • Browser closure, CRM logout and an absent administrator session do not stop normal automation. Hosting process policy, WhatsApp availability, the rolling limit and CRM/PHP latency can still affect delivery time.
Worker readiness

Preparation is not complete merely because a database label says “running”. The module requires live connector/browser admission plus a real browser-independent worker pass. A failed health gate rolls back the staged application/environment and restarts the previous connector/session where available.

Security and privacy controls

  • Connector services bind to loopback only and require the matching high-entropy bearer token and account key.
  • Connector tokens and account-specific wake credentials are encrypted independently; the public worker accepts only PUT with both matching credentials and timing-safe comparison.
  • No unauthenticated public webhook or CSRF exclusion is introduced for connector events.
  • Runtime roots receive deny-all web protection; credentials and health state use restrictive permissions and are not passed in command-line arguments.
  • Tenant/account namespaces isolate SaaS master, tenants and linked numbers that share one application filesystem.
  • LocalAuth sessions and runtime data are outside the replaceable module directory.
  • Private Node downloads use HTTPS and a pinned archive checksum; npm dependencies come from the committed lockfile and the bundled Chromium must pass a real headless launch.
  • Private runtime refresh uses a staged prior-directory swap and restores the prior executable tree if the replacement cannot run.
  • Media is MIME allow-listed, size-limited, randomly named and controller served.
  • Verification codes are cryptographically generated, stored as hashes and never copied into normal audit context.
  • Customer self-service queries are ownership scoped and read-only.
  • Explicit UNLINK and DELETE confirmations protect destructive account actions.

Professional troubleshooting sequence

No menu / no accountCheck module activation, native capability, active account state and per-account View.
QR never appearsUse Connect/repair; review preparation stage, browser launch, supervisor, scheduler and worker admission rather than editing ports/tokens.
Connected but no messagesVerify selected account, live status, event cursor and run bounded Sync history.
Replies only work with browser openThe account is not passing always-on worker health; repair from Connections and confirm scheduler/worker readiness.
Duplicate or stuck automationCheck queue/audit reference, pending session state, capacity and worker health; do not manually replay the same request through another number.
Email code not receivedVerify CRM mail transport, masked recipient, resend cooldown and delivery result; use RESEND or CHANGE EMAIL as instructed.
Visitor Lead not createdVerify visitor route, verified email, valid Lead source/status and final callback reason.
CRM service missingIts required table/fields were not discovered, or the provider is not enabled/validated.
Registration gate will not enableAt least one linked account, current schema, supervisor and fresh browser-independent worker pass are required.
Unread badge staleOpen the conversation to call the authenticated seen operation, then allow the absolute unread snapshot/fallback refresh to reconcile.
Attachment rejectedCheck MIME allow-list, decoded integrity and configured size.
Delete/unlink rejectedEnter exact uppercase confirmation and resolve any runtime-removal failure without forcing database edits.
  1. Reproduce on one account and one controlled conversation.
  2. Record the visible account state, exact action and time.
  3. Check Access Control and active account state.
  4. Check Audit Trail and verification events.
  5. For runtime faults, use Connections → Connect/repair or Restart; never delete LocalAuth/runtime files manually.
  6. For data or automation faults, verify queue/session state and the native CRM prerequisite.
  7. After correction, run the final production verification checklist across two accounts and differently scoped staff.

Feature coverage and existing detailed articles

This master guide links to the complete existing article library. Use the topic pages below for smaller task-specific instructions. Their r20.5 build labels remain preserved where they describe the original documented baseline; r26.0 additions and changed boundaries are authoritative in this guide.

r21.0 to r26.0 additions covered here

r21.0Configurable registered/visitor contact entry and email-code verification.
r21.1Verified-customer registration OTP.
r21.2Registration ordering and custom numbered CRM menu options.
r21.3–r21.4Prompt background replies and durable exactly-once queue references.
r21.5–r21.9Background worker, always-on relay, immediate responses, dedicated scheduler and offline CLI worker.
r22.0Resilient offline email recovery.
r23.0Always-on runtime admission and customer-registration WhatsApp gate.
r24.0Bounded worker probe and registration fail-safe.
r25.0Runtime executable self-repair with staged rollback and /proc/self/exe recovery.
r26.0Portable, guarded bootstrap for normal requests, direct workers, CLI, activation and installer execution.
Final acceptance

Before live use, verify two linked accounts, different staff scopes, QR/restart/session retention, history/live events, read state, all allowed file categories, manual CRM conversions, every verification/contact-entry branch, every enabled service-menu branch, portal/admin history, audit redaction, queue capacity and account deletion retention.