30
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

この記事では 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 がコマンドを叩くのを推奨していない気持ちが伝わってきます。

30
27
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?