Files
sirpremiumv2/app/Models/ChatConversation.php
T
Lizandro GuarnizoandClaude Opus 5 5bc1ec14ca feat(whatsapp): mismo motor, menú y configuración que Telegram y el chat web
WhatsApp dejaba de usar su bot propio (árbol de menús sin login ni compras) y
pasa al motor compartido, así los tres canales quedan iguales.

- TelegramBotService recibe el canal por constructor; flujos, menús, Gemini,
  OCR, validación de pagos y datos bancarios salen de ChatConfig sin duplicar
- WhatsApp no tiene teclados inline: las opciones se envían numeradas y la
  respuesta numérica se traduce al callback equivalente
- estado en caché con prefijo por canal (Telegram conserva el suyo para no
  cerrar las sesiones abiertas)
- descarga de comprobantes y audios por la Graph API de Meta
- respuesta manual del asesor y aviso de vencimiento salen también por WhatsApp
- la pantalla de WhatsApp queda sólo con credenciales; el resto se administra
  en Chat / Bot

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-26 23:24:21 -05:00

48 lines
1.3 KiB
PHP

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
class ChatConversation extends Model
{
protected $table = 'chat_conversations';
protected $fillable = ['contact_id', 'canal', 'estado', 'menu_actual_id', 'ultimo_mensaje_at', 'mensajes_no_leidos'];
protected $casts = ['ultimo_mensaje_at' => 'datetime'];
public function contact(): BelongsTo
{
return $this->belongsTo(ChatContact::class, 'contact_id');
}
public function messages(): HasMany
{
return $this->hasMany(ChatMessage::class, 'conversation_id');
}
public function menuActual(): BelongsTo
{
return $this->belongsTo(ChatMenu::class, 'menu_actual_id');
}
public function canalBadge(): string
{
return match($this->canal) {
'telegram' => '✈️ Telegram',
'whatsapp' => '🟢 WhatsApp',
default => '💬 Web',
};
}
public function canalColor(): string
{
return match($this->canal) {
'telegram' => 'bg-blue-100 text-blue-700',
'whatsapp' => 'bg-emerald-100 text-emerald-700',
default => 'bg-green-100 text-green-700',
};
}
}