2016-01-18 11 views

Antwort

9

Ja, das kann gemacht werden. Anstelle von "#channel_name" verwende "@user" in der API. Der Benutzer wird die Nachricht von slackbot erhalten, da wir API verwenden und keine direkte Nachricht von einem anderen Benutzer. Wenn Sie diesen Benutzer als authentifizierten Benutzer anmelden möchten, verwenden Sie as_user= true.

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

Weitere Details sind bei https://api.slack.com/methods/chat.postMessage

+0

Können Sie etwas mehr Details geben? –

+0

Verwenden Sie denselben Python-Code, den Sie zum Senden von Nachrichten an den Kanal verwendet haben. Die API bleibt auch gleich. Die einzige Änderung ist, dass anstelle von "Kanal" der "Benutzer" erwähnt wird (wem Sie die Nachricht senden möchten). Ich habe den Code oben angegeben, der für mich funktioniert. Probieren Sie es einmal aus und wenn es nicht funktioniert, teilen Sie den tatsächlichen Fehler oder das Problem, mit dem Sie konfrontiert sind. –

+0

Wenn ich dies benutze, wird der Fehler "'SlackClient' Objekt hat kein Attribut 'Chat'" –

1

Sie eine Liste von Benutzer IM-Kanäle können und geben Sie Ihre Nachricht an einen IM-Kanal (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) 
+0

Nichts gegen dich oder deinen Code, aber das ist so hässlich. Wenn alles, was wir haben, der Name des Benutzers ist, müssen wir zuerst nach der user_id suchen und dann eine andere im.list, um den Kanal zu finden? Drei API-Aufrufe zum Senden einer Nachricht an einen Benutzer? – Drew

1

Wie Deepali sagte, übergeben Sie einfach @user in den Kanalparameter. Sie können auch die Slack-postMessage-Endpunkt-API unter RapidAPI here. verwenden. Auf dieser Seite können Sie den Code generieren, der benötigt wird, um den API-Aufruf in Python auszuführen und den API-Aufruf zu testen.

Der Code RapidAPI generiert für Sie wird wie folgt 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': '' 

    }) 
0

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

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

0

ich anhand meiner Beispiel aus diesem Tutorial: build-first-slack-bot-python

Damit konnte ich das Problem einfach durch den Aufruf beheben:

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

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

dann sendet die Meldung nach, dass alles wie erwartet zu funktionieren schien. Ich möchte in Zukunft etwas Ähnliches wie die "/ Gifs" -Schnittstelle erstellen.

Verwandte Themen