WooCommerce order notifications with Honk Me
WooCommerce emails you about new orders, and those emails share an inbox with everything else. Most shop owners want two things on their phone instead: a short note for every paid order, and a loud alert when payments start failing, before customers give up.
The Honk Me plugin for WordPress sends both, without code. It also covers refunds, stock, new customers, reviews, form entries, sign-ins and site health, and one settings screen lets you choose what each notification says.
Before you start
- A Honk account. Honk is invite-only for now: request access.
- A project for the shop, for example “Shop”.
- WordPress 6.4 or later with PHP 7.4 or later. WooCommerce is optional: without it, you still get sign-ins, site health, comments and forms.
1. Install the plugin
The plugin is coming to the WordPress plugin directory, where it’s in review now. Once it’s listed, open Plugins ▸ Add Plugin in WordPress, search for Honk Me, then click Install Now and Activate. Until then, use one of the setups under “Without the plugin” at the end of this guide.
Nothing is sent before you add a key, so you can install it on a live shop.
2. Connect it to Honk
In the Honk web app, open the shop’s project, go to Keys and create a key. Copy it right away: Honk shows it only once.
In WordPress, open Settings ▸ Honk and paste the key into API key. Leave the server URL as it is unless you run your own Honk server, and click Save Changes.
3. Choose what you hear about
Under Events, every event has its own switch, a level on the Honk scale and a priority. The defaults are a good start: a paid order is a Beep-beep, a failed payment a Loud honk, and a product that runs out a Long honk.

Honk groups repeats, so 30 failed payments in an hour are one episode with a counter, not 30 pushes. Things that start and stop, like low stock or a wave of failed sign-ins, also send an all-clear when they’re over.
4. Choose what each notification says
Click Details under an event to see what its notification can say. A new order always has its number and a link to the order in WordPress. The rest are checkboxes: the total, the number of items, the status, the payment and shipping method, the first three products, and the customer’s name, email, phone, billing city and note. The preview next to them shows how the notification will read in Honk, and it changes as you tick.

The customer’s details are personal data, so they’re sent only while Include customer names and emails is on, under Privacy and language. While it’s off, they’re greyed out and nothing personal goes out, whatever is ticked. For Contact Form 7, WPForms and Gravity Forms, you can also leave out single fields of each form.
Click Save Changes when you’re done.
5. Send a test
Back at the top of Settings ▸ Honk, click Send test notification. It uses the key in the field, even before you save, and shows Honk’s answer right below. The test reaches your Honk inbox within seconds.

