Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can my slack custom command produce /remind me like links

I am writting a custom slack command that implements a task manager like interface (I know ... there are many out there :-), mine interfaces with odesk/upwork to outsource my micro-tasks :-) ) .

Anyway, I like a lot how the /remind command included Complete Delete etc links in its output to facilitate subsequent interactions with the user that entered the command and I am trying to figure out how to do the same trick.

What I have thought so far is to include links in my output that are ... GET /slack-link?method=POST&token=xxx&team_id=xx&command=.. ie carry in their query string the complete json payload that slack would have produced from a normal custom command. slack-link acts as a "proxy" whose sole role is to submit a POST back to my normal slack endpoint. I can even reuse the same response_url for these command-links.

I have not tried it but I think these URLs will just open another window so that path wont exactly work...

Has anybody tried something like that before?

like image 887
Diomedes Avatar asked Nov 28 '15 18:11

Diomedes


2 Answers

As you've learned, those are currently only available to built-in commands. However, as I was curious and wanted to know how those are done, I looked in the API and found out that the URLs are just formatted normally but have a special "protocol":

You asked me to remind you to “test”.
​_<slack-action://BSLACKBOT/reminders/complete/D01234567/1234//0/0/5678|Mark as complete>
or remind me later: <slack-action://BSLACKBOT/reminders/snooze/D01234567/1234//0/0/5678/15|15 mins> [...]

Clicking on such a link results in an API request to method chat.action, with the following parameters:

bot: BSLACKBOT
payload: reminders/complete/D01234567/1234//0/0/5678
token: xoxs-tokenhere-nowayiampostingithere

So it looks like those URLs have three parts:

<slack-action://BSLACKBOT/reminders/complete/[...]|Mark as complete>
  1. slack-action://: the "protocol" like prefix to let Slack know this is a chat action URL.
  2. BSLACKBOT: the bot which (who?) will receive the payload. Can only be a bot user and the ID must start with B, or the API request will fail with invalid_bot.
  3. the rest of the URL: the payload that gets passed to the bot. It doesn't look like this is parsed nor handled specially by Slack.

This is actually not a new feature, since they used to have API URLs back in late 2013 or early 2014 (I don't remember precisely) which they removed for "security reasons".

It could be interesting to see if we can use chat actions with custom bots, and if so, what we could do with it.

like image 177
Léo Lam Avatar answered Nov 18 '22 23:11

Léo Lam


I got the answer from Slack support:

In regard to your original question: currently Slack doesn't provide the ability to embed 'action' links in our custom integrations. Only built-in features like /remind can utilize these at the moment. For external services, you'll need to link to a URL that opens in an external web browser.

We do hope to provide a similar function for custom integrations in the future, allowing for interactive messages.

Thanks,

Ben

like image 31
Diomedes Avatar answered Nov 18 '22 22:11

Diomedes