// ----------------------------------------------------------------------------- // Immo-Ka — Agrégateur de propriétés à vendre (province de Québec) // Auteur : Simon-Pierre Boucher — contact@spboucher.ai // fiche/KaAssistant.tsx : « ✦ Demander à Ka » — bouton discret (bas droite, // au-dessus du CTA) qui remplace la grosse bulle KA Agent sur la fiche, et // bottom sheet de démarrage : contexte de la propriété, suggestions // prédéfinies, champ libre. L'envoi passe par le widget KA Agent existant // (ka-agent.js, backend api-ka inchangé) : on ouvre son panneau et on lui // transmet la question, enrichie du contexte de la fiche (adresse, ville, // prix, type, lien). // ----------------------------------------------------------------------------- import { useEffect, useState } from "react"; import { Listing, fmtPrice } from "../api"; import { Ico } from "../components/Icons"; import BottomSheet from "./BottomSheet"; const SUGGESTIONS = [ "Est-ce un bon prix pour ce secteur ?", "Compare cette propriété au quartier", "Quels frais dois-je prévoir en plus du prix ?", "Quels sont les points de vigilance ?", "Explique l'estimation Vrai-Prix", ]; /** Ouvre le panneau KA Agent (widget partagé) et envoie la question. */ function envoyerAKa(question: string): boolean { const btn = document.querySelector(".kaa-btn"); const ta = document.querySelector(".kaa-panel textarea"); const send = document.querySelector(".kaa-in button"); if (!btn || !ta || !send) return false; btn.click(); ta.value = question; setTimeout(() => send.click(), 60); return true; } export default function KaAssistant({ l, hidden }: { l: Listing; hidden?: boolean }) { const [open, setOpen] = useState(false); const [q, setQ] = useState(""); const [err, setErr] = useState(false); useEffect(() => { const on = () => setOpen(true); window.addEventListener("ik:askka", on); return () => window.removeEventListener("ik:askka", on); }, []); const contexte = () => `(Propriété consultée sur Immo-Ka : ${l.address || l.title}${l.city ? `, ${l.city}` : ""}` + `${l.price != null ? ` — ${fmtPrice(l.price)}` : ""}${l.property_type ? ` — ${l.property_type}` : ""}` + ` — https://www.immo-ka.com/propriete/${encodeURIComponent(l.uid)})`; const poser = (question: string) => { const ok = envoyerAKa(`${question}\n\n${contexte()}`); if (ok) { setOpen(false); setQ(""); setErr(false); } else setErr(true); }; return ( <> setOpen(false)} title="Demander à Ka" sub="Assistant Groupe KA · connaît cette fiche" footer={
{ e.preventDefault(); if (q.trim()) poser(q.trim()); }}> setQ(e.target.value)} placeholder="Posez votre question sur cette propriété…" aria-label="Votre question" />
}>

Je peux situer ce prix dans le quartier, expliquer les données de la fiche, estimer les frais et chercher dans les autres plateformes Groupe KA.

{l.images?.[0] && } {l.address || l.title} {[l.city, l.price != null ? fmtPrice(l.price) : null, l.property_type].filter(Boolean).join(" · ")}
{SUGGESTIONS.map((s) => ( ))}
{err &&

L'assistant n'est pas encore chargé — réessayez dans un instant.

}
); }