ぴろログ

Output Driven

Zapier から Slack にメッセージを投稿するときの設定まとめ

情シスの強い味方である Zapier と Slack 。 Zapier で各種 SaaS を連携・データ処理をさせて Slack に通知するという使い方が多いのですが、 Slack へのメッセージの投稿方法をすぐ忘れてしまい ZAP を作成する都度調べているため、リファレンスとしてこれまでに確認した情報をまとめてみました。

なお、本記事は 2020/04/25 時点の情報です。

文字修飾

Send Channel Message in Slackでは、 Slack の書式設定をそのまま使うことができます。※リストを除く

slack.com

f:id:pirox07:20200419162024p:plain
Zapier - Customize Channel Message

f:id:pirox07:20200419162357p:plain
Slack への投稿結果

太字

*太字*

斜体

_斜体_

取り消し線

~取り消し線~

インラインコード

`コード`
```コードブロック```

引用タグ

> 引用タグ

リスト

うまく反映させることができません。。 Zapier の TUTORIAL にもリスト形式での投稿方法のみ記載がなかったため、非対応かもしれません。(問い合わせ中です。気長に回答を待っています。)

( 2020/05/09 追記)

サポートより「Webhooks などの投稿に利用出来る syntax は提供していないため、改行コードを使って対応してださい」と回答がありました。

LISTS

There's no specific list syntax in app-published text, but you can mimic list formatting with regular text and line breaks:

- Detective Chimp\n- Bouncing Boy\n- Aqualad

api.slack.com

絵文字

絵文字コード がそのまま利用できます。

slack.com

ただし、英語表記でないと絵文字に変換されないようです。

f:id:pirox07:20200419163151p:plain
Zapier - Customize Channel Message

f:id:pirox07:20200419163754p:plain
Slack - emoji

言語設定を English ( US ) に変更すると英語表記が確認できます。

f:id:pirox07:20200419164432p:plain
Slack - emoji English ( US )

スニペット

スニペットは通常のメッセージではなくファイル扱いとなるようで、Slack API : files.upload を使います。

api.slack.com

Slack App ( Token )の設定

Slack API: Applications | Slack

Create New App をクリックします。

f:id:pirox07:20200419165934p:plain
Slack API

App Name に任意のアプリ名を設定し( postSnippet としました)、アプリを利用する Workspace を選択して Create App をクリックします。

f:id:pirox07:20200419170021p:plain
Create a Slack App

Permissions をクリックします。

f:id:pirox07:20200419170218p:plain
Settings - Basic Information

Scopes で、 Add an OAuth Scope をクリックして files.writeを追加します。 Bot ( postSnippet )として POST させるために Bot Token Scopes で権限を設定しています。

f:id:pirox07:20200419170356p:plain
Scopes

同一ページ( OAuth & Permissions )内の OAuth Tokens & Redirect URLs で Install App to Workspace をクリックして postSnippet をインストールし、 OAuth Access Token を発行します。

f:id:pirox07:20200419170625p:plainf:id:pirox07:20200419170629p:plain
Bot User OAuth Access Token

invite コマンドを使って、スニペットを投稿するチャンネルに bot を招待します。

f:id:pirox07:20200419170734p:plain
invite

Zapier の設定時に使う channel ID も確認しておきます。 対象チャンネルを右クリックしてリンクをコピー→ペーストすると、以下の形式の URL が表示されます。

f:id:pirox07:20200419171145p:plain
channel link

https://<Workspace Name>.slack.com/archives/C0122CHRPEZ

末尾のディレクトリの C0122CHRPEZchannel ID です。

Webhooks By Zapier

Slack API をたたくために、 Webhoooks by Zapier を使います。

Action EventPOST を選択します。

f:id:pirox07:20200419171429p:plain
Zapier - Webhooks by Zapier

Customize Post で以下のとおり設定します。

  • URL: https://slack.com/api/files.upload
  • Payload Type: Form
  • Data
    • token: 発行した Bot User OAuth Access Token
    • channels: channel ID
    • title: スニペットのタイトル
    • content: スニペット内のコンテンツ
  • Headers
    • Content-Type: multipart/form-data

f:id:pirox07:20200426021708p:plain
Zapier - Customize Post

このようにスニペットが投稿できます。

