Zapierで好みのkintone REST API を叩く方法

この記事は[kintone Advent Calendar 2017](https://qiita.com/advent-calendar/2017/kintone) の 15日目の記事です。

クラウド型業務システムのプラットフォームである「[kintone](https://kintone.cybozu.com/jp/)」とウェブサービス同士を繋げてくれる自動化サービス[Zapier](https://zapier.com)を活用した内容となります。
この記事では、Zapierで好みのkintone REST APIを叩く方法を紹介します。

#Zapierとは
Zapierはクラウドサービス同士を簡単に繋げてくれるサービスです。
ほとんどの場合、ノンコーディングで連携を実現することが出来るパワフルなツールです。

Zapierで連携を実現するには、『トリガー』と『アクション』にウェブサービスを設定する必要があります。
例えば：
・トリガー: Evernoteに新しいノートが作成される時
・アクション: kintoneのアプリにEvernoteのノート情報が登録される

上記のようにEvernoteとkintoneをトリガーとアクションに設定すると、簡単にウェブサービスの連携が実現されます。

##Zapierでサポートされているkintoneアクション
現在、Zapierにkintoneのアクションが5つあります。
つまり、何かしらのサービスをkintoneと繋げた場合、5つのアウトプットから選べるということです。
https://zapier.com/apps/kintone/integrations

![zapier_actions.png](https://qiita-image-store.s3.amazonaws.com/0/100542/f9b41c7a-f4b4-7df9-91b7-301632db6519.png)

例えばですが、あるサービスで顧客管理をしていた場合、その顧客情報を更新したらkintoneの中の顧客管理を自動的に更新する、ということが出来ます。しかもコーディングする必要が全くありません。便利ですね~٩( 'ω' )و

##Zapier上のkintone アクションの限界
便利なactionが5つも用意されていますが、当然ながらこれ以外のアクションを選ぶことが出来ません。スペースを作成したくても、スペースを作成するアクションがありません、

この記事では、kintoneのアクションのリストに乗っていない自分が必要なアクションを設定する方法を紹介します。

例としてですが、Twitterに特定のキーワードが入ったツイートが投稿された場合、その情報をkintoneのスペースのスレッドに投稿する連携を設定してみましょう。

#Triggerの設定
サービスのリストからTwitterを選び、『Search Mention』トリガーを選択し、自分のTwitterアカウントを認証します。
今回は『サイボウズ』というキーワードがTweetされたら、そのツイートの情報をピックアップするようにします。
![zap_tweet_setup.png](https://qiita-image-store.s3.amazonaws.com/0/100542/27b38b8b-77b9-6c2b-411a-2717d7eea367.png)

Triggerの設定は以上です。

#Actionの設定
##Actionの種類
では、Actionに移りましょう。ここではkintoneを選ばずに、『Webhooks』を選択しましょう。
![zap_tweet_setup2.png](https://qiita-image-store.s3.amazonaws.com/0/100542/24b97369-49f9-b3eb-d82e-cdd961e873dc.png)

Zapierの『Webhooks』は自分の設定したAPI情報に基いて、APIを叩いてくれる便利なアクションです。選択したら、『Custom Request』を選択してください
(本当はPOSTの選択肢を選びたいところなのですが、kintoneのAPIに使用するBodyの構造が複雑なため、POSTの選択肢の設定だと対応が出来ません)
![zap_tweet_setup3.png](https://qiita-image-store.s3.amazonaws.com/0/100542/7af84a96-533f-498a-822d-11c2811a33c9.png)

詳細な設定を入れていきます。
基本的には、[cybozu developer network](https://developer.cybozu.io) に記載されているAPIの情報を入れていけば大丈夫です。今回は[スペースのスレッド内コメントの投稿API](https://developer.cybozu.io/hc/ja/articles/209732306
)の情報を参照しながら設定値を入れていきましょう。

##Actionの設定値
###Method
![zap_tweet_method.PNG](https://qiita-image-store.s3.amazonaws.com/0/100542/044f3f01-a3b5-14ab-9c62-4222a5d6ca86.png)
HTTPメソッドです。
[スペースのスレッド内コメントの投稿API](https://developer.cybozu.io/hc/ja/articles/209732306) のHTTPメソッドはPOSTなので、POSTを選択します。

###URL
![zap_tweet_url.PNG](https://qiita-image-store.s3.amazonaws.com/0/100542/33caee7a-e526-965a-0e41-7f9a649b738b.png)
APIのURLです。
自分が使用しているサブドメインが入った、下記のURLを入れれください。
https://サブドメイン名.cybozu.com/k/v1/space/thread/comment.json

上記の例はcybozu.comを使用していますが、kintone.com (USドメイン)でももちろん活用出来ます。

###Data Pass-through?
![zap_tweet_passthrough.PNG](https://qiita-image-store.s3.amazonaws.com/0/100542/b15be57d-a843-58dc-56ee-e44aa7ea4a0b.png)
yesにすると後に入力する設定が無視されてしまうらしいので、こちらはnoに設定します。

###Data

[スペースのスレッド内コメントの投稿API](https://developer.cybozu.io/hc/ja/articles/209732306) のリクエスト例を参考にし、Bodyを作成します。
必須のパラメータは space, thread, comment のみなので、とりあえず最小限のBodyの構造を入れてみましょう。

```json

{
    "space": 10,
    "thread": 16,
    "comment": {
        "text": "test"
    }
}
```
space と thread の値は、投稿先のスペースとスレッドのIDを入れる必要があります。
スペースとスレッドのIDは、ブラウザでスレッドに移動すればURLの中で確認することができます。
![zap_tweet_spacethreadids.PNG](https://qiita-image-store.s3.amazonaws.com/0/100542/037eba92-f8c1-78c1-4124-0fc80ed3c6c6.png)

上記のBodyの例では、コメントされる内容を"test"にしちゃいましたが、変わりにTwitterが取得した値を入れることが出来ます。下記のように、Twitterが取得した値を入れてみましょう。
![zapier_tweet_setup.gif](https://qiita-image-store.s3.amazonaws.com/0/100542/419ec3b9-6aea-30e8-af8e-f6beaa329a7f.gif)

###Unflatten
![zap_tweet_unflatten.PNG](https://qiita-image-store.s3.amazonaws.com/0/100542/ed8ccc84-202f-2b2e-e60b-8d55af5e0fb6.png)
この設定は勝手にアンダースコアを別のものに変換するっぽく、害があるっぽいのでnoにします。

###Basic Auth
![zap_tweet_basicauth.PNG](https://qiita-image-store.s3.amazonaws.com/0/100542/df0977ad-bb10-4fb4-eee4-d6f033b27b42.png)
Basic認証の認証情報です。
自分の環境にBasic認証を設定している場合は情報を入れて下さい([Basic認証の設定方法](https://jp.cybozu.help/ja/general/admin/basic_auth))。

###Headers
![zap_tweet_headers.PNG](https://qiita-image-store.s3.amazonaws.com/0/100542/98242210-6605-4e08-c215-9e71a10612be.png)
APIに載せるヘッダーの情報です。
Content-Type と application/json のペアは必要です。
パスワード認証に必要な X-Cybozu-Authorization の値には、kintoneのユーザアカウントの【ログイン名:パスワード】をBase64でエンコードしたものを入力してください。この認証方法の詳細については[cybozu developer network](https://developer.cybozu.io/hc/ja/articles/201941754#step7)を参照してください。

ちなみにですが、ここの設定ではX-Cybozu-API-Tokenは使えません。APIトークン認証はアプリにしか活用できず、スペースには活用出来ません(早くスペース用APIトークンを実装してくれー！)。

###APIのテスト
APIの設定が一通り終わると、Zapierが一回試しにAPIを叩いてくれます。成功した場合、Test was successfulと表示してくれます。Finishを押して、完了をします。
![zap_tweet_successful.PNG](https://qiita-image-store.s3.amazonaws.com/0/100542/6ad213b8-815d-2534-aa68-a603c5a67f22.png)

APIの情報に誤りがあると、このステップでエラーの内容が表示されます。パスワード認証、URL、メソッド、jsonの構造が正しいかを確認し、またトライしてみましょう。

##最後の設定
最後に、この連携(Zap)をつねにONにするかどうかを聞かれます。
![zap_tweet_save.PNG](https://qiita-image-store.s3.amazonaws.com/0/100542/e2baea94-5b5d-40d7-e8d0-220698e4af8d.png)

フリーのプランだと、一ヶ月に100タスクまでしか処理してくれません。この記事の例だと、kintoneのスレッドに情報を投稿するまでの流れが1タスクとしてカウントされます。

Zapierには色々とプランがありますので、詳細な情報はウェブサイトで確認しましょう。
https://zapier.com/app/billing/plans

#実行結果
ZapをONにすると、『サイボウズ』が含まれたツイートがされた際にツイートの内容とURLがkintoneのスペースのスレッドに投稿されます。
<img width="997" alt="tweets_in_space.png" src="https://qiita-image-store.s3.amazonaws.com/0/100542/0334ef6c-6a18-6714-0734-e7d79632eda6.png">

上手くスレッドに情報が投稿されましたでしょうか？
今回はjsonボディの中身をシンプルにしましたが、スレッドへの投稿内容を綺麗にしたり、他のkintoneユーザにメンションしたりもできます。

#最後に
この記事では[スペースのスレッド内コメントの投稿API](https://developer.cybozu.io/hc/ja/articles/209732306)を活用しましたが、もちろん他のkintone APIも同じようにZapierのWebhooksアクションに設定することが出来ます。

是非、試してみましょう！