Towards an Interactive Slack App

Philip
Manifestly: The Official Blog
3 min readApr 28, 2016

We’re working on the next version of our Slack app

It won’t yet be the conversational bot we’re inspired to create, but we think it will be a good step in that direction.

What was version 1.0?

With our first version, we got our feet wet and primarily focused on enabling viewing Manifestly from Slack:

Simple slash commands to retrieve information:

/checklists — to get a list of checklists/runs — to get a list of in progress checklist runs

Notifications in the Slack channel:

  • When a run is started
  • When a run is completed
  • When a run is late
  • Daily status notifications of runs in progress

What’s missing?

The biggest thing missing from that first feature set is the ability to do anything, like actually use a checklist. Using a checklist entails:

  • Start it, optionally specifying a name for the checklist run (e.g., to distinguish which client this New Client Onboarding checklist is for) and other participants
  • Get a list of steps not yet completed
  • Taking action on steps — complete/uncomplete a step — until the run is completed
  • Comment on a step.

We realized doing this via slash commands would tend to get very verbose without establishing, maintaining, and leveraging context.

Inferring context

Contrast these two commands for completing a step of a run in progress. First, the context-inferring version:

/runstep complete

The interpretation of this command depends on the ability to intelligently infer which step of which run to complete.

Next, the context-free version:

/runstep complete [run] [step]

In this case, the command must be specified with text that specifies which run and text that specifies which step. That could be a smart search, one where the run text is used to find a run in progress and the step text is used to find a step not yet completed in that run.

We’re thinking that the context-inferring version will be more useful.

Sample Usage

Here’s what we imagine:

mark: /checklists

Manifestly: Respond with a list of checklists, including the minimal amount of information (i.e., checklist titles) to support subsequent commands.

mark: /checklist use weekly

Manifestly: Find checklists with “weekly” in the title; if there’s one (and only one), start a checklist run with Mark as the participant and set that run as the “current Slack run” for Mark; respond with a list of steps.

mark: /runsteps

Manifestly: Find the “current Slack run” for Mark and respond with a list of steps that are not completed. Note: If you wanted the runsteps for a different run, you could specify /runsteps [text].

mark: /runstep complete

Manifestly: Find the “current Slack run step” for Mark; if there isn’t one, find the “current Slack run” for Mark. If there is a current Slack run for Mark, use the next uncompleted step in that run. If there isn’t enough context, prompt Mark for more information.

I could actually complete all the steps in the run without ever explicitly selecting or specifying a step just by successively issuing the /runstep complete command.

Namespacing

In the sample usage above, our proposed Manifestly Slack app’s slash commands don’t have a namespace. We’re re-thinking that and considering adding a namespace. It’s more to type, yes, but Slack’s auto-complete to the rescue. And the auto-complete combined with namespacing means you can quickly get a short list of all the manifestly commands:

Slack’s auto-complete to the rescue; yay for namespacing!

Another benefit of namespacing is we reduce the likelihood of command collision. If another Slack app responds to /checklists, it’s not clear how that conflict is resolved. Ideally, the platform would prevent collisions or require the user to choose when there’s a conflict. (I’d love to hear from Slack API on this.) Instead, our minimal experimentation indicates that the last app installed wins.

Other ideas?

We wonder what other patterns teams use when creating interactions via slash commands in Slack.

  • How do you stage changes to your Slack app?
  • How do you address the command collision problem?
  • How do you establish/infer context for your commands?

Thanks to Louie Penaflor for encouraging us to explore this path.

--

--

Philip
Manifestly: The Official Blog

We help organizations use checklists to improve quality outcomes. Inspired by the Checklist Manifesto by Atul Gawande. Find us at http://manifest.ly