2016-01-18 7 views

Odpowiedz

9

Tak, można to zrobić. Zamiast "# channelname" użyj "@user" w interfejsie API. Użytkownik otrzyma wiadomość od slackbota, ponieważ korzystamy z API, a nie bezpośredniej wiadomości od innego użytkownika. Jeśli chcesz wysłać do tego użytkownika jako uwierzytelnionego użytkownika, użyj as_user= true.

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

Więcej szczegółów na https://api.slack.com/methods/chat.postMessage

+0

Czy możesz podać więcej szczegółów? –

+0

Użyj tego samego kodu Pythona, który był używany do wysyłania wiadomości do kanału. Interfejs API pozostaje taki sam. Jedyna zmiana to "kanał" zamiast "użytkownik" (do którego chcesz wysłać wiadomość). Podałem powyższy kod, który działa dla mnie. Wypróbuj raz, a jeśli nie działa, podziel się faktycznym błędem lub problemem, przed którym stoisz. –

+0

kiedy używam tego, mówi błąd "Obiekt SlackClient" nie ma atrybutu "czat" " –

1

Można uzyskać listę kanałów czatu użytkowników i wysłać wiadomość do dowolnego kanału wiadomości IM (bezpośredni).

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

Nic przeciwko tobie lub twojemu kodowi, ale to jest takie brzydkie. Jeśli wszystko, co mamy, to nazwa użytkownika, musimy najpierw wykonać wyszukiwanie dla user_id, a następnie inny im.list, aby znaleźć kanał? Trzy wywołania API, aby wysłać wiadomość do użytkownika? – Drew

1

Jak powiedział Deepali, wystarczy przekazać @user do parametru kanału. Możesz także użyć API punktu końcowego PostMessage na RapidAPI here. Ta strona pozwoli Ci wygenerować kod potrzebny do wywołania API w Pythonie i przetestować wywołanie API.

Kod RapidAPI wygeneruje dla Ciebie będzie wyglądać następująco:

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

Było to rozwiązanie Python Znalazłem przy użyciu pakietu SlackClient:

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

oparłem przykład z tego samouczka: build-first-slack-bot-python

Dzięki, że udało mi się rozwiązać ten problem po prostu dzwoniąc:

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

następnie wysyłania wiadomości

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

Po tym wszystko wydawało się działać zgodnie z oczekiwaniami. Chciałbym stworzyć coś podobnego do interfejsu "/ gifs" w przyszłości.

Powiązane problemy