# WooCommerce-Bestellungen als Push mit Honk Me

> Installiere Honk Me, füge einen Schlüssel ein und bestimme, was jede Mitteilung zeigt. Bestellungen, Zahlungen, Lagerbestand und Formulare kommen aufs iPhone.

Source: https://honk-me.app/de/anleitungen/woocommerce-bestellungen-push

WooCommerce meldet neue Bestellungen per E-Mail, und die gehen im Postfach zwischen allem anderen unter. Als Shopbetreiber willst du auf dem Handy meist etwas anderes: eine kurze Meldung zu jeder bezahlten Bestellung und einen lauten Alarm, wenn Zahlungen fehlschlagen, noch bevor Kunden aufgeben.

Das Plugin Honk Me für WordPress schickt dir beides, ganz ohne Code. Es kümmert sich auch um Erstattungen, Lagerbestand, neue Kunden, Rezensionen, Formulare, Anmeldeversuche und den Website-Zustand, und auf einer einzigen Einstellungsseite legst du fest, was in jeder Mitteilung steht.

## Voraussetzungen

- Ein Honk-Konto. Honk gibt es vorerst nur auf Einladung: [Zugang anfragen](https://honk-me.app/de/zugang-anfragen).
- Ein Projekt für den Shop, zum Beispiel „Shop“.
- WordPress 6.4 oder neuer mit PHP 7.4 oder neuer. WooCommerce ist optional. Auch ohne meldet das Plugin Anmeldeversuche, den Website-Zustand, Kommentare und Formulare.

## 1. Das Plugin installieren

Das Plugin wird gerade für das WordPress-Plugin-Verzeichnis geprüft. Sobald es dort steht, öffne in WordPress **Plugins ▸ Plugin hinzufügen**, such nach **Honk Me** und klicke auf **Jetzt installieren** und dann auf **Aktivieren**. Bis dahin nimmst du einen der Wege unter „Ohne das Plugin“ am Ende dieser Anleitung.

Bevor du einen Schlüssel einträgst, wird nichts gesendet. Du kannst das Plugin also bedenkenlos in einem laufenden Shop installieren.

## 2. Mit Honk verbinden

Öffne in der Honk-Web-App das Projekt des Shops und erstelle unter **Schlüssel** einen neuen. Kopiere ihn gleich: Honk zeigt ihn nur einmal an.

Öffne in WordPress **Einstellungen ▸ Honk** und füge den Schlüssel in das Feld **API-Schlüssel** ein. Lass die Server-URL, wie sie ist, außer du betreibst einen eigenen Honk-Server, und klicke auf **Änderungen speichern**.

## 3. Wählen, worüber du informiert wirst

Unter **Ereignisse** hat jedes Ereignis ein eigenes Kästchen zum Einschalten, eine Stufe auf der Honk-Skala und eine Priorität. Die Voreinstellungen sind ein guter Anfang: Eine bezahlte Bestellung ist ein Tüt-tüt, eine fehlgeschlagene Zahlung ein Lautes Hupen und ein ausverkauftes Produkt ein Langes Hupen.

_Die WooCommerce-Ereignisse unter Einstellungen ▸ Honk, jedes mit Kästchen, Stufe und Priorität._

Honk fasst Wiederholungen zusammen: 30 fehlgeschlagene Zahlungen in einer Stunde sind eine Episode mit Zähler, nicht 30 Pushes. Was anfängt und wieder aufhört, etwa ein geringer Bestand oder eine Welle fehlgeschlagener Anmeldeversuche, schickt dir außerdem eine Entwarnung, sobald es vorbei ist.

## 4. Wählen, was jede Mitteilung enthält

Klicke unter einem Ereignis auf **Details**, um zu sehen, was seine Mitteilung enthalten kann. Eine neue Bestellung hat immer ihre Nummer und einen Link zur Bestellung in WordPress. Der Rest sind Kästchen: Summe, Anzahl der Artikel, Status, Zahlungs- und Versandart, die ersten drei Produkte sowie Name, E-Mail-Adresse, Telefonnummer, Rechnungsort und Hinweis des Kunden. Die Vorschau daneben zeigt, wie die Mitteilung in Honk aussieht, und ändert sich mit jedem Häkchen.

_Die Details von „Neue Bestellung“: die Kästchen und die Vorschau der Mitteilung._

Die Angaben zum Kunden sind personenbezogene Daten. Sie werden nur gesendet, solange **Kundennamen und E-Mail-Adressen mitsenden** unter **Datenschutz und Sprache** eingeschaltet ist. Ist es aus, sind sie ausgegraut und es geht nichts Persönliches hinaus, egal was angehakt ist. Bei Contact Form 7, WPForms und Gravity Forms kannst du außerdem einzelne Felder jedes Formulars weglassen.

Klicke auf **Änderungen speichern**, wenn du fertig bist.

## 5. Einen Test senden

Klicke oben unter **Einstellungen ▸ Honk** auf **Testnachricht senden**. Der Test nimmt den Schlüssel aus dem Feld, auch vor dem Speichern, und zeigt die Antwort von Honk direkt darunter. Nach ein paar Sekunden ist er in deinem Honk-Posteingang.

_Die Antwort auf „Testnachricht senden“: Es funktioniert, mit der ID der Nachricht._

Für einen echten Test bestellst du selbst etwas, etwa per Nachnahme. Unter **Einstellungen ▸ Honk ▸ Zustellprotokoll** steht jede Mitteilung, die die Website gesendet hat, mit ihrem Status.

## Ruhige Nächte für den Shop

Bestellungen um 3 Uhr nachts sind gute Nachrichten, die warten können. Öffne in der Honk-Web-App das Projekt des Shops ▸ **Meine Mitteilungen** und stell Ruhezeiten ein. Morgens bekommst du dann eine einzige Zusammenfassung. Oder du stellst deine Push-Schwelle auf Hoch: Bezahlte Bestellungen warten dann auf die Zusammenfassung, ein ausverkauftes Produkt wird aber weiter sofort gepusht, denn ein Langes Hupen hat immer mindestens die Priorität Hoch. Sollen auch fehlgeschlagene Zahlungen sofort kommen, stell ihre Priorität unter **Ereignisse** auf Hoch.

## Kundendaten

Mit den Voreinstellungen des Plugins enthalten die Mitteilungen keine personenbezogenen Daten: Eine Bestellung erscheint als „Bestellung Nr. 1234 · 84,00 € · 2 Artikel“. Namen, E-Mail-Adressen und alles Weitere werden nur gesendet, wenn du sie einschaltest, und nur die, die du anhakst. Honk speichert Nachrichten nur für die Aufbewahrungsdauer deines Tarifs (3, 14 oder 30 Tage) und nutzt sie nur, um sie dir anzuzeigen. Das Plugin schlägt außerdem einen Absatz für deine Datenschutzerklärung vor, in WordPress unter **Einstellungen ▸ Datenschutz**.

## Ohne das Plugin

Solange das Plugin geprüft wird oder wenn du keins installieren willst, gibt es zwei weitere Wege.

**Ein Workflow-Tool.** WooCommerce kann jede Bestellung an einen Webhook schicken, im eigenen Format. Schalte n8n, Make oder Zapier dazwischen, um die Felder auszuwählen und an Honk zu senden. Mit n8n und dem [Honk-Node](https://honk-me.app/de/integrationen/n8n):

```text
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 }}-paid
```

In Make oder Zapier nimmst du deren HTTP-Modul mit denselben Feldern; die [Formular-Anleitung](https://honk-me.app/de/anleitungen/formulare-aufs-handy) zeigt eins ausgefüllt.

**Ein paar Zeilen Code.** Leg den Schlüssel in `wp-config.php` ab. So bleibt er aus Exporten und Backups deiner Inhalte heraus:

```php
// wp-config.php, above the line "That's all, stop editing!"
define('HONK_KEY', 'honk_…');
```

Leg dann `wp-content/mu-plugins/honk.php` mit einer kleinen Hilfsfunktion an. WordPress lädt Must-Use-Plugins von selbst, und `'blocking' => false` bedeutet, dass die Kasse nie auf Honk wartet:

```php
<?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),
    ]);
}
```

Füge die Bestellereignisse in dieselbe Datei ein. Jedes hat einen Idempotency-Key, der aus der Bestellung gebildet wird, also benachrichtigt dich ein wiederholter Hook nie doppelt:

```php
// 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);
```
