web-dev-qa-db-ja.com

slack.clientでユーザーに言及する方法

これは簡単な質問かもしれませんが、うまくいきません。

Slack Python Apiを使用してチャネル内のユーザーに言及し、ここでドキュメントを参照しています https://api.slack.com/methods/chat。 postMessage 、そして私のコードは次のように簡単です、

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

これにより、チャネルにメッセージが送信されますが、ユーザーに言及するオプションが見つかりません。そして、私は@someoneなどのメッセージ内

 text='@someone This is a test.'

メッセージはプレーンテキストで投稿されますが、実際に誰かに言及しています。ところで、私はテストトークンを使用しています(または、この機能は承認されたトークンでのみ使用できますか?)

これを行うためのオプションや方法はありますか?
前もって感謝します。

22
HaipengSu

少し探検した後、私は非常に簡単な解決策を得ました。私はそれを見逃すことができる方法がわかりません。

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

オプションlink_names=1を使用して、テキストメッセージでチャンネルまたはユーザー名を自動的にリンクします。これでうまくいきます。

みんなありがとう。

29
HaipengSu

SlackがAPIを更新したため、このメソッドが機能しなくなったため、更新された回答を投稿します。ここで、users.listを使用してユーザーのIDを検出するか、Slackアプリのプロファイルでそれを検索する必要があります。

次に、与えられたserIDについて、次のようにテキストを設定することでそれらに言及します:<@ serID>。 link_names引数は今では無関係です。したがって、これは今使用するコードになります。

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

ただし、ユーザーグループに言及したい場合は、古いメソッドが引き続き適用されます-それらに@メンションし、その場合はdo set link_namesをtrueに設定します。

12
Tom Wagstaff