情シスの強い味方である Zapier と Slack 。 Zapier で各種 SaaS を連携・データ処理をさせて Slack に通知するという使い方が多いのですが、 Slack へのメッセージの投稿方法をすぐ忘れてしまい ZAP を作成する都度調べているため、リファレンスとしてこれまでに確認した情報をまとめてみました。
なお、本記事は 2020/04/25 時点の情報です。
文字修飾
Send Channel Message in Slackでは、 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
絵文字
絵文字コード
がそのまま利用できます。
ただし、英語表記でないと絵文字に変換されないようです。
言語設定を English ( US ) に変更すると英語表記が確認できます。
スニペット
スニペットは通常のメッセージではなくファイル扱いとなるようで、Slack API : files.upload
を使います。
Slack App ( Token )の設定
Slack API: Applications | Slack
Create New App をクリックします。
App Name に任意のアプリ名を設定し( postSnippet としました)、アプリを利用する Workspace を選択して Create App をクリックします。
Permissions をクリックします。
Scopes で、 Add an OAuth Scope をクリックして files.write
を追加します。
Bot ( postSnippet )として POST させるために Bot Token Scopes で権限を設定しています。
同一ページ( OAuth & Permissions )内の OAuth Tokens & Redirect URLs で Install App to Workspace をクリックして postSnippet をインストールし、 OAuth Access Token を発行します。
invite コマンドを使って、スニペットを投稿するチャンネルに bot を招待します。
Zapier の設定時に使う channel ID
も確認しておきます。
対象チャンネルを右クリックしてリンクをコピー→ペーストすると、以下の形式の URL が表示されます。
https://<Workspace Name>.slack.com/archives/C0122CHRPEZ
末尾のディレクトリの C0122CHRPEZ
が channel ID
です。
Webhooks By Zapier
Slack API をたたくために、 Webhoooks by Zapier を使います。
Action Event は POST
を選択します。
Customize Post で以下のとおり設定します。
- URL:
https://slack.com/api/files.upload
- Payload Type:
Form
- Data
- Headers
Content-Type
:multipart/form-data
このようにスニペットが投稿できます。
Blocks
Block を使うと、画像やモーダル等を含むリッチな表現を提供できます。
ナビタイムさんの記事を読むとイメージしやすいと思います。
Slack App ( Incomming Webhook )の設定
Slack App を作成し、 Incoming Webhooks を用意します。
Webhook の設定時に、投稿先のチャンネルを選択できます。
Webhooks by Zapier
Webhooks by Zaoier を使います。
Customize Post で以下のとおり設定します。
- URL:
Incomming Webhook の URL
- Payload Type:
json
- Data
blocks
:投稿したい object
Block Kit Builder を使うと、オブジェクトが簡単に生成できます。
メンション
メンションの表記に関する公式ドキュメントはこちらです。
ユーザー
ユーザ名ではなく、ユーザ ID
を使います。
<@userID>
ユーザ ID は、対象ユーザのプロファイル画面で確認することができます。
ユーザーグループ
ユーザーグループ ID
を使います。
<!subteam^ID>
ユーザーグループ ID は、Slack API : usergroups.list
の Tester を使って取得できます。
事前準備として、 Tester 実行時に必要な Token を発行するために Slack App を作成します。
Scopes で Bot Token Scopes に usergroups:read
を追加します。
Token を発行します。
Tester に Token をセットして実行すると、ユーザーグループの一覧が表示されます。ハンドル名(メンション時に表示される文字列)で検索し、対象の id
の値を確認します。※ team_id
ではないので注意してください。
マルチバイト文字で登録したユーザグループ名で検索したい場合は、 Unicode 表示に変換すると良いです。
Thread
投稿する情報量(文字数)が多い場合、分割してスレッド形式にするとチャンネルの見通しが良くなります。
Zapier の 2 STEP 目で投稿したメッセージに対し、 3 STEP 目の投稿がスレッド形式となるように投稿してみます。
2 STEP 目で aaaaa と投稿します。
3 STEP 目で 以下のとおり投稿します。
このときThred に対象の親メッセージの Ts
(タイムスタンプ)を入力します。 同一の ZAP 内に対象メッセージが存在する場合は、このように指定できます。
以下のとおり、スレッドとして投稿されます。
Slack のスレッドについて調べた内容はこちらの記事に残しています。
まとめ
備忘も兼ねて Zapier から Slack にメッセージを投稿する際の各種設定をまとめました。これから Zapier を使う方々の助けになれば幸いです。
参考情報
参考にさせていただいた情報です。