この記事では bot 等 API からスラッシュコマンドを使って Simple Poll の投票を作成する_怪しげな_方法を説明します。
スラッシュコマンド
/invite @halhorn
等と Slack に投稿すると Slack 謹製やサードパーティ製のアプリ等を実行できる便利な機能です。
しかし残念ながら bot の API から実行すると、コマンドとして認識されません。ただの文字列として評価されてしまいます。
# python のサンプル
from slackclient import SlackClient
slack_token = os.environ["SLACK_API_TOKEN"]
sc = SlackClient(slack_token)
sc.api_call(
"chat.postMessage",
channel="C0XXXXXX",
text='/poll "インコ" "すき" "きらい"',
)
# bot が `/poll "インコ" "すき" "きらい"` という文字をつぶやくだけで何も起こらない
API からスラッシュコマンドを送る
2点変更を行います。
- chat.command というドキュメントに無い API エンドポイントを叩く
- API トークンをレガシーな形式のものを使う
# python のサンプル
from slackclient import SlackClient
slack_token = os.environ["LEGACY_SLACK_API_TOKEN"]
sc = SlackClient(slack_token)
sc.api_call(
"chat.command",
channel="C0XXXXXX",
text='/poll "インコ" "すき" "きらい"',
)
レガシーな API トークンはユーザーに紐付いているので、あたかもユーザーが自身で発言したように見えてしまいますが、とりあえず bot を使って自動で投票を作成することができます。
見ての通り、非公式のエンドポイントは叩くわレガシーで危なげなトークンは使うわの闇の方法なので、使うのは自己責任でお願いします。
参照: https://stackoverflow.com/questions/40919745/how-do-you-invoke-the-poll-command-using-the-slack-api
余談
レガシーなトークンではなく普通のトークンで chat.command を叩くと {'error': 'user_is_bot', 'headers': {'V...
みたいなレスポンスが返ってきます。
Slack としては bot がコマンドを叩くのを推奨していない気持ちが伝わってきます。