記事内で利用しているライブラリ「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
今回作成する連携の全体概要図は以下です。
ざっくりと流れを説明すると、
- 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にアップロードしていきます。
方法は以下の記事とほぼ同様なので、以下の記事を参考にしましょう。
今回は以下のコードを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を組み合わせて更に便利な業務システムを作ってみましょう!
こんにちは。
Cisco Webex TeamsからGaroonスケジュールを予約するという記事から、
AWS の設定(Lambda, API Gateway)
Slackから手軽にkintoneへレコード登録する方法の中の、
「Lambda の設定」「Amazon API Gateway の設定」を参考に、それぞれの設定を行います。
という解説を見て、こちらのページに飛んできたのですが、
AWS各画面のスクリーンショットが英語で、私の見ている画面と、微妙に設定項目が異なります。
参考までに、API作成画面のスクリーンショットを貼ります。(それ以外の画面でも、解説の画面例と実際の入力項目に差異があります。)
ちなみに地域と言語の設定を変更してみても同じ結果だったので、記事公開当時より、AWSの画面が変わったのかもしれません。
説明に無いオプションに対して、何を選択するのが適切かわかりかねるため、現行のAWSを一度ご確認いただけますでしょうか。
お手数おかけして申し訳ありませんが、よろしくお願いいたします。
tomomo85 様
お世話になっております。
cybozu developer network運営事務局でございます。
AWS API Gatewayの設定画面につきましては、以下の記事を参考頂けますでしょうか。
今後ともcybozu developer networkをご活用いただければ幸いです。
cybozu Development team様
回答ありがとうございます。AWS API Gatewayの設定、参考にさせていただきます。