# Solicitudes de clientes, de tu app a tu teléfono

> Cada solicitud de presupuesto o contacto de tu app llega a tu iPhone con sus datos y en su propio grupo, y la IA del dispositivo te redacta la respuesta.

Source: https://honk-me.app/es/guias/solicitudes-clientes-al-movil

Lo normal es que un formulario de contacto te avise por correo, y ese correo se queda esperando entre boletines. Para una agencia pequeña o una tienda, una solicitud de presupuesto nueva merece una notificación: quién la envía, qué necesita, cuánto quiere gastar y un enlace para responder.

Esta guía envía cada solicitud a Honk desde una app Laravel, y te indica dónde está la misma receta para Node, Go, Swift, Kotlin y Rust. Cada solicitud tiene su propio grupo, así que dos clientes nunca se mezclan en una misma notificación, y un reintento de la cola nunca avisa dos veces.

## Antes de empezar

- Una cuenta de Honk (por ahora solo con invitación: [solicita acceso](https://honk-me.app/es/solicitar-acceso)) y un proyecto, por ejemplo «Tienda», con una clave de ingesta.
- Laravel 13 con el paquete instalado: consulta [Laravel y PHP](https://honk-me.app/es/integraciones/laravel#install).

## 1. Una notificación para la solicitud

Crea una notificación que use el canal `honk`. Va a la cola, así que el formulario responde al cliente sin esperas, y solo sale cuando se confirma la transacción de la base de datos:

```php
// app/Notifications/CustomerRequested.php
namespace App\Notifications;

use App\Models\CustomerRequest;
use HonkMe\Laravel\Notifications\HonkMessage;
use HonkMe\Laravel\Notifications\ToHonk;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Notification;
use Illuminate\Queue\Attributes\Backoff;
use Illuminate\Queue\Attributes\Tries;
use Illuminate\Support\Str;

#[Tries(5)]
#[Backoff(10, 60, 300, 900)]
class CustomerRequested extends Notification implements ShouldQueue, ToHonk
{
    use Queueable;

    public function __construct(public CustomerRequest $request)
    {
        $this->afterCommit();
    }

    public function via(object $notifiable): array
    {
        return ['honk']; // add 'mail', 'database', … as you like
    }

    public function toHonk(object $notifiable): HonkMessage
    {
        $r = $this->request;

        return HonkMessage::create()
            ->title(Str::limit("New request: {$r->subject}", 150))
            ->line("{$r->name} ({$r->company})")
            ->line(Str::limit($r->body, 2000))       // message: ≤ 8192 bytes
            ->light()                                // a light honk (info)
            ->category('customers')
            ->groupKey("requests/{$r->id}")          // one group per request
            ->occurredAt($r->created_at)
            ->url(route('admin.requests.show', $r))  // https only, shown as "Open link"
            // buttons, up to 3 (the first is the main one): https://, mailto:, tel: or sms:
            ->action('Reply by email', "mailto:{$r->email}")
            ->action('Call', "tel:{$r->phone}")
            ->meta('request_id', (string) $r->id);
    }
}
```

Los campos que importan:

- **`groupKey("requests/{$r->id}")`**: un grupo por solicitud. Lo que llegue después sobre la misma solicitud, como un recordatorio una hora más tarde, actualiza ese grupo en vez de abrir uno nuevo.
- **`category('customers')`**: la bandeja de entrada y sus filtros la muestran como solicitud de cliente, y una sola regla puede ocuparse de todas.
- **`url(…)`**: aparece como **Abrir enlace**, y la notificación te lleva directamente a la solicitud en tu panel de administración.
- **`action('Reply by email', …)`** y **`action('Call', …)`**: dos botones en el mensaje, que también aparecen en la notificación del iPhone cuando muestra el texto. `mailto:` abre tu app de correo con la dirección del cliente y `tel:` lo llama; nada se abre hasta que tocas.
- **`light()`**: la solicitud de un cliente no es una caída del servicio. Si quieres que te avise aunque tu umbral de push sea más alto, añade `->priority('high')`.

Haz que `toHonk()` sea determinista, sin `now()` dentro: un reintento de la cola debe enviar exactamente el mismo contenido; si no, Honk responde `409 idempotency_conflict`.

## 2. Envíala al guardar la solicitud

```php
// app/Http/Controllers/QuoteController.php
public function store(StoreQuoteRequest $request)
{
    $quote = CustomerRequest::create($request->validated());

    // queued, after the transaction commits: the customer never waits for Honk
    Notification::route('honk', null)->notify(new CustomerRequested($quote));

    return to_route('quote.thanks');
}
```

`Notification::route('honk', null)` envía sin necesidad de un modelo de usuario. Si tus administradores son usuarios de la app, también puedes usar `$admin->notify(…)`.

## 3. En tu iPhone

La solicitud llega como notificación, con su título y las primeras líneas del mensaje. En los iPhone con Apple Intelligence, Honk extrae los datos clave (quién es, qué quiere, cuánto quiere gastar y para cuándo), cada uno junto al mensaje del que sale, y redacta una respuesta que puedes leer, editar y copiar en tu app de correo. Honk nunca envía nada en tu nombre. Todo ocurre en el dispositivo: la solicitud no se envía a ningún sitio para procesarla con IA, y siempre puedes ver el texto original con un toque.

El resumen diario puede empezar tu mañana con «5 nuevas solicitudes de clientes», y en el Apple Watch, cuando ya hayas respondido, Double Tap marca la solicitud como atendida.

## Lo mismo en otros lenguajes

Cada biblioteca incluye esta receta en su README, con un grupo y una clave de idempotencia por solicitud:

- [Node.js](https://honk-me.app/es/integraciones/node#recipe): se envía sin esperar el resultado, así que la respuesta no se retrasa.
- [Go](https://honk-me.app/es/integraciones/go#recipe): en una goroutine con su propio tiempo de espera.
- [Swift con Vapor](https://honk-me.app/es/integraciones/swift#recipe), [Kotlin y Java con Spring Boot](https://honk-me.app/es/integraciones/kotlin#recipe) y [Rust](https://honk-me.app/es/integraciones/rust#recipe).
- [n8n](https://honk-me.app/es/integraciones/n8n#send), cuando el formulario envía los datos a un webhook.

## Cuidado con el contenido

Honk guarda el mensaje en su servidor durante el periodo de conservación de tu plan (3, 14 o 30 días) y lo muestra en las notificaciones. Envía solo lo que necesitas para atender la solicitud, no la ficha completa del cliente. En proyectos con contenido sensible, pon la vista previa push en **Genérica**: las notificaciones no muestran contenido y los detalles se quedan en la app.
