Kintoneの承認フローをSlackにプッシュする

# ごぶさたしてます

元GYAO/Yahooの玉利です。転職しましてクラウドの世界でバリバリ仕事している。。。はずだったのですが、心をおかしくして現在ニートをしております。深く聞かないでください。よくあることなので気にしないことにしてますが、病気よりも貧乏のほうがしんどいですね。

もとのページはこちらです。
https://qiita.com/btamari-gy

で、リハビリがてらに開発を始めました。知人の会社が紙ベースのハンコで承認を回しており、ここをなんとかペーパレスにできなかと相談されました。

kintoneを使えば簡単ですよ、とは言ってたのですが、デスクネッツを長く使っていて、なおかつ社内も一枚岩ではなかったのでそのままになっていたところ、いよいよ業務パンクでやばいということになり、ならば動くものを見せてやろうとPoCとして実用になるものを作ることにしました。

# 事前学習

サイボウズから、やり方は公開されていますので、プッシュするところまでは簡単に進められます。まずはここまで進めてください。

https://jp.cybozu.help/ja/k/user/webhook
https://developer.cybozu.io/hc/ja/articles/115002042086-kintone-Webhook-Microsoft-Flowでタスク管理を効率化-

# やってみた

コピペで簡単に、実際に動くものができました。しかし、いくつか問題があります。

<img width="337" alt="フローの編集___Microsoft_Flow.png" src="https://qiita-image-store.s3.amazonaws.com/0/96615/bb169800-a017-7d74-00d5-e016e7676711.png">


<img width="191" alt="Slack_-_Wits_Community.png" src="https://qiita-image-store.s3.amazonaws.com/0/96615/f22697fa-745e-3484-34e6-5cd4e0924632.png">

<img width="230" alt="Slack_-_Wits_Community.png" src="https://qiita-image-store.s3.amazonaws.com/0/96615/02514b4a-7f74-3c59-511a-0c2ed23283bb.png">

1. サンプルそのままだとタイトル・URLくらいしか取れない
2. コメント追加のデータを取ると、タイトルが取れない

2.のほうはちょっと時間かかりそうなので、一番ユーザーから言われそうな1.を先に片付けます。

# Webhookデータを解析する

Microsoft Flowが受け取ったJSONデータを直接みれるといいのですが、そういう機能はなさそうです。さてどうやって解析しようかと悩んで仕様書を呼んでいたら、JSONの内部、recordの階層にまるごとデータが入ってる気がしました。まずはこいつを取得します。

途中のjsonは取ってなかったので、以下を参考にしながらいじってみてください

```
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "app": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        }
      }
    },
    "recordTitle": {
      "type": "string"
    },
    "url": {
      "type": "string"
    },
    "comment": {
      "type": "object",
      "properties": {
        "text": {
          "type": "string"
        }
      }
    },
    "record": {
      "type": "object",
      "properties": {
        "レコード番号": { // この階層をフィールド名と合わせる（Stringの場合）
          "type": "object",
          "properties": {
            "type": {
              "type": "string"
            },
            "value": {
              "type": "string"
            }
          }
        },
        "totalScore": {
          "type": "object",
          "properties": {
            "type": {
              "type": "string"
            },
            "value": {
              "type": "string"
            }
          }
        },
        "添付ファイル3": {
          "type": "object",
          "properties": {
            "type": {
              "type": "string"
            },
            "value": {
              "type": "array"
            }
          }
        },
        "添付ファイル2": {
          "type": "object",
          "properties": {
            "type": {
              "type": "string"
            },
            "value": {
              "type": "array"
            }
          }
        },
        "添付ファイル1": {
          "type": "object",
          "properties": {
            "type": {
              "type": "string"
            },
            "value": {
              "type": "array"
            }
          }
        },
        "パートナー名": {
          "type": "object",
          "properties": {
            "type": {
              "type": "string"
            },
            "value": {
              "type": "string"
            }
          }
        },
        "採点者": {
          "type": "object",
          "properties": {
            "type": {
              "type": "string"
            },
            "value": {
              "type": "string"
            }
          }
        },
        "$id": {
          "type": "object",
          "properties": {
            "type": {
              "type": "string"
            },
            "value": {
              "type": "string"
            }
          }
        }
      }
    }
  }
}

```

<img width="332" alt="Slack_-_Wits_Community.png" src="https://qiita-image-store.s3.amazonaws.com/0/96615/b8274bd5-230f-ed7d-d0ed-87fe20d5160a.png">



まるごととれました！

今回の要件では、承認が進むたびにプッシュを行いたいので、kintoneのWebhook側でupdateのタイミングで通知するようにします。

<img width="408" alt="Webhookの編集.png" src="https://qiita-image-store.s3.amazonaws.com/0/96615/a26a9c74-4d17-0910-a632-27887fc11a99.png">





この段階で、いまあるjsonスキーマをエディタに貼って保存します。
このデータ自身がjsonなので、Flow側のパーサにぶち込んであげると、そのまま使えるものが返ってきます。これをエディタに貼ります。

この中から、欲しい情報部分の階層を元のjsonスキーマに挿入してやると、最終的に以下のようなjsonスキーマができました。

```
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "app": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        }
      }
    },
    "recordTitle": {
      "type": "string"
    },
    "url": {
      "type": "string"
    },
    "comment": {
      "type": "object",
      "properties": {
        "text": {
          "type": "string"
        }
      }
    },
    "record": {
      "type": "object",
      "properties": {
        "目的・理由": {
          "type": "object",
          "properties": {
            "type": {
              "type": "string"
            },
            "value": {
              "type": "string"
            }
          }
        },
        "ステータス": {
          "type": "object",
          "properties": {
            "type": {
              "type": "string"
            },
            "value": {
              "type": "string"
            }
          }
        },
        "起案者": {
          "type": "object",
          "properties": {
            "type": {
              "type": "string"
            },
            "value": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "code": {
                    "type": "string"
                  },
                  "name": {
                    "type": "string"
                  }
                },
                "required": [
                  "code",
                  "name"
                ]
              }
            }
          }
        }
      }
    }
  }
}
```

これでFlowから欲しい情報が取れるようになったので、Slackのテンプレートを以下のような形で作りました。

<img width="492" alt="フローの編集___Microsoft_Flow.png" src="https://qiita-image-store.s3.amazonaws.com/0/96615/9a87a5bf-13a2-bf6a-27f1-5bb849eadf25.png">

ワークフローを動かして、動作を確認します。

<img width="274" alt="Slack_-_Wits_Community.png" src="https://qiita-image-store.s3.amazonaws.com/0/96615/440a5645-d609-a4d5-b3b2-d23c1d7e4694.png">

これで、進行中の稟議がいまどこのステータスにあるのか可視化出来ました。PoCで細かいことを言うとキリがないので、あとは正式な開発が始まったら考えることにします。