回答編集履歴
4
test
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
> 実行後、エラーはないのですが、別のスプレッドシートのlogは何も記載されず、LINE botの応答がありません。
|
2
2
|
|
3
3
|
→エラーはないとのことですが、実際にはエラーは発生しています。
|
4
|
-
しかし質問者さん自身のオリジナル~~レシピ~~コードのせいで、そのエラーが
|
4
|
+
しかし質問者さん自身のオリジナル~~レシピ~~コードのせいで、そのエラー内容がシートに表示されなくなっています。
|
5
5
|
|
6
6
|
140行目から149行目の
|
7
7
|
```js
|
@@ -20,14 +20,7 @@
|
|
20
20
|
|
21
21
|
もともとエラーログを確認できるように、doPost を try ~ catch で囲んでいますが、さらに内部に try ~ catchを設置して(つまり上記の try ~ catch で)処理されてしまうと、(そのcatch内で例外が発生しない限り) doPost側 の catch には移行しません。
|
22
22
|
結果、ログシートにエラーが記録されなくなっています。
|
23
|
-
|
24
|
-
※そもそも `"muteHttpExceptions" : true` にしたときに try ~ catchで囲むのは、目的を間違えると片手落ちのデバッグ手法になります。
|
25
|
-
|
26
|
-
|
23
|
+
ここは、try~catch を挟む必要はありません。また doPostの処理中に Logger や console を使っても、GCPに紐付けていない限りエディタのログに表示されないので、シートに出力するようにします。
|
27
|
-
|
28
|
-
`"muteHttpExceptions" : true`にした場合は、素直にレスポンス全文をログに表示させましょう。(「ステータスコード200以外の時に例外発生させる」としてもいいと思いますが、お好みで)
|
29
|
-
|
30
|
-
|
31
24
|
```js
|
32
25
|
var response = UrlFetchApp.fetch(url, option);
|
33
26
|
debug(response.getContentText(); // Logger.log/console.log とすると内容が確認できないのでシートに出力。
|
3
test
CHANGED
@@ -51,7 +51,7 @@
|
|
51
51
|
としたかったのだと推測しました。
|
52
52
|
|
53
53
|
---
|
54
|
-
2つ目は、**
|
54
|
+
2つ目は、**スプレッドシートから渡す返信データが(渡し方がまずいために)不正なデータとして扱われてしまう場合がある**という点です。
|
55
55
|
スプレッドシートのrensyu シート画像を見るに、カルーセル選択後に返信するデータは、セル内改行されています。
|
56
56
|
選択肢1を選んだときに返信する文字は、画像の通りであれば
|
57
57
|
A
|
@@ -71,7 +71,7 @@
|
|
71
71
|
```
|
72
72
|
{"message":"May not be empty","property":"messages[1].text"}
|
73
73
|
```
|
74
|
-
なぜなら、改行文字1文字だけでは、テキストの内容が空(empty)であると判定されてしまうからです。
|
74
|
+
なぜなら、**改行文字1文字だけでは、テキストの内容が空(empty)であると判定されてしまうから**です。
|
75
75
|
|
76
76
|
(参考にしたとされる記事内容との整合性はひとまず置いといて)ここは改行文字で区切った配列を replyTextList として getresultFromSheet 関数に渡せばよいでしょう。
|
77
77
|
|
2
test
CHANGED
@@ -25,7 +25,7 @@
|
|
25
25
|
|
26
26
|
なぜなら、LINE BOTが何らかの"正常でない状態"を返しても、`"muteHttpExceptions" : true`にしている限り、例外が発生しないからです。(例 ステータス400、401 など)
|
27
27
|
|
28
|
-
`"muteHttpExceptions" : true`、素直にレスポンス全文をログに表示させましょう。(「ステータスコード200以外の時に例外発生させる」としてもいいと思いますが、お好みで)
|
28
|
+
`"muteHttpExceptions" : true`にした場合は、素直にレスポンス全文をログに表示させましょう。(「ステータスコード200以外の時に例外発生させる」としてもいいと思いますが、お好みで)
|
29
29
|
|
30
30
|
|
31
31
|
```js
|
1
test
CHANGED
@@ -85,14 +85,7 @@
|
|
85
85
|
---
|
86
86
|
|
87
87
|
```js
|
88
|
-
function doPost(e) {
|
89
|
-
try {
|
90
|
-
doPostProxy(e);
|
91
|
-
} catch (err) {
|
92
|
-
debug(JSON.stringify(err.stack || err.message, undefined, 1));
|
93
|
-
}//例外処理
|
94
|
-
|
88
|
+
略
|
95
|
-
|
96
89
|
//dopostの関数定義
|
97
90
|
function doPostProxy(e) {
|
98
91
|
var json = e.postData.contents
|
@@ -127,72 +120,16 @@
|
|
127
120
|
|
128
121
|
//質問文2
|
129
122
|
function shitsumon_2(e) {//(5)
|
130
|
-
debug(e.replyToken)
|
131
|
-
let Msg2 = {
|
132
|
-
"replyToken": e.replyToken,
|
133
|
-
"messages": [
|
134
|
-
|
123
|
+
略
|
135
|
-
"type": "template",
|
136
|
-
|
137
|
-
"altText": "選択",
|
138
|
-
"template": {
|
139
|
-
"type": "buttons",
|
140
|
-
"title": "誰に送る?",
|
141
|
-
"text": "誰に送る?",
|
142
|
-
"actions": [
|
143
|
-
{
|
144
|
-
"type": "postback",
|
145
|
-
"label": "選択1",
|
146
|
-
"text": "送る相手は\n選択1", //1
|
147
|
-
"data": JSON.stringify({ "action": "aite_senpai" })
|
148
|
-
},
|
149
|
-
{
|
150
|
-
"type": "postback",
|
151
|
-
"label": "選択2",
|
152
|
-
"text": "送る相手は\n選択2",
|
153
|
-
"data": JSON.stringify({ "action": "aite_kohai" })
|
154
|
-
}
|
155
|
-
]
|
156
|
-
}
|
157
|
-
}
|
158
|
-
]
|
159
|
-
};
|
160
|
-
|
161
|
-
let pro_2 = {
|
162
|
-
"method": "post",
|
163
|
-
"headers": {
|
164
|
-
"Content-Type": "application/json",
|
165
|
-
"Authorization": "Bearer " + CHANNEL_ACCESS_TOKEN
|
166
|
-
},
|
167
|
-
"payload": JSON.stringify(Msg2),
|
168
|
-
"muteHttpExceptions": true,
|
169
|
-
};
|
170
|
-
var response = UrlFetchApp.fetch(url, pro_2);
|
171
|
-
if (response.getResponseCode() !== 200) {
|
172
|
-
throw new Error(response.getContentText());
|
173
|
-
}
|
174
|
-
return ContentService.createTextOutput(JSON.stringify({
|
175
|
-
'content': 'post ok'
|
176
|
-
})).setMimeType(ContentService.MimeType.JSON);
|
177
124
|
};
|
178
125
|
|
179
126
|
//最終選択まとめ1
|
180
127
|
function result_ok_1(e) {
|
181
|
-
var sheet = spreadsSheet.getSheetByName('rensyu');
|
182
|
-
//スプレッドシートの読み込み
|
183
|
-
var replytextList1 = sheet.getRange('D2').getValue();//D2のデータを設定。
|
184
|
-
//シートの全受信語句と返信語句を二次元配列で取得する//(2,8)→(2,45):F45まで
|
185
|
-
//返信語句を格納するための空配列を宣言する
|
186
|
-
|
128
|
+
略
|
187
129
|
};
|
188
130
|
//最終選択まとめ2
|
189
131
|
function result_ok_2(e) {
|
190
|
-
var sheet = spreadsSheet.getSheetByName('rensyu');
|
191
|
-
//スプレッドシートの読み込み
|
192
|
-
var replytextList1 = sheet.getRange('D3').getValue();//D3のデータを設定。
|
193
|
-
//シートの全受信語句と返信語句を二次元配列で取得する//(2,8)→(2,45)
|
194
|
-
//返信語句を格納するための空配列を宣言する
|
195
|
-
|
132
|
+
略
|
196
133
|
};
|
197
134
|
|
198
135
|
//スプレッドシートの中の結果を配列に移動させ、出力するプログラム
|
@@ -236,4 +173,5 @@
|
|
236
173
|
}
|
237
174
|
|
238
175
|
};
|
176
|
+
以下略
|
239
177
|
```
|