last_delivery: reusar dirección/zona del último pedido + retitular header
Persistencia: cuando confirm_order encola create_order y la orden tiene
shipping/zona/window, runTurn snapshot a context.last_delivery
{is_delivery, shipping_address, matched_zone, pending_location, delivery_window}.
pipeline preserva ese campo cuando resetea por stale (>24h), igual que
external_customer_id.
Agente lo ve via working_memory.last_delivery en cada turno.
Nueva tool reuse_last_delivery() que copia shipping_address + matched_zone
(+ pending_location) al order actual. Pickup-only sólo setea is_delivery=false.
systemPrompt: instrucciones para que el bot proactivamente ofrezca "te lo
mandamos al mismo lugar que la última vez (dirección, zona, $)" cuando
last_delivery existe y todavía no se eligió método de envío. Cliente puede
aceptar (reuse_last_delivery) o pedir otra dirección/retiro. delivery_window
NO se asume — siempre se vuelve a preguntar día/hora.
Smoke E2E: cliente recurrente con conversación stale 25h+
- 1ra orden: 1kg vacío → location → mar 12h → confirma.
- DB: context.last_delivery con zona Centro Test + dirección + ventana.
- 2da orden: "hola, 500g bondiola" → bot: "¿al mismo lugar (Av. Corrientes
1234, Centro, $1.500)?" → "sí" → "¿qué día? La última fue mar 12h, puede
ser otro" → "jueves 11hs" → orden cerrada sin re-pedir pin.
Header: "Bot Ops Console" → "Piaf Console" (index.html + ops-shell).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -90,6 +90,21 @@ ENVÍO Y ZONAS:
|
||||
time_out_of_range, ofrecé las opciones que sí están disponibles según la zona
|
||||
o el schedule.
|
||||
|
||||
CLIENTES QUE VUELVEN (last_delivery):
|
||||
- Si working_memory.last_delivery existe (no null), el cliente ya hizo un pedido
|
||||
antes y tenemos guardado: shipping_address, matched_zone, delivery_window.
|
||||
- Cuando el cliente está armando un pedido nuevo y todavía no eligió método de
|
||||
envío ni dio dirección, ofrecele proactivamente la opción de repetir:
|
||||
"¿Te lo mandamos al mismo lugar que la última vez (Av. Corrientes 1234,
|
||||
zona Centro, $1.500)? También podés pedirme otra dirección o retiro."
|
||||
- Si confirma ("sí", "dale", "el mismo lugar", "como siempre"), llamá
|
||||
reuse_last_delivery — copia dirección + zona y se salta el pedido del pin.
|
||||
Después confirmá el día/horario (puede ser distinto al de la última).
|
||||
- Si dice que no, o pide otro lugar, seguí el flujo normal (set_shipping →
|
||||
pedir pin → set_address → set_delivery_window).
|
||||
- last_delivery.delivery_window es sólo referencia, NO lo asumas como elegido
|
||||
para esta orden. Preguntá día/hora aunque vayas a reutilizar el lugar.
|
||||
|
||||
LIMITES TÉCNICOS:
|
||||
- Tenés un máximo de 10 tool calls por turno. No los gastes en búsquedas
|
||||
redundantes — si una query ya devolvió X candidatos, NO la repitas.
|
||||
|
||||
Reference in New Issue
Block a user