Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

API から Slack のスラッシュコマンドを送信する闇の方法

More than 1 year has passed since last update.

この記事では 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点変更を行います。

# 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 "インコ" "すき" "きらい"',
)

image.png
レガシーな 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 がコマンドを叩くのを推奨していない気持ちが伝わってきます。

halhorn
DeepLearning で対話ロボットを作ろうとしているインコです。 https://www.wantedly.com/projects/92981
mixi
全ての人に心地よいつながりを
http://mixi.co.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away