[Currently in closed testing]
A single-tenant WhatsApp helpdesk for WordPress. Run your own multi-agent support inbox on the WhatsApp Cloud API — with role-based access, media handling, an optional AI assistant, and configurable data retention. Any WordPress install can drop it in and operate its own helpdesk; one operator can serve many of their own clients through a single WhatsApp number.
- Version: 1.0
- Requires: WordPress 5.8+, PHP 7.4+
- Author: Gino Croes (Crossmedia297) — https://crossmedia297.com
- Support: admin@crossmedia297.com
- License: GPL-2.0-or-later
Features
- WhatsApp Cloud API inbox — receive and reply to WhatsApp messages from a shared agent inbox inside wp-admin.
- Team inbox with roles — Administrator, Manager, and Agent roles with scoped visibility and actions.
- Conversation lifecycle — open / pending / closed status, assignment, and reassignment.
- 24-hour window handling — free-text replies inside WhatsApp’s service window; the composer switches to approved templates once it closes.
- Media — inbound images, audio/voice, video, documents and stickers are downloaded to protected storage and served only to authorised staff.
- Notifications — email to the assigned agent (or managers) plus in-dashboard browser notifications and an unread badge.
- Optional AI assistant — auto-answers new conversations from a knowledge base and escalates to a human when needed (see below).
- Data retention — automatic and manual deletion of stale conversations, media, and logs.
- Self-contained — no build step, no external libraries; a single installable plugin.
Installation
- Upload
cxmedia-helpdesk.zipvia Plugins → Add New → Upload Plugin, or extract thecxmedia-helpdeskfolder intowp-content/plugins/. - Activate the plugin. On activation it creates its database tables and the two custom roles.
- Open CXMedia Helpdesk → Settings and complete the WhatsApp configuration.
WhatsApp setup
The Settings page links the exact Meta destinations you need. In short:
- In the Meta App Dashboard, create a Business app and add the WhatsApp product.
- Under WhatsApp → API Setup, note your Phone Number ID and WhatsApp Business Account ID.
- In Business Settings → System Users, generate a permanent access token with the
whatsapp_business_messagingandwhatsapp_business_managementpermissions. - Enter the Phone Number ID, WABA ID, access token, and your App Secret in CXMedia Helpdesk → Settings, then save (this generates a webhook verify token).
- Under WhatsApp → Configuration in your Meta app, set the Callback URL and Verify token shown on the Settings page, and subscribe to the messages field.
Verify the webhook by opening the callback URL with your real token in a browser:
https://YOURSITE/wp-json/cxmedia-helpdesk/v1/webhook?hub.mode=subscribe&hub.verify_token=YOUR_TOKEN&hub.challenge=test123 A correct setup echoes back test123. Forbidden means the token doesn’t match (often the placeholder was left in, or Settings wasn’t saved yet).
Roles & permissions
| Capability | Administrator | Manager | Agent |
|---|---|---|---|
| See all conversations | ✓ | ||
| See own team’s conversations | ✓ | ✓ | |
| Operate only assigned conversations | ✓ | ||
| Reassign conversations | ✓ | ✓ (team) | ✓ (to teammates) |
| Add / edit / delete team users | ✓ | ✓ (own team) | |
| Delete conversations | ✓ | ✓ (scope) | |
| Plugin settings | ✓ |
A team is a manager plus the agents assigned to them. Managers manage their own team only; they are not granted WordPress’s site-wide user-management capabilities. Manage members on the Team page.
AI assistant (optional)
When enabled, new conversations are answered automatically by an AI bot that draws its knowledge from the CrossMediaBot plugin (its knowledge base, crawler index, Gemini model, and API key are reused). The bot answers only from that configured knowledge and hands off to a human agent when it cannot answer, when the customer asks for a person, or on any error.
- Requires the CrossMediaBot plugin to be installed and configured; the Settings page shows whether it’s detected.
- Bot replies are auto-sent and marked as Bot in the inbox for auditability.
- Agents can Take over a bot conversation at any time (and hand it back).
- If the assistant is disabled, the helpdesk runs as a pure human tool.
Data retention
Delete conversations that have had no message from the contact for a configurable number of months (default: 1).
- Automatic deletion (opt-in) runs once a day.
- Delete now (Settings, admins) purges everything past the window immediately.
- Per-conversation delete (inbox, managers/admins) removes a single conversation.
Deletion removes the conversation, its messages, downloaded media files, the raw webhook payload log entries by age, and the contact record if it has no other conversations. Deletion is permanent.
Deployment notes
- Public HTTPS is required for the webhook; Meta will not call
localhostand expects a valid certificate. - WP-Cron must run for media downloads, notification emails, AI replies, and automatic retention. On low-traffic sites, configure a real system cron hitting
wp-cron.phpand setdefine('DISABLE_WP_CRON', true);. - Email: notifications use
wp_mail(); most sites need an SMTP plugin for reliable delivery. - Nginx: the protected media directory ships with an Apache
.htaccessdeny rule. On Nginx addlocation ~ /wahd-media/ { deny all; }so media stays private.
Privacy
The plugin processes WhatsApp contact identifiers, profile names, message content, and media. Message content (and, if the AI assistant is enabled, the knowledge base) is transmitted to Meta and — for AI replies — to Google. The plugin sends no telemetry to its author. A ready-to-adapt privacy policy template is provided separately; publish and adapt it for your deployment.
For developers
- REST namespace:
cxmedia-helpdesk/v1(inbox, conversations, agents, users, media, webhook). - Custom tables:
wahd_contacts,wahd_conversations,wahd_messages,wahd_webhook_log. - Action hooks include
wahd_message_stored,wahd_payload_received,wahd_media_fetched,wahd_conversation_deleted. - Filters include
wahd_notification_recipientsandwahd_notify_throttle.
Changelog
1.0
- Initial release: WhatsApp Cloud API webhook, inbound processing, media fetch, and outbound sending with 24-hour window enforcement.
- Agent inbox with conversation list, thread view, templates, and status control.
- Role-based access: Administrator / Manager / Agent, team-scoped user management.
- Email and in-dashboard notifications with unread badge.
- Optional AI assistant with CrossMediaBot knowledge base and human escalation; bot-sent messages marked in the inbox.
- Configurable automatic and manual data retention.
Credits
Developed by Gino Croes — Crossmedia297. For support or enquiries: admin@crossmedia297.com · https://crossmedia297.com