Slack から kintone へレコード登録する方法 ~AWS Lambda でつなぐ~ 後編

目次

caution
警告

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

それでは、 前編 に引き続き Slack と kintone を連携させるための AWS の設定をしていきたいと思います。

Amazon Lambda の設定

まずは、お馴染み AWS Lambda です。

アップロード用 Zip ファイルの作成

今回、Lambda では、Javascipt(Node.js)で作成したプログラム一式を Zip 化して Lambda にアップロードしていきます。

方法は以下の記事とほぼ同様なので、以下の記事を参考にしましょう。
Qiita: kintone APIを使ってスペースを有効活用する(サーバーレスで) (External link)

今回は以下のコードを index.js として保存します。

  • kintone 環境のサブドメイン、アプリ ID、API トークンは環境に合わせて変更してください。
  • Slack で「ToDo」をトリガーワードとする想定です。トリガーワードによって 14 行目の文字列を変更してください。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
// eslint-disable-next-line no-unused-vars
const aws = require('aws-sdk');
const request = require('request');

/* kintone用のパラメータ*/
const DOMAIN = '{subdomain}.cybozu.com'; // kintone環境のドメイン
const APP_ID = '1'; // シンプルToDoアプリのアプリID
const BASE_URL = 'https://' + DOMAIN + '/k/v1/';
const APITOKEN = 'XXX';
const headers = {'X-Cybozu-API-Token': APITOKEN};

exports.handler = function(event, context) {
  const returnMessage = JSON.stringify(event);
  let temp = returnMessage.split('&');
  temp = temp[9].split('=')[1].replace(/Todo\+/g, '');
  temp = decodeURIComponent(temp);
  const title = temp.split('+')[0];
  let message = '';
  if (temp.split('+')) {
    message = temp.split('+')[1];
  }
  const body_post = {
    app: APP_ID,
    record: {
      title: {
        value: title
      },
      detail: {
        value: message
      }
    }
  };
  const options_getsalesamount = {
    url: BASE_URL + 'record.json',
    method: 'POST',
    headers: headers,
    'Content-Type': 'application/json',
    json: body_post
  };
  // レコードを取得
  request(options_getsalesamount, (error, response, body) => {
    context.done(null, {text: 'kintone POST success!'});
  });
};

index.js を作成し、Node.js の request モジュールをインストールしたら以下のコマンドで zip ファイルを作成します。

1
zip -r slackin.zip index.js node_modules/

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 で以下を指定します。

1
$input.json('$')

参考: API Gateway Mapping Template Reference (External link)

次にこの 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 開発者ライセンス(開発環境)
この機会に、ぜひ開発者ライセンスを申し込みして、連携を始めてみてください。