diff --git a/supabase/migrations/20260106133948_fix_save_public_agent_message_tenant_id.sql b/supabase/migrations/20260106133948_fix_save_public_agent_message_tenant_id.sql new file mode 100644 index 00000000..b4c0a54f --- /dev/null +++ b/supabase/migrations/20260106133948_fix_save_public_agent_message_tenant_id.sql @@ -0,0 +1,66 @@ +-- Fix save_public_agent_message to include tenant_id +-- The public_agent_messages table requires tenant_id (NOT NULL) but the function wasn't setting it + +CREATE OR REPLACE FUNCTION public.save_public_agent_message( + p_session_id text, + p_agent_id uuid, + p_role text, + p_content text, + p_metadata jsonb DEFAULT '{}'::jsonb, + p_visitor_fingerprint text DEFAULT NULL, + p_user_agent text DEFAULT NULL, + p_ip_address text DEFAULT NULL +) +RETURNS uuid +LANGUAGE plpgsql +SECURITY DEFINER +SET search_path TO 'public' +AS $function$ +DECLARE + v_message_id uuid; + v_tenant_id uuid; +BEGIN + -- Get the current tenant context + v_tenant_id := get_current_tenant_id(); + + -- If no tenant context, try to get it from the agent + IF v_tenant_id IS NULL THEN + SELECT tenant_id INTO v_tenant_id + FROM ai_agents + WHERE id = p_agent_id; + END IF; + + -- If still no tenant_id, raise an error + IF v_tenant_id IS NULL THEN + RAISE EXCEPTION 'No tenant context available for saving message'; + END IF; + + -- Insert the message into public_agent_messages table + INSERT INTO public_agent_messages ( + session_id, + agent_id, + role, + content, + metadata, + visitor_fingerprint, + user_agent, + ip_address, + tenant_id + ) VALUES ( + p_session_id, + p_agent_id, + p_role, + p_content, + p_metadata, + p_visitor_fingerprint, + p_user_agent, + CASE + WHEN p_ip_address IS NULL THEN NULL + ELSE p_ip_address::inet + END, + v_tenant_id + ) RETURNING id INTO v_message_id; + + RETURN v_message_id; +END; +$function$;