Show a light chat button that looks the same, and load the real widget only when the user clicks it
This is the facade pattern. A small static button replaces the widget until someone needs it. So 98% of visitors never download or run the 500 KB at all. The same idea works for YouTube embeds and maps.
"Load it with async" is the tempting wrong answer. It stops the script from blocking the HTML parser, but every visitor still downloads and runs all 500 KB on the main thread. Preloading makes it worse, because it competes with your own critical files.