SlackAPIの使用方法(WebHookによるDM送信)

slackAPIを利用して、外部からDMを送信する方法を記載します。

作業概要

Slack側の事前設定(ワークスペース単位で一度設定すればOK)

  • Slackアプリケーションを作成

  • ②アプリへの権限付与

  • ③アプリをワークスペースへインストール

以降はユーザごとに必要な対応

  • ④送信先ユーザのメンバーIDを把握する

  • ⑤conversations.openAPIを使用して、チャンネルIDを取得する

  • ⑥chat.postMessageAPIを使用してメッセージを送信

作業詳細

Slack側の事前設定

①slackアプリケーションを作成

  • https://api.slack.com/appsへアクセスし、Create New App押下

  • 作成方法は[From scratch]を選択(おそらくmanifest側でもできる※未調査)

  • アプリの名称と、使用するワークスペースを選択して[create]を押下

  • [App Home]タブより、botとしての表示名を設定する。

    ※表示名を設定し忘れると、後述のインストールが行えない

../_images/01_create_app.png ../_images/02_scratch.png
../_images/03_create.png ../_images/06_set_name2.png

②アプリへの権限付与

  • [OAuth & Permissions]タブのScopesから、アプリに権限を付与する。

  • [Add an OAuth Scope]を押下し、「im:write」「chat:write」を追加する。※

    ※ botからDMを送信するために必要な権限。付与する権限はAPIによって異なるため公式ドキュメント参照のこと。

../_images/11_OAuth_tab.png ../_images/12_scope.png

③アプリをワークスペースへインストール

  • [OAuth & Permissions]タブの[install to Workspace]を押下する。

  • [許可]を押下する。

  • [OAuth Tokens for Your Workspace]欄にTokenが発行されているため控える。

    ※トークンはいつでも確認可能。slackAPIに使用する。

../_images/21_install.png ../_images/22_ok.png
../_images/23_token.png

ユーザごとに必要な対応

④送信先ユーザのメンバーIDを把握する

  • メンバーIDはプロフィール欄よりコピーできる。

../_images/31_memberId.png

⑤conversations.openAPIを使用して、チャンネルIDを取得する

- Header
    - [Content-Type : application/x-www-form-urlencoded]
- Body
    - [token=XXXXX-XXXXX-XXXXX&users=XXXXXXX]
        - token : アプリのトークン
        - users : メンバーID

または、以下のJSON形式で入力

- Header
    - [Content-Type : application/json]
    - [Authorization : Bearer アプリの[トークン]]
- Body
    - [{"users":"メンバーID"}]

response : [id]が、次のAPIの入力に必要なチャンネルID

../_images/41_open.png ../_images/42_json.png

⑥chat.postMessageAPIを使用してメッセージを送信

- Header
    - [Content-Type : application/x-www-form-urlencoded]
- Body
    - [token=XXXXX-XXXXX-XXXXX&channel=XXXXXXX&text=XXXXXX]
        - token : アプリのトークン
        - channel : ⑤で取得したチャンネルID
        - text : 送信したいメッセージ

※⑤同様JSONでも可。

../_images/51_sendMessage.png ../_images/52_notify.png

参考

(Slack APIを利用してユーザーにダイレクトメッセージを送信する) https://dev.classmethod.jp/articles/slack-api-send-dm/