How to mention user in slack.client

Question:

This might be a simple question, but I can not get it work.

I am using Slack Python Api to mention a user in a channel, and I am referring to the document here, https://api.slack.com/methods/chat.postMessage, and my code is simple as,

from slackclient import SlackClient
sc = SlackClient(token)
message = sc.api_call(
  'chat.postMessage',
  channel='#channelname',
  text='This is a test.'
  )

This will send a message to the channel, but I can not find any option to mention users. And I tried to put @someone inside the message such as

 text='@someone This is a test.'

The message will be posted but in plain text, not really mentioning someone.
BTW, I am using a Test Token.(Or maybe this feature is only available for authorized token? )

Is there any option or method to do this?

Asked By: Haipeng Su

||

Answers:

After a little bit exploration, I got the solution which is quite simple. I don’t know how I could miss it.

message = sc.api_call(
  'chat.postMessage',
  link_names=1,
  channel='#channelname',
  text='@someone This is a test.'
  )

use the option link_names=1 to link channels or user names automatically in the text message. This will do the trick.

Thank you everyone.

Answered By: Haipeng Su

Posting an updated answer as this method no longer works since Slack updated their API. Now you have to discover the user’s ID using users.list, or just looking it up in the Slack app on their profile.

Then for a given userID, you mention them by setting the text as follows: <@userID>. The link_names argument is now irrelevant. So this would be the code to use now:

message = sc.api_call(
  'chat.postMessage',
  channel='#channelname',
  text='<@userID> This is a test.'
  )

HOWEVER, if you want to mention a usergroup, then the old method still applies – just @mention them and in that case do set link_names to true.

Answered By: Tom Wagstaff
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.