bolt-js icon indicating copy to clipboard operation
bolt-js copied to clipboard

Overriding callbackOptions while keeping default behavior

Open gilmatok opened this issue 2 years ago • 3 comments

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:

image

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.

gilmatok avatar Mar 16 '23 10:03 gilmatok

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();```

gilmatok avatar Mar 16 '23 10:03 gilmatok

Seems like a reasonable feature request, and thanks for posting your workaround!

filmaj avatar Mar 16 '23 13:03 filmaj