【问题标题】:Invite User Group to a slack public channel邀请用户组到一个松弛的公共频道
【发布时间】:2019-11-22 16:00:06
【问题描述】:

我正在使用 Python 3.7 和 Slack 版本 4.1.2(生产)。我想邀请一个已经存在并且其中有很多用户的用户组。

我在 python3 中的尝试:

def invite_user(scid):
    # invite_url = 'https://slack.com/api/channels.invite'
    # invite_url = 'https://slack.com/api/groups.invite'
    invite_url = 'https://slack.com/api/usergroups.update'
    invite_url_data = {
        'token': auth_token,
        'channel': scid,
        'usergroup': 'SPXXXXXX',
        'name': 'testing'
    }
    r = requests.post(url=invite_url, data=invite_url_data, headers=header)
    print(r.json())

有人可以帮我获取正确的 API 来邀请用户组加入频道吗?

【问题讨论】:

  • 在我看来,您必须从组中获取所有用户,然后才能向他们发送邀请
  • py_dude 我知道,这显然是很难做到的。但在 slack 上,他们只是邀请用户组到公共频道的一个按钮。所以,我认为他们必须是一个我在文档中找不到的 API。

标签: python python-3.x api slack slack-api


【解决方案1】:

邀请用户组的用户加入私人频道实际上只是一个 API 调用。在此之前,您需要获取用户组的用户,这是另一个 API 调用。而且您不能邀请自己,因此您需要另一个 API 调用来获取您当前的用户 ID。

这是一个使用 Slack 官方 python 库的示例脚本。请注意,这最多适用于 1.000 个用户。如果您的用户组较大,则需要分块添加。

import slack
import os

# init slack client with access token
slack_token = os.environ['SLACK_TOKEN']
client = slack.WebClient(token=slack_token)

# get my own user ID
response = client.auth_test()
assert response['ok']
my_user_id = response['user_id']

# get members of usergroup excluding myself
response = client.usergroups_users_list(usergroup='S12345678')
assert response['ok']
users = [x for x in response['users'] if x != my_user_id]

# add members to private channel
response = client.conversations_invite(
    channel='G12345678',
    users = users
)
assert response['ok']
print(response)

【讨论】:

    【解决方案2】:

    这不是 Slack 中的工作方式。

    您可以通过https://api.slack.com/methods/groups.info获取群组成员

    然后,您可以从group_data["group"]["members"] 中提取您希望用户从中邀请的组的用户 ID 列表。

    在您可以执行相同操作后,您可以在其中添加它们。 在每个组有 2 个用户列表后,您可以合并它们然后发出请求:

        invite_url = 'https://slack.com/api/usergroups.update'
        invite_url_data = {
            'token': auth_token,
            'channel': scid,
            'usergroup': 'SPXXXXXX',
            'name': 'testing',
            'users': [
                "U060R4BJ4", # here are your users from a merged lists
                "U060RNRCZ"
            ],
        }
        r = requests.post(url=invite_url, data=invite_url_data, headers=header)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-11
      • 2022-10-02
      • 2023-01-03
      • 1970-01-01
      • 1970-01-01
      • 2019-10-19
      相关资源
      最近更新 更多