title: Slack Bolt Clearing view stack
body: <p>In the view_submission type I set ack to clear the stack like this:</p>
  
  <pre><code>await submissionAck({ response_action: 'clear' } as any)
  </code></pre>
  
  <p>First question - why do I have to cast it to any? Without it code throws error</p>
  
  <pre><code>Argument of type '{ response_action: "clear"; }' is not assignable to parameter of type '(ViewUpdateResponseAction &amp; void) | (ViewPushResponseAction &amp; void) | (ViewClearResponseAction &amp; void) | (ViewErrorsResponseAction &amp; void) | undefined'.Type '{ response_action: "clear"; }' is not assignable to type 'ViewClearResponseAction &amp; void'.
  Type '{ response_action: "clear"; }' is not assignable to type 'void'.
  </code></pre>
  
  <p>Second question - the stack seems not to be cleared. When I  submit modal for the first time it's okay, but if I try next time it throws:</p>
  
  <pre><code>[ERROR]  bolt-app { Error: The receiver's `ack` function was called multiple times.
      at ack (/home/ec2-user/metrics/node_modules/@slack/bolt/src/ExpressReceiver.ts:147:17)
      at /home/ec2-user/metrics/app/actions.ts:43:17
      at Generator.next (&lt;anonymous&gt;)
      at /home/ec2-user/metrics/app/actions.ts:11:71
      at new Promise (&lt;anonymous&gt;)
      at __awaiter (/home/ec2-user/metrics/app/actions.ts:7:12)
      at app.view (/home/ec2-user/metrics/app/actions.ts:40:70)
      at process_1.processMiddleware (/home/ec2-user/metrics/node_modules/@slack/bolt/src/App.ts:660:19)
      at invokeMiddleware (/home/ec2-user/metrics/node_modules/@slack/bolt/src/middleware/process.ts:36:12)
      at next (/home/ec2-user/metrics/node_modules/@slack/bolt/src/middleware/process.ts:28:21)
      at Array.&lt;anonymous&gt; (/home/ec2-user/metrics/node_modules/@slack/bolt/src/middleware/builtin.ts:201:11)
      at invokeMiddleware (/home/ec2-user/metrics/node_modules/@slack/bolt/src/middleware/process.ts:27:47)
      at next (/home/ec2-user/metrics/node_modules/@slack/bolt/src/middleware/process.ts:28:21)
      at Array.exports.onlyViewActions (/home/ec2-user/metrics/node_modules/@slack/bolt/src/middleware/builtin.ts:110:11)
      at invokeMiddleware (/home/ec2-user/metrics/node_modules/@slack/bolt/src/middleware/process.ts:27:47)
      at Object.processMiddleware (/home/ec2-user/metrics/node_modules/@slack/bolt/src/middleware/process.ts:39:10) code: 'slack_bolt_receiver_ack_multiple_error' }
  
  </code></pre>
  
  <p>Any ideas? That's how I call these views: (by the way 3rd question - why do I have to cast body to BlockAction? Otherwise it throws error that trigger_id doesn't exists)</p>
  
  <pre><code>  app.action('modify', async ({ body, ack }) =&gt; {
      await ack()
      await authenticate(body.team.id, async (customer: Customer) =&gt; {
        await app.client.views.open({
          trigger_id: (body as BlockAction).trigger_id,
          token: 'token',
          view: modificationModal,
        })
        app.view(
          {
            type: 'view_submission',
            callback_id: 'yay',
          },
          async ({ body: submissionBody, ack: submissionAck, view }) =&gt; {
            const receivedValues = submissionBody.view.state.values
            await submissionAck({ response_action: 'clear' } as any)
          },
        )
      })
    })
  </code></pre>
  
  <p>I know that in the documentation stands:</p>
  
  <pre><code>view() requires a callback_id of type string or RegExp.
  
  </code></pre>
  
  <p>but that doesn't tell me much. What is that string? Is that a function? What should it do? </p>
  
  <p>Sorry for noobish question and thanks for help!</p>