According to AppleScript documentation, I can create a notification with buttons by setting it to use alerts instead of banners in Notification Center preferences. But when I save an AppleScript as an app, then launch it once (assuming it has to launch to tell macOS it exists), it never shows up in the preference pane.
So as plan B, I tried scripting the app so that instead of a button, it does things upon activation. Works fine. According to this page, Mavericks would activate an app when you click on its banner, but that doesn't appear to work anymore in High Sierra; any mouseover or click just makes the banner persistent.
Plan C: command-tab to the app to activate it and run the subroutine. Here's the subroutine to wait for that:
on waitForActivate() set notFrontmost to true repeat while notFrontmost tell application "System Events" set frontApp to name of item 1 of (get processes whose frontmost is true) if frontApp is "test notifications 2" then set notFrontmost to false end tell delay 1 end repeat end waitForActivate
...which works, but is there a better way to have it wake than polling System Events once a second? Seems sloppy. I thought about saving it as stay-open and using an idle handler, but it's not clear to me how to make that any better at sensing its frontmost status quickly.