Zoho Formsのデータをスプレッドシートと連携してkintoneに登録する

前回、以下の記事で「Zoho Forms」のデータをスプレッドシートに連携する方法について書きました。

今回は、上記の内容を応用して、「Zoho Forms」のデータをkintoneに連携してみます。

Zoho Forms → スプレッドシート →kintone
の流れで、データを連携する方法になります。

kintoneでアプリを作成する

上記の記事で作成したフォームに合わせて、以下のようなアプリを作りました。

kintoneでアプリを作成

この時、フィールドコードはフィールド名と同じにしておきます。

フィールドコードの設定

スプレッドシートと連携するために、APIトークンを作成する

設定から「APIトークン」を選択します。

kintoneの設定からAPIトークンを選択

以下のような画面が表示されるので、「生成する」ボタンをクリックします。

APIトークンを生成する

APIトークンを生成すると、以下のように表示されます。
今回は、スプレッドシートからレコードを追加したいので、アクセス権の「レコード追加」にチェックを入れます。
APIトークンは後で使うので、メモしておいてください。

生成が完了したら、左上の「保存」ボタンをクリックします。
アプリの設定画面に戻るので、「アプリを更新」ボタンをクリックして、アプリを更新します。

スプレッドシートからkintoneに連携する

スプレッドシートからkintoneに連携するには、GASを使用します。
コードは以下のようになります。

function registerEntry(e) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

  // 登録対象レコードを取得する
  var lastRow = sheet.getRange("A:A").getValues().filter(String).length;
  var data = sheet.getRange(lastRow, 1, 1, 9).getValues()[0];
  
  // 登録済みだったら処理しない
  // ※スプレッドシートを直接編集した場合にもトリガーが動くので、制御しておく
  if (data[data.length -1] != "") {
    return;
  }
  
  // 申込登録データ
  var postRecord = {
    "お名前": {"value": data[2]},
    "メールアドレス": {"value": data[3]},
    "件名": {"value": data[4]},
    "内容": {"value": data[5]},
  };
  
  // kintoneにレコードを追加
  createKintoneRecord(postRecord, "[ここにAPIトークンを入れる]", [ここにアプリIDを入れる]);
  
  // 完了をスプレッドシートに書き込む
  sheet.getRange(lastRow, data.length).setValue(true);
}

function createKintoneRecord(record, apiToken, appId) {
  var urlPost = "[ここにkintoneのURLを入れる]/k/v1/record.json";

  var postData = {
    "app": appId,
    "record": record
  };
  var options = {
    "method": "post",
    "contentType": "application/json",
    "headers": {
      "X-Cybozu-API-Token": apiToken
    },
    "payload": JSON.stringify(postData)
  };
  var res = UrlFetchApp.fetch(urlPost, options);
  return res;
}

スプレッドシートが変更されると、registerEntry関数が実行されるようにします。(設定は後述)

5行目、6行目でスプレッドシートの最終行を取得し、最終行のデータを登録対象とします。

10行目ではI列を見ていて、空だったら処理を終了としています。
これはスプレッドシートを直接編集した場合にもトリガーが実行されるのを制御し、最終行のデータが登録済みだったら何も処理をしないようにします。

15行目が登録するデータです。
kintoneアプリでは「日時」という項目を用意していますが、日時はkintoneの機能で登録日時が入るようにしたので、GASでは指定していません。
ここの連想配列で指定している名前が、kintoneアプリのフィールドコードと一致している必要があります。

23行目がkintoneに登録する関数(別の関数としました)
アプリ作成時にメモしておいたAPIトークンとアプリIDを記述します。
アプリIDは、アプリを開くとURLが以下の形式になっていると思います。
[kintoneのURL]/k/52/
この末尾の数字がアプリIDです。

26行目で完了したことをスプレッドシートに書き込んで、2重で登録されないように制御します。

29行目からがkintoneに登録する関数です。
30行目が登録で使用するURLなので、自身のkintoneのURLを記述します。

あとは44行目で対象のURLにpostすると、データが登録されます。

トリガーの設定

スプレッドシートにデータが書き込まれたタイミングで、上記のコードが実行されるようにします。
これで、Zoho Formsにデータが送信される → スプレッドシートにデータが連携される → kintoneにデータが連携される という流れができます。

トリガーは以下のようにスプレッドシートが変更されたタイミングで実行されるようにします。

Zoho Formsでデータを送信する

以上で設定は完了したので、実際にZoho Formsからデータを送信してみます。
フォームで以下のように入力して、データを送信しました。

Zoho Formsからデータを送信

スプレッドシートには以下のように連携されます。
I列がTRUEとなっていて、kintoneへの連携も完了していることが分かります。

Zoho Formsからスプレッドシートに連携

kintoneには以下のように登録されます。

スプレッドシートからkintoneに連携

kintoneにも登録されていることが確認できました。
これでZoho Formsからkintoneに連携することができました。