Slackからkintoneへレコード登録する方法 ~AWS Lambdaでつなぐ~ 後編
警告
記事内で利用しているライブラリ「
  request
    
  
」は、非推奨(deprecated)になりました。
HTTPリクエストができる他のライブラリ(
  axios
    
  
など)や、
  https.requst
    
  
に書き換えることをおすすめします。
それでは、前編に引き続きSlackとkintoneを連携させるためのAWSの設定をしていきたいと思います。
Amazon Lambdaの設定
まずは、お馴染みAWS Lambdaです。
アップロード用Zipファイルの作成
今回、Lambdaでは、Javascipt(Node.js)で作成したプログラム一式をZip化してLambdaにアップロードしていきます。
方法は以下の記事とほぼ同様なので、以下の記事を参考にしましょう。
Qiita:
  kintone APIを使ってスペースを有効活用する(サーバーレスで)
    
  
今回は以下のコードを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 | skackinAPI | 
| 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さんからお返事がきました。
BOTさんからお返事がきました。最後に、kintoneアプリを確認してみます。
無事Slackからレコード登録ができました!
まとめ
今回は、Slackとkintoneを連携させるためにAWSをふんだんに使いました。
Slack以外でも、Webhookが利用できるサービスなら同様に連携できるかと思います。
いろいろなサービスとkintoneを組み合わせてさらに便利な業務システムを作ってみましょう!
最後にここまでお読みいただき、kintoneを触ってみたいけど触れる環境を持っていない方に朗報です。
本サイトcybozu developer networkでは、1年間無償のkintone developerライセンスを申し込みできます。
  kintone開発者ライセンス(開発環境)
この機会に、ぜひ開発者ライセンスを申し込みして、連携を始めてみてください。