web-dev-qa-db-ja.com

pythonスクリプトを使用して、スラックのユーザーにメッセージを送信できますか?

Slackチームでは、Pythonを使用してユーザーにメッセージを送信できますか?さまざまなAPIを見てきましたが、特定のユーザーに対してではなく、チャネルに対してメッセージを提供します。できますか?

18
Vikas Saini

はい、これを行うことができます。 「#channel_name」の代わりに、APIで「@user」を使用します。 APIを使用しているため、ユーザーはslackbotからメッセージを受信しますが、他のユーザーからの直接メッセージは受信しません。認証されたユーザーとしてそのユーザーに投稿したい場合は、as_user= true

slack.chat.post_message('@to_user',msg,username='@from_user')

詳細は https://api.slack.com/methods/chat.postMessage にあります

22
Deepali Mittal

これは、SlackClientパッケージを使用して見つけたPythonソリューションです。

from slackclient import SlackClient

slack_token = os.environ["SLACK_API_TOKEN"]
sc = SlackClient(slack_token)

sc.api_call(
  "chat.postMessage",
  channel="@username",
  text="Test Message"
)

https://pypi.python.org/pypi/slackclient

6

ユーザーIMチャンネルのリストを取得し、任意のIMチャンネルにメッセージを投稿できます(ダイレクトメッセージング)。

from slackclient import SlackClient

SLACK_TOKEN = "xoxb-bottoken" # or a TEST token. Get one from https://api.slack.com/docs/oauth-test-tokens

slack_client = SlackClient(SLACK_TOKEN)
api_call = slack_client.api_call("im.list")

# You should either know the user_slack_id to send a direct msg to the user
user_slack_id = "USLACKBOT"

if api_call.get('ok'):
    for im in api_call.get("ims"):
        if im.get("user") == user_slack_id:
            im_channel = im.get("id")
            slack_client.api_call("chat.postMessage", channel=im_channel,
                                       text="Hi Buddy", as_user=True)
2
Prashanth

シンプルなソリューションはSlackのWeb APIおよびrequests

import requests

# slack access bot token
slack_token = "xpxb-9534042403-731932630054-KSwhrmhg87TXGuF23Z4ipTRm"

data = {
    'token': slack_token,
    'channel': 'UJ24R2MPE',    # User ID. 
    'as_user': True,
    'text': "GO Home!"
}

requests.post(url='https://slack.com/api/chat.postMessage',
              data=data)

ここで取得できるuserID:

enter image description here

1
Andrey Suglobov

Deepaliが言ったように、@ userをチャンネルパラメーターに渡すだけです。 RapidAPI here。 でSlack postMessageエンドポイントAPIを使用することもできます。このページでは、API呼び出しをpythonでテストするために必要なコードを生成できます。 API呼び出し。

RapidAPIが生成するコードは次のようになります。

    from rapidconnect import RapidConnect
    rapid = RapidConnect("SlackIntegration", "3b744317-91c6-48e8-bc90-305a52f36a5f")

    result = rapid.call('Slack', 'postMessage', { 
        'token': '',
        'channel': '',
        'text': '',
        'parse': '',
        'linkNames': '',
        'attachments': '',
        'unfurlLinks': '',
        'unfurlMedia': '',
        'username': '',
        'asUser': '',
        'iconUrl': '',
        'iconEmoji': ''

    })
1
David Noah

私はこのチュートリアルの例を基にしています: build-first-slack-bot-python

それにより、私は単に電話することで問題を解決することができました:

userChannel = slack_client.api_call(
    "im.open",
    user=auser
)

その後、メッセージを送信します

slack_client.api_call(
        "chat.postMessage",
        channel=userChannel['channel']['id'],
        text=response or default_response, 
        as_user=True
    )

その後、すべてが期待どおりに機能するように見えました。将来、「/ gifs」インターフェースに似たものを作成したいと思います。

1
James Nelson