Overriding callbackOptions while keeping default behavior
You can override the callbackOptions and provide additional logic to run before/after installing the Slack app.
We use it to send a welcome message to the installing user after a succesfull installation. However, you need to manually end the response using res.end:
callbackOptions: {
success: (installation, _options, _req, res) => {
app.client.chat.postMessage({
token: installation.bot.token,
channel: installation.user.id,
text: 'Welcome to my app!'
});
res.end('Success!');
}
}
This example just displays a basic message, rather than the default Slack page that displays when no logic is provided, that also automatically redirects to the Slack app, along with a magic link:

Requirements
I want the callback to provide a default, that you can call after executing your custom logic, which will show the same page but will still allow me to run my logic. The Python SDK already has this; see this PR.
As a temporary solution, I just copied the HTML from Slack's default page with dynamic values for the team/app ids:
res.write(`<!DOCTYPE html>
<html>
<head>
<meta http-equiv="refresh" content="0; URL=slack://app?team=${installation.team.id}&id=${installation.appId}">
<style>
body {
padding: 10px 15px;
font-family: verdana;
text-align: center;
}
</style>
</head>
<body>
<h2>Thank you!</h2>
<p>Redirecting to the Slack App... click <a href="slack://app?team=${installation.team.id}&id=${installation.appId}">here</a>. If you use the browser version of Slack, click <a href="https://app.slack.com/client/${installation.team.id}" target="_blank">this link</a> instead.</p>
</body>
</html>`);
res.end();```
Seems like a reasonable feature request, and thanks for posting your workaround!