「Google フォームとkintoneを連携してみよう!」を見ながらGoogleフォームとの連携を試みましたが、うまくいきません。
Googleフォームの「Stackdriverのログ」では「完了」と出ますが、「Response code is “400.0”」となっており、実際にkintone側には反映されておりません。
また、Googleフォームで送信する際に開発者ツールで確認すると「Uncaught Could not establish connection. Receiving end does not exist. m=viewer base:425」と表示されております。
因みに、別途作成した、全項目「文字列(1行)」のフォームについては、Googleフォームからkintoneへの反映が成功しております。
今回反映されないフォームは、ラジオボタンやチェックボックス、日付、文字列(1行/複数行)が交じっており、必須/任意の項目も入り乱れている状態です。(ただし、Googleフォームとkintoneのフォームのフォームタイプはすべてあわせております。)
お知恵をお借りできますと幸いです。
==コード(※サブドメイン、アプリ番号、アプリ名、トークンは伏せてあります。)==
function getFormResponse(e) {
‘use strict’;
var itemResponses = e.response.getItemResponses();//アンケートの回答を取得
var records = ‘[’;
records += Utilities.formatString(‘{“cand_email”: { “value”: “%s” }’, e.response.getRespondentEmail());//回答者のEmailアドレスの取得、文字列(1行)、必須(ただし、kintone上は「リンク」)
for (var i = 0; i < itemResponses.length; i++) {
var itemResponse = itemResponses[i];
switch (itemResponse.getItem().getTitle()) {
case “Skype ID”://文字列(1行)、必須
records += Utilities.formatString(‘,“cand_skype” : { “value”: “%s” }’,
itemResponse.getResponse());//質問に対する回答を取得
break;
case “パスワード”://文字列(1行)、必須
records += Utilities.formatString(‘,“cand_pw” : { “value”: “%s” }’,
itemResponse.getResponse());//質問に対する回答を取得
break;
case “姓(ローマ字)”://文字列(1行)、必須
records += Utilities.formatString(‘,“cand_last_name” : { “value”: “%s” }’,
itemResponse.getResponse());//質問に対する回答を取得
break;
case “名(ローマ字)”://文字列(1行)、必須
records += Utilities.formatString(‘,“cand_first_name” : { “value”: “%s” }’,
itemResponse.getResponse());//質問に対する回答を取得
break;
case “生年月日”://日付、必須
records += Utilities.formatString(‘,“cand_birth” : { “value”: “%s” }’,
itemResponse.getResponse());//質問に対する回答を取得
break;
case “性別”://ラジオボタン、必須
records += Utilities.formatString(‘,“cand_sex” : { “value”: “%s” }’,
itemResponse.getResponse());//質問に対する回答を取得
break;
case “国籍”://ラジオボタン、必須
records += Utilities.formatString(‘,“cand_nationality” : { “value”: “%s” }’,
itemResponse.getResponse());//質問に対する回答を取得
break;
case “居住国”://ラジオボタン、必須
records += Utilities.formatString(‘,“cand_country_of_residence” : { “value”: “%s” }’,
itemResponse.getResponse());//質問に対する回答を取得
break;
case “能力検定合格状況”://チェックボックス、任意
records += Utilities.formatString(‘,“cand_test” : { “value”: “%s” }’,
itemResponse.getResponse());//質問に対する回答を取得
break;
case “技能試験合格状況”://文字列(複数行)、任意
records += Utilities.formatString(‘,“cand_cert_GF” : { “value”: “%s” }’,
itemResponse.getResponse());//質問に対する回答を取得
break;
case “PR動画URL”://文字列(1行)、任意 (ただし、kintone上は「リンク」)
records += Utilities.formatString(‘,“cand_url” : { “value”: “%s” }’,
itemResponse.getResponse());//質問に対する回答を取得
break;
case “PRメッセージ”://文字列(複数行)、必須
records += Utilities.formatString(‘,“cand_message” : { “value”: “%s” }’,
itemResponse.getResponse());//質問に対する回答を取得
break;
case “働きたい国”://チェックボックス、必須
records += Utilities.formatString(‘,“cand_work_place” : { “value”: “%s” }’,
itemResponse.getResponse());//質問に対する回答を取得
break;
case “求職状況”://ラジオボタン、必須
records += Utilities.formatString(‘,“cand_seeking_status” : { “value”: “%s” }’,
itemResponse.getResponse());//質問に対する回答を取得
break;
}
}
records += ‘}]’;
Logger.log(‘Response JSON is “%s”’, records);
return records;
}
function sendToKintone(e) {
‘use strict’;
Logger.log(‘Form submitted’);
var subdomain = “XXX”;//サブドメイン名
var apps = {
YOUR_APPLICATION1: { appid: X, name: “アプリ名”, token: “トークン” }
};
var manager = new KintoneManager.KintoneManager(subdomain, apps);// ライブラリーの初期化
var str = getFormResponse(e);
str = str.replace(//g, "").replace(/\r/g, “\r”).replace(/\t/g, “\t”);
var records = JSON.parse(str);//JSON形式に変換
var response = manager.create(“YOUR_APPLICATION1”, records);//kintone レコードの生成
// ステータスコード
// 成功すれば200になる
var code = response.getResponseCode();
Logger.log(‘Response code is “%s”’, code);
}