How do you invoke the /poll command using the Slac

2019-01-24 16:04发布

My slack channel supports the /poll command from the Simple Poll app. How do you invoke this command using the Slack API?

Using the python slack(er) API module:

from slacker import Slacker

# Using what's now called a "legacy token"
slack = Slacker('my-token')

slack.chat.post_message(
        '#test',
        '/poll "Do you prefer cats or dogs?" "Cats" "Dogs"',
        as_user=False,
        username="Poll Bot",
        icon_emoji=':question:',
        parse='full')

The message just shows up in the #test channel as plain text, not converted to a poll.

I tried using <!poll> instead of /poll in the message, as sort of implied in the message formatting documenation, but same result.

Note: This question is a bit old now, and upon revisiting I have found out that my code is using what's now called a legacy token, which doesn't allow specifying any OAuth permission scopes. The legacy token already has the permissions it needs for this case.

2条回答
手持菜刀,她持情操
2楼-- · 2019-01-24 16:18

You have to use the "undocumented" chat.command API function instead of chat.postMessage. This function is a little less friendly with the channel parameter -- you have to provide the channel ID and not the human-friendly channel name.

channel_id = slack.channels.get_channel_id('test')
slack.chat.command(
        channel=channel_id,
        command='/poll',
        text='"Do you prefer cats or dogs?" "Cats" "Dogs"'
)

Thanks to V13Axel in this Wee-Slack bug tracker for providing some debugging info for the chat.command that clued me in.

According to @Erik_Kalkoken's unofficial documentation, chat.command

requires the scope post. Since this scope does not seem to be available in the app config window you need to provide a legacy token for this to work.

查看更多
混吃等死
3楼-- · 2019-01-24 16:32

I was stumbling across the exact same problem, so I did a bit of coding and a working example is here:

https://github.com/dazlious/slack-cmd-trigger

You can trigger with your api-token any channel with a command.

查看更多
登录 后发表回答