cybozu developer network

カテゴリー内の他の記事

Slackから手軽にkintoneへレコード登録する方法

記事内で利用しているライブラリ「request」は、非推奨(deprecated)になりました。
HTTP リクエストができる他のライブラリ(axios など)や、https.requst に書き換えることをおすすめします。

(著者:サイボウズ 北川 恭平)

はじめに

皆さんこんにちは。

今回は、拡張性の高さから開発者の間で人気を集めているコミュニケーションツール「Slack」とkintoneの連携について紹介します。

別記事では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 > AWS

今回作成する連携の全体概要図は以下です。

ざっくりと流れを説明すると、

  1. SlackのOutgoing Webhookで、Amazon API Gatewayで発行したAPIにPOST
  2. Amazon API Gatewayは、予め作成したAmazon Lambdaのfunctionを呼び出す
  3. この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にアップロードしていきます。

方法は以下の記事とほぼ同様なので、以下の記事を参考にしましょう。

今回は以下のコードをindex.jsとして保存します。
※kintone環境のサブドメイン、アプリID、APIトークンは環境に合わせて変更してください。
※Slackで"Todo"をトリガーワードとする想定です。トリガーワードによって14行目の文字列を変更してください。

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

記事に関するフィードバック

記事のコメント欄は記事に対するフィードバックをする場となっております。
右の記事フィードバックのためのガイドを参照してコメントしてください。
記事のリンク切れなど、気になる点がある場合も、こちらのフォームからフィードバックいただけますと幸いです。

Avatar
tomomo85

こんにちは。

Cisco Webex TeamsからGaroonスケジュールを予約するという記事から、

AWS の設定(Lambda, API Gateway)
Slackから手軽にkintoneへレコード登録する方法の中の、
「Lambda の設定」「Amazon API Gateway の設定」を参考に、それぞれの設定を行います。

という解説を見て、こちらのページに飛んできたのですが、

AWS各画面のスクリーンショットが英語で、私の見ている画面と、微妙に設定項目が異なります。

 

参考までに、API作成画面のスクリーンショットを貼ります。(それ以外の画面でも、解説の画面例と実際の入力項目に差異があります。)

ちなみに地域と言語の設定を変更してみても同じ結果だったので、記事公開当時より、AWSの画面が変わったのかもしれません。

説明に無いオプションに対して、何を選択するのが適切かわかりかねるため、現行のAWSを一度ご確認いただけますでしょうか。

お手数おかけして申し訳ありませんが、よろしくお願いいたします。

 

Avatar
cybozu Development team

tomomo85 様

お世話になっております。
cybozu developer network運営事務局でございます。

AWS API Gatewayの設定画面につきましては、以下の記事を参考頂けますでしょうか。

今後ともcybozu developer networkをご活用いただければ幸いです。

Avatar
tomomo85

cybozu Development team

回答ありがとうございます。AWS API Gatewayの設定、参考にさせていただきます。

サインインしてコメントを残してください。