Slack から手軽に kintone へレコード登録する方法
警告
記事内で利用しているライブラリ「
request
」は、非推奨(deprecated)になりました。
HTTP リクエストができる他のライブラリ(
axios
など)や、
https.requst
に書き換えることをおすすめします。
はじめに
皆さんこんにちは。
今回は、拡張性の高さから開発者の間で人気を集めているコミュニケーションツール「
Slack
」と kintone の連携について紹介します。
kintone から Slack に通知を送る方法 では kintone から Slack というパターンがありました。
今回はその逆パターンとして、Slack から kintone にレコード登録をしてみたいと思います。
Slack はフロー型のコミュニケーションツールで、リアルタイムのコミュニケーションに向いています。
ただ、情報をストックしておきたいことがあるかと思います。
もちろん Slack にも POST 機能など情報をストックできる標準機能はありますが、kintone と組み合わせることで、プロセス管理を組み合わせたり過去の情報を検索できたりといったメリットが出てきます。
Slack を仕事で使っていて情報のストックがいまいちしっくりきていない!という方は、ご参考いただき Slack と kintone で強力なビジネスツールを作り上げましょう。
途中で Amazon Lambda(以下 Lambda)と Amazon API Gateway(以下 API Gateway)を使います。
最後まで読んでいただくと分りますが、今回はほぼ AWS の設定方法を紹介する記事になってしまいました。
すぐにやってみたい!という方は、まず AWS のアカウントを取得後この記事にて試していただければと思います。
概要
Slack 上で特定の文字を打つと、kintone の ToDo アプリにレコードを登録するシンプルな連携です。
Slack の Outgoing webhooks を使うことで、Slack のコメントなどの情報を外部の URL に POST できます。
問題は、この渡された情報を kintone のフィールド形式に合わせて成形した後、さらに kintone の REST API を使ってレコード登録をする必要があります。
中間でいろいろごにょごしょ自作するのはとても手間なので、今回は AWS のサービスを利用します。
ちなみに、AWS 連携は別セクションでも記事を出しているので参照してください。
cybozu developer network > 連携Tips
今回作成する連携の全体概要図は以下です。
ざっくり説明すると、次の流れで設定します。
- Slack の Outgoing Webhook で、Amazon API Gateway で発行した API に POST する。
- Amazon API Gateway は、あらかじめ作成した Amazon Lambda の function を呼び出す。
- この Lambda function で、Slack から受け取った情報を元に、kintone へのリクエストデータを作成し、kintone REST API を実行しレコード登録する。
若干複雑に見えますが、そこまでたいへんな設定ではありません。
それでは、順を追って設定方法を紹介していきたいと思います。
kintone アプリ
今回は「シンプル ToDo」というシンプルな ToDo アプリを作成します。
フィールド名 | フィールドタイプ | フィールドコード |
---|---|---|
タイトル | 文字列(1行) | title |
詳細 | 文字列(複数行) | detail |
また、
kintoneヘルプページ
を参考に API トークンを発行しておきましょう。アクセス権は、「レコード追加」のみでかまいません。
発行した API トークンは後程使うので、テキストエディタなどにメモしておきましょう。
Amazon Lambda
アップロード用 Zip ファイルの作成
今回、Lambda では、Javascipt(Node.js)で作成したプログラム一式を Zip 化して Lambda にアップロードしていきます。
方法は以下の記事とほぼ同様なので、以下の記事を参考にしましょう。
kintone APIを使ってスペースを有効活用する(サーバーレスで)
今回は以下のコードを index.js として保存します。
- kintone 環境のサブドメイン、アプリ ID、API トークンは環境に合わせて変更してください。
- Slack で"ToDo"をトリガーワードとする想定です。
トリガーワードによって 23 行目の文字列を変更してください。
|
|
index.js を作成し、Node.js の request モジュールをインストールたら以下のコマンドで zip ファイルを作成します。
|
|
zip ファイル「slackin.zip」を作成したら Lambda の設定に移ります。
Lambda の設定
AWS のコンソールにログイン後、Lambda を選択し「Create a Lambda fuction」をクリックします。
今回 blueprint は指定せず「skip」を押します。
Configure function は以下のように設定しました。
大項目 | 中項目 | 設定値 |
---|---|---|
Configure function | Name | slackinSample |
Description | This is a sample. | |
Runtime | Node.js | |
Lambda function code | Code entry type | Upload a Zip file にて先ほど作成した「slackin.zip」をアップロードします。 |
Lambda function handler and role | Handler | index.handler |
Role | Basic execution role より IAM ロールを新規に作成 | |
Advanced settings | Memory(MB) | 128 |
Timeout | 0min 3sec |
これで、設定したら「Next」>「Createfunction」を押します。
Lambda function の作成はこれで完了です。
この段階でテストしてもエラーがでるかと思いますが、気にせず次に進みます。
Amazon API Gateway の設定
AWS のコンソール画面で「Amazon API Gateway」を選択後、「Create API」より API を作成します。
今回は以下のように設定しました。
項目 | 設定値 |
---|---|
API name | slackinAPI |
Clone from API | Do not clone from existing API |
Description | sample API |
「Create API」ボタンを押して画面遷移後、「Create Resource」より以下の設定でリソースを作成しました。
項目 | 設定値 |
---|---|
Resource Name | slackin |
Resource Path | slackin |
次に、セットアップ画面で以下を設定します。
今回は Slack から POST されるので「Create Method」より、「POST」を作成します。
設定情報として以下を設定します。
Integration type | Lambda Function |
---|---|
Lambda Region | Lambda Function がある任意の region |
Lambda Function | slackinSample |
「Save」を押すと、Permission 設定が出るので「OK」を押します。
Slack からの Outgoing Webhooks をトリガーにする場合、API Gateway の設定で Content-Type を指定しておく必要があります。
Integration Request の設定から、「Mapping Templates」を開き application/x-www-form-urlencoded
に対して、Mapping Template で以下を指定します。
|
|
参考: API Gateway Mapping Template Reference
次にこの API をデプロイします。
「Deploy API」ボタンを押します。
今回は以下の設定でデプロイしました。
項目 | 設定値 |
---|---|
Deployment stage | New Stage |
Stage name | slackinstage |
Stage description | My first stage |
Deployment description | This is my first deploy |
デプロイしたら、Invoke URL をコピーしておきます。
Slack Outgoing Webhooks の設定
最後に、Slack 側の設定をしていきます。あと一息です。
ページ左上の Slack ドメイン名をクリックし、「Customize Slack」を押します。
「Configure Apps」で遷移後、ヘッダーの検索窓より「Outgoing WebHooks」をインストールします。
インストール後に、次の設定を入力します。
項目 | 設定値 |
---|---|
Channel | 任意のチャンネル(今回は kintone ) |
Trigger Word(s) | ToDo |
URL | API GateWay で作成した URL |
Token |
初期値のまま |
Descriptive Label | 任意 |
Customize Name | 初期値のまま |
Customize Icon | イカしたアイコン |
これで、設定は完了です!
試してみよう
それではさっそくためしてみましょう!
設定したトリガーワード「ToDo」に続けて、タイトルとなる文字を指定します。
また今回のサンプルでは「+」を区切り文字にすると詳細を設定できるので、以下のように呟いてみました。
しばらく待つと BOT さんからお返事がきました。
最後に、kintone アプリを確認してみます。
無事 Slack からレコード登録ができました!
まとめ
今回は、Slack と kintone を連携させるために AWS をふんだんに使いました。
Slack 以外でも、Webhook が利用できるサービスなら同様の連携ができるかと思います。
いろいろなサービスと kintone を組み合わせてさらに便利な業務システムを作ってみましょう!