【手順メモ】ZapierでSlackのスタンプをトリガーにしてNotion DBに自動連携する方法

本記事は、[Code Polaris Advent Calendar 2024](https://qiita.com/advent-calendar/2024/code-polaris) 16日目の記事になります。

# 背景
* Zapierを触ってみたかった

# 前提
* Slack、Notion、Zapier それぞれのアカウントを作成している
* 連携するNotion DB（Slackの投稿を保存する）を作成している
* 作成したDB
    * プロパティ：名前、追加日（日付）、タグ（セレクト）
![スクリーンショット 2024-12-14 0.07.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384836/20358a7b-e033-565e-dc3d-6ac2d5fc182c.png)

    



# 手順
## 1. Zapを作成する
![スクリーンショット 2024-12-12 17.33.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384836/2474c6d0-5460-9466-c7eb-52121cfea0cf.png)

## 2. Triggerを設定
### 2-1. Triggerをクリック
![スクリーンショット 2024-12-12 17.35.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384836/4d416ac7-2e45-95b2-c2b2-541de7d475e5.png)

### 2-2. Slackを選択
![スクリーンショット 2024-12-12 17.36.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384836/17c288b7-35e5-ebe5-0b8a-74d159e09e54.png)

### 2-3. Trigger event に「New Reaction Added」を設定
![スクリーンショット 2024-12-12 17.39.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384836/cda5d65e-76b3-1344-a827-f4ed535fba78.png)

### 2-4. 連携するSlackアカウントを選択→「許可する」をクリック
![スクリーンショット 2024-12-12 17.41.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384836/00f20a57-0a52-fa14-9f29-58ee4e3ed204.png)
![スクリーンショット 2024-12-12 17.44.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384836/cc89bcef-c23c-f831-0ec9-367bb2844b3a.png)

赤枠で囲んだ部分に連携したSlackアカウントが表示されたら「Continue」クリック
![スクリーンショット 2024-12-12 17.46.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384836/5397a4b2-a0f8-47e2-4897-d9e58a949947.png)

### 2-5. Configureの設定
* Channel: Notionに自動保存したいSlackのチャンネル
    * 指定しなければ、全てのチャンネルから投稿をNotionに保存できる
* Reaction: Triggerにしたい任意のスタンプ
    * 本記事では「kihyo(起票)」スタンプを設定
* User: Notionに自動保存できるSlackユーザー
    * 指定しなければワークスペースにいる全てのユーザーが投稿をNotionに保存できる
* 「Continue」クリック
* 「Test trigger」クリック→Testの右横の丸が緑色になればOK


![スクリーンショット 2024-12-12 17.59.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384836/baa23064-1ed0-937a-c454-5ae0f40e9336.png)


## 3. Actionを設定
Triggerで取得したSlackのデータを加工するためのActionを設定する。
### 3-1. 「Action」 をクリック
![スクリーンショット 2024-12-12 18.02.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384836/9cfaf1a8-5596-5f62-7dcc-bab22bc2eb9f.png)

### 3-2. 「Formatter」 を選択
![スクリーンショット 2024-12-12 18.03.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384836/0ea806c7-b8bd-9022-8b78-f6f8a72c671c.png)

### 3-3. 「Action event」 に 「Text」 を選択
![スクリーンショット 2024-12-12 18.05.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384836/ad90456c-6584-dc7d-ed0f-cc4508911dda.png)

「Continue」をクリック
![スクリーンショット 2024-12-12 18.07.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384836/11b691a3-bd9e-5292-ac67-87d75d51aef0.png)


### 3-4. Configureの設定
* 「Transform」に「Truncate」を選択
    * Slackの投稿文の一部を取得する
* 「input」に「Message Text」を選択
* Max Length: 取得する文字数を入力
    * 本記事では10文字に設定
* 「Continue」をクリック
* 「Test step」をクリック
![スクリーンショット 2024-12-12 18.12.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384836/91836e36-32dd-ed4e-f960-37fd6ccf60d2.png)
![スクリーンショット 2024-12-12 18.29.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384836/6bf0d974-a893-243f-fe3e-2b7cf550387c.png)
![スクリーンショット 2024-12-12 18.31.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384836/de23ac6f-613e-4682-a29e-e6c7b3502e07.png)

## 3. Notionの設定を行う
### 3-1. 「+」(Add step)をクリック → Notionを選択
![スクリーンショット 2024-12-12 18.44.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384836/85bcfeb9-5079-c506-7fc3-c93166009bfb.png)

### 3-2. 「Action event」に「Create Database Item」を選択
![スクリーンショット 2024-12-12 18.50.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384836/22eb3896-7bf0-b039-a0e6-f57b39596263.png)

### 3-3. 「ページを選択する」をクリック
![スクリーンショット 2024-12-12 18.51.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384836/ed2c6f4c-95e5-bdea-7a13-43a0fb65ea40.png)

### 3-4. 投稿を保存したいデータベースにチェックを入れる
「アクセスを許可する」をクリック
![スクリーンショット 2024-12-12 18.53.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384836/4ad93ce5-1abe-c8bd-ae8b-ffc3c2ca042e.png)

「Continue」をクリック
![スクリーンショット 2024-12-12 18.55.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384836/477dbd93-77f1-6f82-2627-63fafb8e2b6d.png)

### 3-5. Configureの設定
* 「名前」には、「Output」を設定
    * 加工した投稿内容がページタイトルとして入力される
![スクリーンショット 2024-12-12 19.04.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384836/555177c8-0ed8-ae4e-37b8-7f934cf18be2.png)

* 「Content」には、以下の2つをを設定
    * 「Message Permalink」（投稿元のリンク）
    * 「Message Text」（Slack の投稿の内容）
    
![スクリーンショット 2024-12-12 19.09.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384836/0c6769ad-f335-dd34-ebdd-0b53b8861fda.png)

* 「タグ」
    * Staticから設定する場合は、前もって作成したDBで設定したセレクトの候補が表示される
    ![スクリーンショット 2024-12-14 1.13.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384836/8454d753-0c4a-1064-f03f-50099388962a.png)

    * プロパティの種類をセレクトにしてるので、デフォルトに設定できるのはひとつだけ
    * マルチセレクトなら複数設定できる
    ![スクリーンショット 2024-12-14 1.20.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384836/c0f29a86-1692-f484-de83-ec2b6f1f1081.png)

    * Customからも設定できる（特定のチャンネルからの投稿に限定していなければ、Message Channel Nameの場合、セレクトのオプションをあらかじめ設定してなくてもページ作成時にチャンネル名が自動で入ってくれる）
    * <b>Notion側でDBのプロパティに変更を加えたら、Zapierで「Reflesh fields」をクリックする（検索マークの左横）

![スクリーンショット 2024-12-12 20.11.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384836/22ae8186-ba6c-d877-1ae9-46dd7e0a6627.png)
![スクリーンショット 2024-12-12 20.13.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384836/d6594969-55ec-303d-652b-1cd7a0539b82.png)

「Include time with date fields?」にチェックを入れ、「Continue」をクリック
![スクリーンショット 2024-12-14 1.31.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384836/19cdf980-abc6-62f9-9d27-7ad537a78ffa.png)

## Zapのテストを行う
テストが通ったら「Publish」をクリック


# 遭遇したエラー
* テストではうまくいったのに、実際にスタンプを押すとNotion DBにページが作成されなかった
* HOME -> Zap Historyを見ると、Stoppedの表示が出ていた

![スクリーンショット 2024-12-13 0.04.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384836/db6becad-65c2-9ffd-5764-eecd7ee30a2c.png)


## エラーメッセージ
```
body failed validation. Fix one: body.properties.名前.id should be defined, instead was `undefined`. body.properties.名前.name should be defined, instead was `undefined`. body.properties.名前.start should be defined, instead was `undefined`.
```


本文の検証に失敗しました。修正 1: body.properties.名前.id を定義する必要がありますが、`undefined` でした。body.properties.名前.name を定義する必要がありますが、`undefined` でした。body.properties.名前.start を定義する必要がありますが、`undefined` でした。

## 対応
* 作成したのZapを削除して、最初から作り直したら上手く動いた
* 原因は分からない
* 参考記事
    * [Notion エラー: 本文の検証に失敗しました。修正: body.properties.Name.id を定義する必要がありますが、undefined.body.properties でした。 \| Zapier コミュニティ](https://community.zapier.com/troubleshooting-99/notion-error-body-failed-validation-fix-one-body-properties-name-id-should-be-defined-instead-it-was-undefined-body-properties-30898)

## 挙動確認
generalチャンネルから投稿をした。
![スクリーンショット 2024-12-14 1.55.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384836/e5388a47-3075-3bd2-0987-fb3a2332d18c.png)

Notion DBにページが作成されたのを確認できた。上から2番目はテスト時に作成されたもの。
![スクリーンショット 2024-12-14 1.54.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384836/c5345112-15b4-7ed9-cbbb-9fb2574f627a.png)

ページを開くと投稿元のリンクも貼られており、ちゃんと投稿元に飛べた
![スクリーンショット 2024-12-14 2.02.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384836/3093467f-7863-bb92-861b-16fdb706bbe2.png)

# 感想
タグの設定で詰まったりしたが色々試していく中で把握できた。
参考記事の説明が分かりやすかったので1日で基本操作をマスターできた。
今後も日常生活でZapierを活用していきたいと思った。


# 参考記事
* [Zapier で Slack上の 📌 スタンプを押した投稿を Notion DB に自動連携する仕組みを作ってみる](https://zenn.dev/gixo/articles/de584828c94d90)