it-swarm.com.de

Können wir mit Python-Skript eine Nachricht an Benutzer senden?

Können wir in einem schlanken Team mit Python eine Nachricht an einen Benutzer senden? Ich habe verschiedene APIs gesehen, die Nachrichten für den Kanal anbieten, jedoch nicht für einen bestimmten Benutzer. Können wir das tun?

13
Vikas Saini

Ja, das kann gemacht werden. Verwenden Sie anstelle von "#channel_name" "@user" in der API. Der Benutzer erhält die Nachricht von slackbot, während wir die API verwenden, und keine direkte Nachricht von einem anderen Benutzer. Wenn Sie als authentifizierter Benutzer Beiträge an diesen Benutzer senden möchten, verwenden Sie as_user= true.

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

Weitere Informationen finden Sie unter https://api.slack.com/methods/chat.postMessage

19
Deepali Mittal

Dies war die Python-Lösung, die ich mit dem SlackClient-Paket gefunden habe:

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

4

Sie können eine Liste der IM-Kanäle für Benutzer abrufen und Ihre Nachricht an einen beliebigen IM-Kanal senden (Direct Messaging).

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

Einfache Lösung ist die Verwendung von Slacks Web API und 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)

benutzer-ID erhalten Sie hier:

enter image description here

1
Andrey Suglobov

Wie Deepali sagte, gib einfach @user in den Channel-Parameter ein. Sie können hier auch die Slack postMessage-Endpunkt-API für RapidAPI verwenden. Auf dieser Seite können Sie den Code generieren, der zum Aufruf des API-Aufrufs in Python und zum Testen des API-Aufrufs erforderlich ist. 

Der Code, den RapidAPI für Sie generiert, wird folgendermaßen aussehen:

    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

Ich habe mein Beispiel auf dieses Tutorial bezogen: build-first-slack-bot-python

Damit konnte ich das Problem einfach lösen, indem ich anrief:

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

senden Sie dann die Nachricht

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

Danach schien alles wie erwartet zu funktionieren. Ich möchte in Zukunft etwas Ähnliches wie die "/ gifs" -Schnittstelle erstellen.

0
James Nelson