Title: Besked Notifications
Author: giangel84
Published: <strong>2026-04-30</strong>
Last modified: 2026-10-08

---

Szukaj wtyczek

![](https://ps.w.org/besked-wa-notifications/assets/banner-772x250.png?rev=3519711)

![](https://ps.w.org/besked-wa-notifications/assets/icon-256x256.jpg?rev=3519684)

# Besked Notifications

 Autor: [giangel84](https://profiles.wordpress.org/giangel84/)

[Pobierz](https://downloads.wordpress.org/plugin/besked-wa-notifications.zip)

 * [Szczegóły](https://pl.wordpress.org/plugins/besked-wa-notifications/#description)
 * [Recenzje](https://pl.wordpress.org/plugins/besked-wa-notifications/#reviews)
 *  [Instalacja](https://pl.wordpress.org/plugins/besked-wa-notifications/#installation)
 * [Rozwój](https://pl.wordpress.org/plugins/besked-wa-notifications/#developers)

 [Wsparcie](https://wordpress.org/support/plugin/besked-wa-notifications/)

## Opis

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](https://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

## Instalacja

 1. Upload the `besked-wa-notifications` folder to the `/wp-content/plugins/` directory,
    or install directly from the WordPress plugin directory.
 2. Activate the plugin through the **Plugins** menu in WordPress.
 3. Go to **Besked  Impostazioni** and enter your API Key and Session ID from your 
    [Besked dashboard](https://app.besked.it).
 4. Configure notification templates under **Notifiche WooCommerce**.
 5. (Optional) Enable WhatsApp consent collection under **GDPR & Consenso**.

## Najczęściej zadawane pytania

### 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](https://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.

## Recenzje

Wtyczka nie ma jeszcze żadnej recenzji.

## Kontrybutorzy i deweloperzy

„Besked Notifications” jest oprogramowaniem open source. Poniższe osoby miały wkład
w rozwój wtyczki.

Zaangażowani

 *   [ giangel84 ](https://profiles.wordpress.org/giangel84/)

[Przetłumacz wtyczkę “Besked Notifications” na swój język.](https://translate.wordpress.org/projects/wp-plugins/besked-wa-notifications)

### Interesuje cię rozwój wtyczki?

[Przeglądaj kod](https://plugins.trac.wordpress.org/browser/besked-wa-notifications/),
sprawdź [repozytorium SVN](https://plugins.svn.wordpress.org/besked-wa-notifications/)
lub czytaj [dziennik rozwoju](https://plugins.trac.wordpress.org/log/besked-wa-notifications/)
przez [RSS](https://plugins.trac.wordpress.org/log/besked-wa-notifications/?limit=100&mode=stop_on_copy&format=rss).

## Rejestr zmian

#### 1.12.0

 * Fix: the bulk „Enable consent” / „Revoke consent” confirmation never matched 
   when the admin typed the word shown in the Italian prompt (ABILITA / REVOCA) —
   the keyword is now translated together with the prompt and compared case-insensitively(
   the English ENABLE / REVOKE are always accepted as well)
 * Fix: after a bulk action the contacts page now shows the „Action completed on
   N contacts” notice (it was never triggered); the „Remove from list” confirmation
   showed raw %1$d / %2$s placeholders instead of the count and list name
 * Fix: deleting contacts (single or bulk) now also removes their list memberships,
   so list counts no longer include deleted contacts; consent dates set in bulk 
   use the site timezone like every other timestamp
 * New: **Duplicates** tab in Contacts — every number is reduced to a canonical 
   form (doubled country code such as +39 39 379…, lost prefix, non-standard format);
   contacts that resolve to the same number are shown as groups you can **merge**,
   choosing the contact and the number to keep (lists, campaign history, waitlist,
   abandoned carts and consent are carried over, the linked customer profile is 
   updated); single contacts with a repairable number get a one-click correction,
   individually or all at once
 * New: „Merge selected into one contact…” bulk action in the contacts table, using
   the same merge dialog
 * New: contacts whose number looks wrong show an info icon next to the number, 
   and the edit dialog proposes the corrected number with a „Use this number” shortcut;
   the Contacts tab shows a warning (with a link to the Duplicates tab) while duplicate
   groups or correctable numbers exist
 * Improved: phone normalisation now repairs a doubled country code (+39 39 379…,
   +39 +39 …, 0039 39 …, +0039 …), drops the national trunk prefix kept after a 
   non-Italian country code (+44 07911…, +49 0151…, +36 06 1…, +7 8 912…, and the
   same numbers typed without „+” with that default country) and no longer mangles
   Italian mobiles with a 39x prefix typed without country code (3931234567 used
   to be stored as +3931234567, 3901234567 as +3901234567). Per-country number lengths
   and trunk prefixes follow libphonenumber, so a number that is valid for its country
   is never rewritten
 * Improved: consent checks, order sync, unsubscribe links and the waitlist still
   find contacts saved before 1.12 under a legacy spelling (doubled country code,
   trunk prefix after the country code, lost 39x prefix) whatever format the caller
   passes, and updating such a contact repairs its number in place instead of creating
   a duplicate
 * Improved: correcting a number (edit dialog, quick fix or merge) also re-points
   pending waitlist subscriptions and abandoned carts to the corrected number; merging
   updates the linked customer profile whenever one of the merged contacts carried
   a wrong number

#### 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 on `wc-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_flagged` filter
 * 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 `tel` field 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 unused `require_once wp-admin/
   includes/media.php` and moved `require_once wp-admin/includes/image.php` immediately
   before `wp_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 of `validate_phone()`, `sanitize_phone_on_save()` and `save_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_filters` nonce to the Besked Media admin page
   sort/filter links and form, with `wp_verify_nonce` on 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 with `wp_enqueue_script()`,`
   wp_enqueue_style()`, `wp_add_inline_script()`, and `wp_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

## Meta

 *  Wersja **1.12.0**
 *  Ostatnia aktualizacja **3 dni temu**
 *  Włączone instalacje **Mniej niż 10**
 *  Wersja WordPressa ** 6.2 lub nowszej **
 *  Testowano do **7.0.7**
 *  Wersja PHP ** 7.4 lub nowszej **
 *  Język
 * [English (US)](https://wordpress.org/plugins/besked-wa-notifications/)
 * Tagi
 * [messaging](https://pl.wordpress.org/plugins/tags/messaging/)[Notifications](https://pl.wordpress.org/plugins/tags/notifications/)
   [sms](https://pl.wordpress.org/plugins/tags/sms/)[whatsapp](https://pl.wordpress.org/plugins/tags/whatsapp/)
   [woocommerce](https://pl.wordpress.org/plugins/tags/woocommerce/)
 *  [Widok zaawansowany](https://pl.wordpress.org/plugins/besked-wa-notifications/advanced/)

## Oceny

Nie przesłano jeszcze żadnych recenzji.

[Twoja opinia](https://wordpress.org/support/plugin/besked-wa-notifications/reviews/#new-post)

[Zobacz wszystkierecenzje.](https://wordpress.org/support/plugin/besked-wa-notifications/reviews/)

## Zaangażowani

 *   [ giangel84 ](https://profiles.wordpress.org/giangel84/)

## Wsparcie

Masz coś do dodania? Potrzebujesz pomocy?

 [Zobacz forum wsparcia](https://wordpress.org/support/plugin/besked-wa-notifications/)