תיאור
Besked WhatsApp Notifications connects your WordPress site to the Besked WhatsApp messaging platform, enabling you to:
- Send automated WhatsApp notifications for WooCommerce orders (new order, processing, completed, cancelled, refunded, on-hold, and custom statuses)
- Manage a contact address book with WhatsApp consent (GDPR-compliant)
- Create and schedule broadcast campaigns to contact lists with per-recipient personalisation
- Track abandoned carts and send automated recovery messages
- Import contacts from WooCommerce orders, WordPress users, or CSV files
- Collect WhatsApp consent at checkout, on the account page, and via a dedicated "My Account" section
Key Features
Order Notifications
Automatically notify customers on every order status change with fully customisable message templates and dynamic placeholders ({order_number}, {order_total}, {customer_first_name}, etc.).
Contact Management
Full-featured address book with search, filtering, list segmentation, CSV import/export, and bulk actions (enable/revoke consent, add/remove from lists).
Broadcast Campaigns
Compose WhatsApp campaigns with a live preview editor (bold, italic, strikethrough, monospace), attach images or documents, schedule delivery, and track per-contact delivery logs.
Abandoned Cart Recovery
Detect abandoned carts and automatically send recovery messages after a configurable delay, with optional discount coupon codes.
GDPR & Consent
Collect explicit WhatsApp consent at checkout and in the account area. Contacts can unsubscribe via a secure tokenised link in any message.
Requirements
- A Besked account and API key — sign up at besked.it
- WordPress 6.2 or higher
- PHP 7.4 or higher
- WooCommerce 5.0+ (optional — required only for order notifications and cart tracking)
External services
This plugin connects to the Besked WhatsApp messaging API (provided by Besked.it, https://besked.it) to deliver WhatsApp messages and to manage WhatsApp sessions. Using the plugin therefore requires an active Besked account and an API key, which the site owner enters in the plugin settings.
What the service is and what it is used for
Besked is a third-party WhatsApp messaging gateway. The plugin relies on it to:
- Send single WhatsApp messages (for example, WooCommerce order status notifications).
- Send bulk/broadcast WhatsApp campaigns to contact lists, with optional media attachments.
- Retrieve the list of WhatsApp sessions available for the account.
- Check the connection status of a WhatsApp session.
What data is sent, and when
The following requests are made to https://app.besked.it:
POST /api/v1/send— every time a single WhatsApp notification is sent (for example, when a WooCommerce order changes status, or an abandoned cart recovery message is triggered). Data sent: the configured Session ID, the recipient phone number in E.164 format, the message body, and optionally a media URL, media type and file name.POST /api/v1/send/bulk— every time a campaign is dispatched. Data sent: the Session ID, the message template and the recipient list (phone number plus any per-recipient personalisation variables), and optional media.GET /api/v1/sessions— when the site administrator opens the plugin settings page, to display the list of available WhatsApp sessions.GET /api/v1/sessions/{session_id}/status— when the site administrator checks the connection status of a session.
Every request includes the API key configured by the site owner, sent as the X-API-Key HTTP header for authentication. No data is sent to Besked for visitors who have not given WhatsApp consent (consent is stored per contact as whatsapp_consent = 1).
Service provider, terms and privacy
The service is provided by Besked.it. For details about how Besked handles the data it receives, please refer to the provider's legal documents:
- Terms of Service: https://besked.it/termini.html
- Privacy Policy: https://besked.it/privacy-policy.html
התקנה
- Upload the
besked-wa-notificationsfolder to the/wp-content/plugins/directory, or install directly from the WordPress plugin directory. - Activate the plugin through the Plugins menu in WordPress.
- Go to Besked Impostazioni and enter your API Key and Session ID from your Besked dashboard.
- Configure notification templates under Notifiche WooCommerce.
- (Optional) Enable WhatsApp consent collection under GDPR & Consenso.
שאלות נפוצות
-
Do I need a Besked account?
-
Yes. The plugin sends messages through the Besked API. You need a Besked account and an active WhatsApp session. Sign up at besked.it.
-
Does it work without WooCommerce?
-
Yes. The contact address book, campaign management, and manual messaging features work independently of WooCommerce. Order notification and cart abandonment features require WooCommerce.
-
Is it GDPR compliant?
-
The plugin includes a built-in consent system. You can collect explicit opt-in at checkout and in the customer account area. Contacts can unsubscribe at any time via a secure link. No message is sent to contacts without
whatsapp_consent = 1. -
What placeholders are available in message templates?
-
Order templates:
{order_number},{order_date},{order_total},{order_status},{customer_first_name},{customer_last_name},{customer_email},{billing_address},{shipping_address},{payment_method},{order_items},{site_name},{site_url},{customer_note},{bacs_details},{unsubscribe}.Campaign templates:
{first_name},{last_name},{phone},{email},{site_name},{site_url},{unsubscribe}. -
Can I send to contacts without WooCommerce?
-
Yes. Import contacts via CSV or from existing WordPress users (with custom phone field mapping via Impostazioni Mappa campi custom), then create a campaign or send manual messages.
סקירות
There are no reviews for this plugin.
מפתחים
ניתן לתרגם את "Besked Notifications" לשפה שלך.
מעוניינים בפיתוח?
עיינו בקוד, ראו את הקוד ב-SVN repository, או הירשמו ללוג פיתוח באמצעות RSS.
שינויים
1.11.0
- New: the Messages history page now lets you select messages (with a "select all" checkbox) and delete them in bulk, plus a per-row delete button
- Fix: the waitlist confirmation / back-in-stock messages are now sent immediately (synchronously), like the order notifications, instead of only being queued for the retry cron. On sites where WP-Cron does not run reliably the messages stayed "pending" and were never delivered
- Fix: the message-retry cron event (
besked_retry_messages) is now self-scheduled by the cron handler, so automatic retries of failed/pending messages keep working even if the event ever went missing from the schedule
1.10.2
- Fix: the "Avvisami" (waitlist) popup did not open on click — the popup script/style are now loaded by the Elementor widget itself (independent of
is_product()and hook timing), and the hard dependency onwc-add-to-cart-variation(which could silently prevent the script from loading) was removed - Fix: the waitlist Elementor widget now renders nothing on the front end when the waitlist is disabled or not available for the visitor's role (it still renders in the Elementor editor so it can be styled)
1.10.1
- Fix: saving the Waitlist message templates opened a blank admin-post.php page and did not save — the save handler referenced the activator class, which is not loaded on that request. It now loads it explicitly (same pattern as the WooCommerce notifications save)
1.10.0
- New: Waitlist / "Avvisami" — when a product (or a specific variation) is out of stock, an "Avvisami" button lets shoppers join a back-in-stock waitlist. Guests leave name + WhatsApp number (with optional opt-in); logged-in customers confirm/update their number and see their current consent state. When the product returns in stock they are automatically notified on WhatsApp
- New: Elementor widget ("Besked — Avvisami") to place and fully style the button and its consent popup (button, popup border/background/title/description typography, and the two footer buttons with hover states) on the single-product page
- New: Waitlist admin section — see who is waiting per product/variation and drill into each subscriber (guest/customer, email, phone, request date, and whether they have been informed)
- New: Waitlist settings — enable/disable, choose which roles it is active for (all incl. guests by default), and three toggleable WhatsApp templates (subscription confirmation to the customer, to the admin, and the back-in-stock notification)
- New: two message shortcodes for the back-in-stock template —
{link_product}(link to the product) and{link_checkout}(a one-tap "direct checkout" link that adds the product to the cart and goes to checkout). Both tag the visit so WooCommerce records the order Origin as "Besked / WhatsApp", and the link preview on WhatsApp shows the product (image/title), never a bare checkout page - New: the WhatsApp live preview (as seen in Campaigns) now also appears next to the message template editors under Waitlist, Abandoned Carts Automations, and Settings Notifications
- Improved: the plugin back-end is now fully translated to Italian (the Abandoned Carts automations/settings screens and other admin strings were partly untranslated)
1.9.2
- Fix: campaign delivery counters are now correct even when the backend has already cleaned up delivered messages. "Sent" is derived from the total minus the (never-cleaned) pending and failed counts, instead of the backend's eroded sent-row count, so a campaign no longer shows more "sent" than its total or 0 pending while messages are still queued
- Fix: recovering a campaign now stores its true recipient total instead of the (possibly shrunk) count of messages still present in the queue
1.9.1
- New: "Recover status" action on campaigns that were sent before live tracking existed — it lists the matching batches still present in the Besked queue and lets you reconnect the campaign so its real sent/pending/failed counters are shown again
- Reliability: campaigns delivered over several days (spread out by anti-ban daily limits) now keep accurate counters, and a campaign is reconciled to 100% (or marked Failed if all recipients failed) once complete
- The status poll now requests a lightweight summary from the backend
- Requires app.besked.it 3.61.1+
1.9.0
- New: live campaign delivery status — each campaign now shows the number of messages sent, pending (in the queue), failed and the total expected, kept in sync with the Besked sending queue by a cron that runs every 5 minutes
- New: Pause / Resume controls on a sending campaign — pausing suspends the messages still queued in Besked until you resume them
- Campaigns now stay in a "Sending" state and update their counters over time instead of being marked complete the moment they are queued
- Requires the Besked backend that exposes the campaign batch status and pause/resume endpoints (app.besked.it 3.61.0+)
1.8.2
- New: added a "Numbers to validate" option to the Contacts consent filter, showing only contacts whose phone number carries the non-mobile/landline warning (excluded from sending until reviewed)
1.8.1
- Fix: fatal error ("Undefined constant MB_TITLE_CASE") when displaying contacts or sending campaigns — the Title Case helper used the wrong mbstring constant; corrected to MB_CASE_TITLE
1.8.0
- New: contact names are shown in Title Case in the address book (First name / Last name columns) and when printed in messages via the {first_name} and {last_name} placeholders — e.g. "MARIO DI FALCO" is displayed as "Mario Di Falco" (multibyte/accent aware; the stored value is left unchanged)
- New: the campaign live preview now renders attachments inside the WhatsApp bubble following WhatsApp's UI — images and video (with a play overlay) above the caption, and a document card with icon and file name
- Accessibility/UX: the landline warning icon now exposes an accessible label; disabled recipient controls are visually dimmed; the background page is made inert while the phone-edit dialog is open; the Media Library picker is correctly titled when choosing a video
- Compatibility: tested up to WordPress 7.0
1.7.0
- New: non-mobile / landline numbers are flagged in the Contacts page with a warning icon (hover tooltip) and are automatically excluded from WhatsApp messages, notifications and campaigns until corrected; the inline phone editor shows a "Consider this number correct and remove the warning" checkbox to override the flag. Confident detection covers Italian numbers (mobiles start with 3); extend other countries via the
besked_phone_is_flaggedfilter - New: campaigns can attach a video (in addition to image and document/PDF)
- New: "WHOLE ADDRESS BOOK" option in a campaign's recipient section — send to every contact with consent; selecting it disables the custom lists, and choosing custom lists clears it (mutually exclusive)
- Changed: the campaign send option "Send now (within 1 minute)" now reads "Send now (at your next cron job)" to reflect that delivery happens on the next cron run
- Accessibility: the inline phone editor now returns focus to the edited row on close, traps Tab focus inside the dialog, announces validation/success messages, and keeps the edit affordance visible on touch devices
1.6.0
- New: inline phone-number editing in the Contacts page — click a number to open a popup with a
telfield and Save/Cancel buttons - New: when the edited contact is linked to a registered customer, the number is also written back to the customer's profile (
billing_phone, or the field configured under Settings Custom field mapping); unlinked contacts are updated in the address book only - The edit rejects a number already assigned to another contact (the phone column is unique) and normalises the input to E.164 before saving
1.5.4
- Code quality: in
ajax_media_upload()removed the unusedrequire_once wp-admin/includes/media.phpand movedrequire_once wp-admin/includes/image.phpimmediately beforewp_generate_attachment_metadata(), so each core admin file is loaded right before the function from it is used - Security: added an explicit
wp_verify_nonce( 'woocommerce-process_checkout' )check at the start ofvalidate_phone(),sanitize_phone_on_save()andsave_checkout_data()in the WooCommerce checkout integration, so the nonce verification is visible inline (it was already enforced upstream by WooCommerce) - Security: added a
besked_media_filtersnonce to the Besked Media admin page sort/filter links and form, withwp_verify_nonceon incoming requests; filter and sort query args are now ignored unless accompanied by a valid nonce
1.5.3
- Code quality: replaced all inline
<script>and<style>tags withwp_enqueue_script(),wp_enqueue_style(),wp_add_inline_script(), andwp_localize_script()per WordPress coding standards - Security: added nonce verification to the checkout cart-tracking AJAX endpoint (
besked_track_billing) - Security: input fields of the abandoned-cart automation save handler are now individually sanitised with the appropriate WordPress functions (
sanitize_text_field,wp_kses_post,absint, whitelist checks) - Security: replaced direct SQL interpolation with
$wpdb->prepare()and placeholders across campaigns, messages, contacts, abandoned-carts and lists queries - Docs: added the
== External services ==section describing the Besked API usage, data sent and links to the provider's Terms of Service and Privacy Policy
1.4.0
- Added "Import from WordPress users" feature with phone field mapping
- Added "Custom field mapping" settings tab for non-WooCommerce phone fields
- Added media attachments (image/document) to broadcast campaigns
- Added Besked Media library page with bulk delete
- Added CSV import with auto-detected delimiter and column mapping
- Improved bulk action confirmation prompts
1.3.0
- Added broadcast campaigns with per-recipient variable substitution
- Added live WhatsApp preview editor with formatting toolbar
- Added campaign scheduling and per-contact delivery logs
1.2.0
- Added contact list segmentation
- Added GDPR unsubscribe tokens
- Added My Account "Notification preferences" endpoint
1.1.0
- Added abandoned cart tracking and automated recovery messages
- Added Formidable Forms integration
1.0.0
- Initial release
