# Comenzi WooCommerce pe iPhone, cu pluginul Honk Me

> Instalează pluginul Honk Me pentru WordPress, adaugă o cheie și alege ce apare în notificări. Comenzile, plățile eșuate și alertele de stoc ajung pe iPhone.

Source: https://honk-me.app/ro/ghiduri/notificari-comenzi-woocommerce

WooCommerce îți trimite emailuri despre comenzile noi, iar ele se amestecă în inbox cu tot restul. Pe telefon, cei mai mulți proprietari de magazine vor altceva: un mesaj scurt pentru fiecare comandă plătită și o alertă puternică atunci când plățile încep să eșueze, înainte să renunțe clienții.

Pluginul Honk Me pentru WordPress le trimite pe amândouă, fără cod. Se ocupă și de rambursări, alerte de stoc, clienți noi, recenzii, formulare, autentificări și sănătatea site-ului, iar pe un singur ecran de setări alegi ce apare în fiecare notificare.

## Înainte să începi

- Un cont Honk. Deocamdată, Honk e disponibil doar pe bază de invitație: [cere acces](https://honk-me.app/ro/cere-acces).
- Un proiect pentru magazin, de exemplu „Magazin”.
- WordPress 6.4 sau mai nou, cu PHP 7.4 sau mai nou. WooCommerce e opțional: fără el primești în continuare notificări despre autentificări, sănătatea site-ului, comentarii și formulare.

## 1. Instalează pluginul

Pluginul urmează să apară în directorul de module WordPress, unde e acum în curs de verificare. După ce apare acolo, deschide în WordPress **Module ▸ Adaugă modul**, caută **Honk Me**, apoi apasă **Instalează acum** și **Activează**. Până atunci, folosește una dintre variantele de la „Fără plugin”, la finalul ghidului.

Nu se trimite nimic până nu adaugi o cheie, așa că îl poți instala liniștit pe un magazin care merge deja.

## 2. Conectează-l la Honk

În aplicația web Honk, deschide proiectul magazinului, mergi la **Chei** și creează o cheie. Copiaz-o imediat: Honk o arată o singură dată.

În WordPress, deschide **Setări ▸ Honk** și lipește cheia în **Cheie API**. Lasă adresa serverului așa cum e, dacă nu ai propriul server Honk, și apasă **Salvează modificările**.

## 3. Alege despre ce vrei să afli

La **Evenimente**, fiecare eveniment are căsuța lui de activare, un nivel pe scara Honk și o prioritate. Valorile implicite sunt un început bun: o comandă plătită e un Bip-bip, o plată eșuată un Claxon puternic, iar un produs epuizat un Claxon lung.

_Evenimentele WooCommerce din Setări ▸ Honk, fiecare cu căsuța de activare, nivelul și prioritatea lui._

Honk grupează repetările, așa că 30 de plăți eșuate într-o oră înseamnă un singur episod cu un contor, nu 30 de notificări. Pentru situațiile care încep și se termină, ca stocul redus sau un val de autentificări eșuate, primești și o notificare când s-au încheiat.

## 4. Alege ce apare în fiecare notificare

Apasă **Detalii** sub un eveniment ca să vezi ce poate conține notificarea. Notificarea unei comenzi noi are mereu numărul comenzii și un link către ea în WordPress. Restul sunt căsuțe de bifat: totalul, numărul de produse, starea, metoda de plată și cea de livrare, primele trei produse, precum și numele, emailul, telefonul, orașul de facturare și nota clientului. Previzualizarea de alături arată cum va apărea notificarea în Honk și se schimbă pe măsură ce bifezi.

_Detaliile pentru „Comandă nouă”: căsuțele de bifat și previzualizarea notificării._

Datele clientului sunt date personale, așa că se trimit doar cât timp opțiunea **Include numele și adresele de email ale clienților** e activată, la **Confidențialitate și limbă**. Cât e dezactivată, ele apar estompate și nu pleacă nimic personal, orice ar fi bifat. La Contact Form 7, WPForms și Gravity Forms poți scoate și câmpuri anume din fiecare formular.

Apasă **Salvează modificările** când ai terminat.

## 5. Trimite un test

Sus, în **Setări ▸ Honk**, apasă **Trimite o notificare de test**. Testul folosește cheia din câmp, chiar înainte să salvezi, și îți arată imediat dedesubt răspunsul lui Honk. În câteva secunde ajunge în inboxul Honk.

_Răspunsul la „Trimite o notificare de test”: funcționează, cu ID-ul mesajului._

Ca să vezi o comandă adevărată, plasează una cu o metodă de plată precum plata la livrare. **Setări ▸ Honk ▸ Jurnal de trimiteri** arată fiecare notificare trimisă de site și starea ei.

## Nopți liniștite pentru magazin

O comandă la 3 noaptea e o veste bună care poate aștepta. În aplicația web Honk, deschide proiectul magazinului ▸ **Notificările mele** și setează orele de liniște; dimineața primești un singur rezumat. Sau setează pragul pentru notificări la Ridicată: comenzile plătite așteaptă atunci rezumatul, iar un produs epuizat te anunță în continuare imediat, pentru că un Claxon lung are mereu prioritate cel puțin Ridicată. Dacă vrei să te anunțe imediat și plățile eșuate, setează-le prioritatea la Ridicată, la **Evenimente**.

## Despre datele clienților

Cu setările implicite ale pluginului, notificările nu conțin date personale: o comandă apare ca „Comanda nr. 1234 · 84,00 € · 2 produse”. Numele, emailurile și celelalte pleacă doar dacă le activezi, și doar cele pe care le bifezi. Honk păstrează mesajele 3, 14 sau 30 de zile, în funcție de plan, și le folosește doar ca să ți le arate. Pluginul îți propune și un paragraf pentru politica de confidențialitate, în **Setări ▸ Confidențialitate** din WordPress.

## Fără plugin

Cât timp pluginul e în curs de verificare, sau dacă preferi să nu instalezi unul, mai ai două variante.

**Un instrument de automatizare.** WooCommerce poate trimite fiecare comandă la un webhook, în formatul lui. Folosește n8n, Make sau Zapier ca intermediar: ele aleg câmpurile și le trimit către Honk. Cu n8n și [nodul Honk](https://honk-me.app/ro/integrari/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
```

În Make sau Zapier, folosește modulul lor HTTP cu aceleași câmpuri; [ghidul pentru formulare](https://honk-me.app/ro/ghiduri/formulare-pe-telefon) arată unul completat.

**Câteva linii de cod.** Pune cheia în `wp-config.php`, unde nu ajunge nici în exporturile de conținut, nici în backupuri:

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

Apoi creează `wp-content/mu-plugins/honk.php` cu un mic helper. WordPress încarcă singur pluginurile must-use, iar `'blocking' => false` înseamnă că finalizarea comenzii nu așteaptă niciodată răspunsul lui Honk:

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

Adaugă evenimentele comenzilor în același fișier. Fiecare are o cheie de idempotență construită din comandă, așa că un hook rulat din nou nu te anunță niciodată de două ori:

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