102 lines
3.7 KiB
JavaScript
102 lines
3.7 KiB
JavaScript
const ACCESS_TOKEN = 'あなたのLINE WORKS ボット用アクセストークン';
|
||
const TARGET_SERVER_URL = 'https://your-destination-server.com/api'; // 最終送信先
|
||
|
||
function doPost(e) {
|
||
const data = JSON.parse(e.postData.contents);
|
||
const event = data.events[0];
|
||
const userId = event.source.userId;
|
||
const userText = event.content ? event.content.text : "";
|
||
|
||
// ユーザーの状態を保存・取得するためのキー
|
||
const userProps = PropertiesService.getScriptProperties();
|
||
let step = userProps.getProperty(userId) || "0";
|
||
|
||
if (userText === "キャンセル") {
|
||
userProps.deleteProperty(userId);
|
||
sendMessage(userId, "アンケートを中断しました。");
|
||
return;
|
||
}
|
||
|
||
// ステップごとの分岐
|
||
switch (step) {
|
||
case "0": // 開始
|
||
sendMessage(userId, "アンケートを開始します。\nまずは【お名前】を入力してください。");
|
||
userProps.setProperty(userId, "1");
|
||
break;
|
||
|
||
case "1": // 名前を受け取った
|
||
userProps.setProperty(userId + "_name", userText);
|
||
sendMessage(userId, "次に【希望日】を 2026/03/01 の形式で入力してください。");
|
||
userProps.setProperty(userId, "2");
|
||
break;
|
||
|
||
case "2": // 日付を受け取った
|
||
userProps.setProperty(userId + "_date", userText);
|
||
// 選択肢(Quick Reply)を送る
|
||
sendQuickReply(userId, "今回の満足度を教えてください。", ["満足", "普通", "不満"]);
|
||
userProps.setProperty(userId, "3");
|
||
break;
|
||
|
||
case "3": // 選択肢を受け取った(最終ステップ)
|
||
const finalData = {
|
||
name: userProps.getProperty(userId + "_name"),
|
||
date: userProps.getProperty(userId + "_date"),
|
||
rating: userText,
|
||
userId: userId
|
||
};
|
||
|
||
// --- ここであなたのサーバーへ送信 ---
|
||
sendToExternalServer(finalData);
|
||
|
||
sendMessage(userId, "ご回答ありがとうございました!データを送信しました。");
|
||
|
||
// 状態をリセット(お掃除)
|
||
clearUserData(userId, userProps);
|
||
break;
|
||
}
|
||
}
|
||
|
||
// メッセージ送信用関数
|
||
function sendMessage(userId, text) {
|
||
UrlFetchApp.fetch(`https://www.worksapis.com/v1.0/bots/{botId}/users/${userId}/messages`, {
|
||
method: "post",
|
||
headers: { "Authorization": "Bearer " + ACCESS_TOKEN },
|
||
contentType: "application/json",
|
||
payload: JSON.stringify({ "content": { "type": "text", "text": text } })
|
||
});
|
||
}
|
||
|
||
// 選択肢ボタン(Quick Reply)送信用関数
|
||
function sendQuickReply(userId, text, options) {
|
||
const items = options.map(opt => ({
|
||
"action": { "type": "message", "label": opt, "text": opt }
|
||
}));
|
||
|
||
UrlFetchApp.fetch(`https://www.worksapis.com/v1.0/bots/{botId}/users/${userId}/messages`, {
|
||
method: "post",
|
||
headers: { "Authorization": "Bearer " + ACCESS_TOKEN },
|
||
contentType: "application/json",
|
||
payload: JSON.stringify({
|
||
"content": {
|
||
"type": "text",
|
||
"text": text,
|
||
"quickReply": { "items": items }
|
||
}
|
||
})
|
||
});
|
||
}
|
||
|
||
// 外部サーバー送信
|
||
function sendToExternalServer(data) {
|
||
UrlFetchApp.fetch(TARGET_SERVER_URL, {
|
||
method: "post",
|
||
contentType: "application/json",
|
||
payload: JSON.stringify(data)
|
||
});
|
||
}
|
||
|
||
function clearUserData(userId, props) {
|
||
props.deleteProperty(userId);
|
||
props.deleteProperty(userId + "_name");
|
||
props.deleteProperty(userId + "_date");
|
||
} |