f:id:pirox07:20200419171725p:plain
Slack - Snippet

Blocks

Block を使うと、画像やモーダル等を含むリッチな表現を提供できます。

Reference: Layout blocks

ナビタイムさんの記事を読むとイメージしやすいと思います。

qiita.com

Slack App ( Incomming Webhook )の設定

Slack App を作成し、 Incoming Webhooks を用意します。

f:id:pirox07:20200426022729p:plain
Incoming Webhooks

Webhook の設定時に、投稿先のチャンネルを選択できます。

f:id:pirox07:20200419172304p:plain
Add New Webhook to Workspace

Webhooks by Zapier

Webhooks by Zaoier を使います。

Customize Post で以下のとおり設定します。

  • URL: Incomming Webhook の URL
  • Payload Type: json
  • Data
    • blocks: 投稿したい object

f:id:pirox07:20200426023306p:plain
Zapier - Customize Post

f:id:pirox07:20200419172637p:plain
xxxxxxx

Block Kit Builder を使うと、オブジェクトが簡単に生成できます。

メンション

メンションの表記に関する公式ドキュメントはこちらです。

api.slack.com

ユーザー

ユーザ名ではなく、ユーザ ID を使います。

    <@userID>

f:id:pirox07:20200419165501p:plain
Zapier - Customize Channel Message

f:id:pirox07:20200419165556p:plain
Slack - mentioning user

ユーザ ID は、対象ユーザのプロファイル画面で確認することができます。

f:id:pirox07:20200419165401p:plain
Slack - Profile

ユーザーグループ

ユーザーグループ ID を使います。

<!subteam^ID>

f:id:pirox07:20200426015624p:plain
Zapier - Customize Channel Message

f:id:pirox07:20200426015704p:plain
Slack - mentioning usergroup

ユーザーグループ ID は、Slack API : usergroups.list の Tester を使って取得できます。

api.slack.com

事前準備として、 Tester 実行時に必要な Token を発行するために Slack App を作成します。

f:id:pirox07:20200420193619p:plain
Create a Slack App

ScopesBot Token Scopes に usergroups:read を追加します。

f:id:pirox07:20200420193953p:plain
OAuth & Permissions - Scopes

Token を発行します。

f:id:pirox07:20200420200943p:plain
OAuth & Permissions - OAuth Tokens & Redirect URLs

f:id:pirox07:20200420201411p:plain
OAuth & Permissions - OAuth Tokens & Redirect URLs

Tester に Token をセットして実行すると、ユーザーグループの一覧が表示されます。ハンドル名(メンション時に表示される文字列)で検索し、対象の id の値を確認します。※ team_id ではないので注意してください。

f:id:pirox07:20200420201624p:plain
usergroups.list - Tester

f:id:pirox07:20200425235255p:plain
Slack - usergroups.list Response

マルチバイト文字で登録したユーザグループ名で検索したい場合は、 Unicode 表示に変換すると良いです。

tech-unlimited.com

Thread

投稿する情報量(文字数)が多い場合、分割してスレッド形式にするとチャンネルの見通しが良くなります。

Zapier の 2 STEP 目で投稿したメッセージに対し、 3 STEP 目の投稿がスレッド形式となるように投稿してみます。

2 STEP 目で aaaaa と投稿します。

f:id:pirox07:20200426032340p:plain
Zapier - Customize Channel Message

f:id:pirox07:20200426113257p:plain
Zapier - Send Channel Message

3 STEP 目で 以下のとおり投稿します。

f:id:pirox07:20200426032735p:plain
Zapier - Customize Post Message

このときThred に対象の親メッセージの Ts (タイムスタンプ)を入力します。 同一の ZAP 内に対象メッセージが存在する場合は、このように指定できます。

f:id:pirox07:20200426032601p:plain
Zapier - Send Channel Message

以下のとおり、スレッドとして投稿されます。

f:id:pirox07:20200426032040p:plain
Slack - thread

Slack のスレッドについて調べた内容はこちらの記事に残しています。

blog.pirox.dev

まとめ

備忘も兼ねて Zapier から Slack にメッセージを投稿する際の各種設定をまとめました。これから Zapier を使う方々の助けになれば幸いです。

参考情報

参考にさせていただいた情報です。

zapier.com

qiita.com