web-dev-qa-db-fra.com

Pouvons-nous envoyer un message à l'utilisateur en slack à l'aide d'un script python?

Dans une équipe souple, pouvons-nous envoyer un message à un utilisateur à l'aide de python? J'ai vu différentes API, elles offrent un message au canal, mais pas à un utilisateur en particulier. pouvons-nous faire cela?

13
Vikas Saini

Oui, cela peut être fait. Au lieu de "#channel_name", utilisez "@user" dans l'API. L'utilisateur recevra le message de slackbot car nous utilisons l'API et non un message direct d'un autre utilisateur. Et si vous souhaitez publier sur cet utilisateur en tant qu'utilisateur authentifié, utilisez as_user= true.

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

Plus de détails sont à https://api.slack.com/methods/chat.postMessage

19
Deepali Mittal

Voici la solution Python que j'ai trouvée en utilisant le paquet 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

4
running-codebase

Vous pouvez obtenir une liste des canaux de messagerie instantanée utilisateur et poster votre message sur n’importe quel canal de messagerie instantanée (messagerie directe).

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

Comme Deepali l'a dit, il suffit de passer @user dans le paramètre channel. Vous pouvez également utiliser l'API de terminal Slack postMessage sur RapidAPI ici. Cette page vous permettra de générer le code nécessaire pour effectuer l'appel API en python et le tester. 

Le code que RapidAPI va générer pour vous ressemblera à ceci:

    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

J'ai basé mon exemple sur ce tutoriel: build-first-slack-bot-python

Avec cela, j'ai pu résoudre le problème simplement en appelant:

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

puis envoi du message

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

Après cela, tout a semblé fonctionner comme prévu. J'aimerais créer quelque chose de similaire à l'interface "/ gifs" à l'avenir.

0
James Nelson