2016-01-18 21 views

Trả lời

9

Có, điều này có thể được thực hiện. Thay vì "#channel_name", hãy sử dụng "@user" trong API. Người dùng sẽ nhận được tin nhắn từ slackbot vì chúng tôi đang sử dụng API và không phải là tin nhắn trực tiếp từ bất kỳ người dùng nào khác. Và nếu bạn muốn đăng người dùng đó làm người dùng đã được xác thực, hãy sử dụng as_user= true.

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

Chi tiết có tại https://api.slack.com/methods/chat.postMessage

+0

bạn có thể cung cấp thêm một số chi tiết không? –

+0

Sử dụng cùng một mã python bạn đã sử dụng để gửi tin nhắn tới kênh. API cũng vẫn giữ nguyên. Thay đổi duy nhất thay vì "kênh" đề cập đến "người dùng" (người mà bạn muốn gửi tin nhắn). Tôi đã cung cấp mã ở trên phù hợp với tôi. Hãy thử nó một lần và nếu nó không làm việc chia sẻ các lỗi thực tế hoặc vấn đề bạn đang phải đối mặt. –

+0

khi tôi đang sử dụng này, nó nói lỗi "'SlackClient' đối tượng không có thuộc tính 'chat'" –

1

Bạn có thể có được một danh sách các kênh IM sử dụng và gửi thông điệp của bạn đến bất kỳ kênh IM (nhắn tin trực tiếp).

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

Không có gì chống lại bạn hoặc mã của bạn, nhưng điều này thật xấu xí. Nếu tất cả những gì chúng ta có là tên của người dùng, trước tiên chúng ta cần tìm kiếm user_id rồi một im.list khác để tìm kênh đó? Ba cuộc gọi API để gửi tin nhắn cho người dùng? – Drew

1

Như Deepali đã nói, chỉ cần chuyển @user vào thông số kênh. Bạn cũng có thể sử dụng API điểm cuối postXessage Slack trên RapidAPI here. Trang này sẽ cho phép bạn tạo mã cần thiết để thực hiện cuộc gọi API trong python và kiểm tra cuộc gọi API.

Mã RapidAPI sẽ tạo ra cho bạn sẽ trông như thế này:

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

Đây là giải pháp Python Tôi tìm thấy bằng cách sử dụng gói 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

tôi dựa của tôi ví dụ tắt của hướng dẫn này: build-first-slack-bot-python

Với rằng tôi đã có thể giải quyết vấn đề chỉ đơn giản bằng cách gọi:

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

sau đó gửi tin nhắn

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

Sau đó tất cả mọi thứ dường như làm việc như mong đợi. Tôi muốn tạo một cái gì đó tương tự như giao diện "/ gifs" trong tương lai.

Các vấn đề liên quan