質問編集履歴
4
コードの修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -64,8 +64,177 @@
|
|
64
64
|
// debug(postMsg, lineUserId);
|
65
65
|
debug(action, lineUserId);
|
66
66
|
|
67
|
-
|
67
|
+
// 検索語に対しての回答をSSから取得
|
68
|
+
var answers = findResponseArray(postMsg);
|
68
69
|
|
70
|
+
// 回答メッセージを作成
|
71
|
+
var replyText = '「' + postMsg + '」ですね。かしこまりました。以下、回答です。';
|
72
|
+
// 回答の有無に応じて分岐
|
73
|
+
if (answers.length === 0) {
|
74
|
+
// 「類似の検索キーワード」がないかチェック
|
75
|
+
var mayBeWord = findMaybe(postMsg);
|
76
|
+
if (typeof mayBeWord === "undefined") {
|
77
|
+
// 回答がない場合の定型文
|
78
|
+
sendMessage(replyToken, '答えが見つかりませんでした。別のキーワードで質問してみてください。');
|
79
|
+
} else {
|
80
|
+
sendMayBe(replyToken, mayBeWord);
|
81
|
+
}
|
82
|
+
} else {
|
83
|
+
// 回答がある場合のメッセージ生成
|
84
|
+
answers.forEach(function(answer) {
|
85
|
+
replyText = replyText + "\n\n=============\n\nQ:" + answer.key + "\n\nA:" + answer.value;
|
86
|
+
});
|
87
|
+
|
88
|
+
// 1000文字を超える場合は途中で切る
|
89
|
+
if (replyText.length > 1000) {
|
90
|
+
replyText = replyText.slice(0,1000) + "……\n\n=============\n\n回答文字数オーバーです。詳細に検索キーワードを絞ってください。";
|
91
|
+
}
|
92
|
+
// メッセージAPI送信
|
93
|
+
sendMessage(replyToken, replyText);
|
94
|
+
}
|
95
|
+
}
|
96
|
+
|
97
|
+
// SSからデータを取得
|
98
|
+
function getData() {
|
99
|
+
var sheet = SpreadsheetApp.openById(SHEET_ID).getSheetByName(SHEET_NAME);
|
100
|
+
var data = sheet.getDataRange().getValues();
|
101
|
+
|
102
|
+
return data.map(function(row) { return {key: row[0], value: row[1], type: row[2]}; });
|
103
|
+
}
|
104
|
+
|
105
|
+
// SSから「もしかして」データを取得
|
106
|
+
function getMayBeData() {
|
107
|
+
var sheet = SpreadsheetApp.openById(SHEET_ID).getSheetByName(SHEET_NAME_MAYBE);
|
108
|
+
var data = sheet.getDataRange().getValues();
|
109
|
+
return data.map(function(row) { return {key: row[0], value: row[1], type: row[2]}; });
|
110
|
+
}
|
111
|
+
|
112
|
+
// 単語が一致したセルの回答を配列で返す
|
113
|
+
function findResponseArray(word) {
|
114
|
+
// スペース検索用のスペースを半角に統一
|
115
|
+
word = word.replace(' ',' ');
|
116
|
+
// 単語ごとに配列に分割
|
117
|
+
var wordArray = word.split(' ');
|
118
|
+
return getData().reduce(function(memo, row) {
|
119
|
+
// 値が入っているか
|
120
|
+
if (row.value) {
|
121
|
+
// AND検索ですべての単語を含んでいるか
|
122
|
+
var matchCnt = 0;
|
123
|
+
wordArray.forEach(function(wordUnit) {
|
124
|
+
// 単語を含んでいればtrue
|
125
|
+
if (row.key.indexOf(wordUnit) > -1) {
|
126
|
+
matchCnt = matchCnt + 1;
|
127
|
+
}
|
128
|
+
});
|
129
|
+
if (wordArray.length === matchCnt) {
|
130
|
+
memo.push(row);
|
131
|
+
}
|
132
|
+
}
|
133
|
+
return memo;
|
134
|
+
}, []) || [];
|
135
|
+
}
|
136
|
+
|
137
|
+
// 単語が一致したセルの回答を「もしかして」を返す
|
138
|
+
function findMaybe(word) {
|
139
|
+
return getMayBeData().reduce(function(memo, row) { return memo || (row.key === word && row.value); }, false) || undefined;
|
140
|
+
}
|
141
|
+
|
142
|
+
// 画像形式でAPI送信
|
143
|
+
function sendMessageImage(replyToken, imageUrl) {
|
144
|
+
// replyするメッセージの定義
|
145
|
+
var postData = {
|
146
|
+
"replyToken" : replyToken,
|
147
|
+
"messages" : [
|
148
|
+
{
|
149
|
+
"type": "image",
|
150
|
+
"originalContentUrl": imageUrl
|
151
|
+
}
|
152
|
+
]
|
153
|
+
};
|
154
|
+
return postMessage(postData);
|
155
|
+
}
|
156
|
+
|
157
|
+
// LINE messaging apiにJSON形式でデータをPOST
|
158
|
+
function sendMessage(replyToken, replyText) {
|
159
|
+
// replyするメッセージの定義
|
160
|
+
var postData = {
|
161
|
+
"replyToken" : replyToken,
|
162
|
+
"messages" : [
|
163
|
+
{
|
164
|
+
"type" : "text",
|
165
|
+
"text" : replyText
|
166
|
+
}
|
167
|
+
]
|
168
|
+
};
|
169
|
+
return postMessage(postData);
|
170
|
+
}
|
171
|
+
|
172
|
+
// LINE messaging apiにJSON形式で確認をPOST
|
173
|
+
function sendMayBe(replyToken, mayBeWord) {
|
174
|
+
// replyするメッセージの定義
|
175
|
+
var postData = {
|
176
|
+
"replyToken" : replyToken,
|
177
|
+
"messages" : [
|
178
|
+
{
|
179
|
+
"type" : "template",
|
180
|
+
"altText" : "もしかして検索キーワードは「" + mayBeWord + "」ですか?",
|
181
|
+
"template": {
|
182
|
+
"type": "confirm",
|
183
|
+
"actions": [
|
184
|
+
{
|
185
|
+
"type":"postback",
|
186
|
+
"label":"はい",
|
187
|
+
"data":"action=detail",
|
188
|
+
},
|
189
|
+
{
|
190
|
+
"type": "message",
|
191
|
+
"label": "いいえ",
|
192
|
+
"text": "いいえ、違います。"
|
193
|
+
}
|
194
|
+
],
|
195
|
+
"text": "答えが見つかりませんでした。もしかして検索キーワードは「" + mayBeWord + "」ですか?"
|
196
|
+
}
|
197
|
+
|
198
|
+
}
|
199
|
+
]
|
200
|
+
};
|
201
|
+
return postMessage(postData);
|
202
|
+
}
|
203
|
+
|
204
|
+
// LINE messaging apiにJSON形式でデータをPOST
|
205
|
+
function postMessage(postData) {
|
206
|
+
// リクエストヘッダ
|
207
|
+
var headers = {
|
208
|
+
"Content-Type" : "application/json; charset=UTF-8",
|
209
|
+
"Authorization" : "Bearer " + ACCESS_TOKEN
|
210
|
+
};
|
211
|
+
// POSTオプション作成
|
212
|
+
var options = {
|
213
|
+
"method" : "POST",
|
214
|
+
"headers" : headers,
|
215
|
+
"payload" : JSON.stringify(postData)
|
216
|
+
};
|
217
|
+
return UrlFetchApp.fetch(REPLY, options);
|
218
|
+
}
|
219
|
+
|
220
|
+
/** ユーザーのアカウント名を取得
|
221
|
+
*/
|
222
|
+
function getUserDisplayName(userId) {
|
223
|
+
var url = 'https://api.line.me/v2/bot/profile/' + userId;
|
224
|
+
var userProfile = UrlFetchApp.fetch(url,{
|
225
|
+
'headers': {
|
226
|
+
'Authorization' : 'Bearer ' + ACCESS_TOKEN,
|
227
|
+
},
|
228
|
+
})
|
229
|
+
return JSON.parse(userProfile).displayName;
|
230
|
+
}
|
231
|
+
|
232
|
+
// userIdシートに記載
|
233
|
+
function lineUserId(userId) {
|
234
|
+
var sheet = SpreadsheetApp.openById(SHEET_ID).getSheetByName('userId');
|
235
|
+
sheet.appendRow([userId]);
|
236
|
+
}
|
237
|
+
|
69
238
|
// debugシートに値を記載
|
70
239
|
function debug(text, userId) {
|
71
240
|
var sheet = SpreadsheetApp.openById(SHEET_ID).getSheetByName('debug');
|
3
リンクの間違いを修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
https://qiita.com/
|
1
|
+
https://qiita.com/WdknWdkn/items/b78ae572e7cb5c9dfdca
|
2
2
|
上記のサイトを参考にGASでスプレッドシートからLINEの返信を返すbotを作っているのですが、最後debugシートへ値を記載する際、送ったテキストを転記したいと思っております。
|
3
3
|
素人ながらコードを読み、「postMsg」の部分を取り出すものと思い以下(test)のようにコードを変えましたが、LINEbotが返信しなくなり原因がわかりません。
|
4
4
|
|
2
タグを追加
title
CHANGED
File without changes
|
body
CHANGED
File without changes
|
1
タイトルの脱字を修正しました
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
LINE botのスプレッドシート
|
1
|
+
LINE botのスプレッドシートにテキストが記載されない
|
body
CHANGED
File without changes
|