What I mean is when I enter dialog or menu or minigame, I want to pause the game “outside”. With dialogs and menu, I probably could just make timescale=0, but what about minigames or some other activities that are time-sensitive? Are there any guidelines, best practices to do this?
Your dialogs, menus, and minigames should use Time.unscaledTime or Time.unscaledDeltaTime, and everything you want paused should use Time.time or Time.deltaTime. Then like you said, just set timeScale=0.
If you need the minigame to pause separately from timeScale, you will need to use a boolean and prevent it inside your Update(). You may also want to look into using Coroutines, which can be used to wait for actions to occur.