To see a real order, place one with a payment method such as cash on delivery. Settings ▸ Honk ▸ Delivery log lists every notification the site has sent, with its status.
Quiet nights for the shop
Orders at 3 a.m. are good news that can wait. In the Honk web app, open the shop’s project ▸ My notifications and set quiet hours; you get one summary in the morning. Or set your push threshold to High: paid orders then wait for the digest, while a product that runs out still pushes right away, because a Long honk is always at least High. To have failed payments push too, set their priority to High under Events.
About customer data
With the plugin’s defaults, notifications carry no personal data: an order reads “Order #1234 · €84.00 · 2 items”. Names, emails and the rest go out only when you turn them on, and only the ones you tick. Honk keeps messages for 3, 14 or 30 days, depending on your plan, and uses them only to show them to you. The plugin also suggests a paragraph for your privacy policy, under Settings ▸ Privacy in WordPress.
Without the plugin
While the plugin is in review, or if you’d rather not install one, two other ways work too.
A workflow tool. WooCommerce can send every order to a webhook, in its own format. Put n8n, Make or Zapier in between to pick the fields and send them to Honk. With n8n and the Honk node:
WooCommerce ▸ Settings ▸ Advanced ▸ Webhooks ▸ Add webhook
Status: Active
Topic: Order updated
Delivery URL: https://your-n8n.example.com/webhook/woocommerce
n8n workflow
1. Webhook (POST /webhook/woocommerce)
2. If: {{ $json.body.status }} is "processing"
3. Honk → Send message
Message: {{ $json.body.billing.first_name }} {{ $json.body.billing.last_name }}: {{ $json.body.line_items.map(i => i.quantity + ' × ' + i.name).join(', ') }}
Title: New order #{{ $json.body.number }} · {{ $json.body.total }} {{ $json.body.currency }}
Severity: Beep-Beep (Success)
Additional Fields
Category: Sales
Group Key: orders/{{ $json.body.id }}
Options
Idempotency Key: wc-{{ $json.body.id }}-paidIn Make or Zapier, use their HTTP module with the same fields; the forms guide shows one filled in.
A few lines of code. Put the key in wp-config.php, where it stays out of content exports and backups:
// wp-config.php, above the line "That's all, stop editing!"
define('HONK_KEY', 'honk_…');Then create wp-content/mu-plugins/honk.php with a small helper. WordPress loads must-use plugins by itself, and 'blocking' => false means checkout never waits for Honk:
<?php
/*
* Plugin Name: Honk notifications
* Description: Sends store and form events to Honk (honk-me.app). Not an official Honk plugin: a starting point to adapt.
*/
// Sends one event to Honk without slowing the page down. The key comes from wp-config.php.
function honk_send(array $event, string $idempotency_key): void
{
if (!defined('HONK_KEY')) {
return;
}
// Honk accepts https links only; drop the link on an http:// development site
if (isset($event['url']) && !str_starts_with($event['url'], 'https://')) {
unset($event['url']);
}
$event['message'] = mb_strcut($event['message'], 0, 8000); // a message holds up to 8192 bytes
wp_remote_post('https://honk-me.app/v1/messages', [
'timeout' => 5,
'blocking' => false, // fire and forget: checkout never waits for Honk
'headers' => [
'Authorization' => 'Bearer ' . HONK_KEY,
'Content-Type' => 'application/json',
'Idempotency-Key' => $idempotency_key,
],
'body' => wp_json_encode($event),
]);
}Add the order events to the same file. Each one has an idempotency key built from the order, so a retried hook never notifies you twice:
// A paid order: a Beep-beep with what was bought.
add_action('woocommerce_payment_complete', function ($order_id) {
$order = wc_get_order($order_id);
if (!$order) {
return;
}
$items = [];
foreach ($order->get_items() as $item) {
$items[] = $item->get_quantity() . ' × ' . $item->get_name();
}
honk_send([
'title' => sprintf('New order #%s · %s %s', $order->get_order_number(), $order->get_total(), $order->get_currency()),
'message' => $order->get_formatted_billing_full_name() . "\n" . implode("\n", $items),
'severity' => 'beep',
'category' => 'sales',
'source' => 'woocommerce',
'group_key' => 'orders/' . $order->get_id(),
'url' => $order->get_edit_order_url(),
], 'wc-' . $order->get_id() . '-paid');
// the gateway works again after a failure: close that incident
$gateway = $order->get_payment_method();
if (get_transient('honk_failed_' . $gateway)) {
delete_transient('honk_failed_' . $gateway);
honk_send([
'title' => sprintf('Payments via %s work again', $order->get_payment_method_title()),
'message' => sprintf('Order #%s was paid.', $order->get_order_number()),
'event_type' => 'recovery',
'category' => 'payments',
'source' => 'woocommerce',
'group_key' => 'payments/' . $gateway,
], 'wc-' . $order->get_id() . '-gateway-ok');
}
});
// A failed payment: one group per payment method, so a broken gateway is one incident, not 30 pushes.
add_action('woocommerce_order_status_failed', function ($order_id, $order) {
$gateway = $order->get_payment_method();
set_transient('honk_failed_' . $gateway, 1, DAY_IN_SECONDS);
honk_send([
'title' => sprintf('Payment failed: order #%s', $order->get_order_number()),
'message' => sprintf('%s, %s %s via %s', $order->get_formatted_billing_full_name(), $order->get_total(), $order->get_currency(), $order->get_payment_method_title()),
'severity' => 'long',
'event_type' => 'problem',
'category' => 'payments',
'source' => 'woocommerce',
'group_key' => 'payments/' . $gateway,
'url' => $order->get_edit_order_url(),
], 'wc-' . $order->get_id() . '-failed');
}, 10, 2);Honk is invite-only for now: request access. Everything in this guide works on the Free plan.