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を組み合わせてさらに便利な業務システムを作ってみましょう!