回答編集履歴

4

 

2023/01/04 14:44

投稿

退会済みユーザー
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
- なぜならLINE BOTが何らかの"正常でない状態"返しても、`"muteHttpExceptions" : true`てい限り、例外が発生しないからです。(例 ステータス400、401 など)
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

 

2023/01/04 14:39

投稿

退会済みユーザー
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

 

2023/01/04 14:30

投稿

退会済みユーザー
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

 

2023/01/04 14:28

投稿

退会済みユーザー
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
- return replytextList1;
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
- return replytextList1;
132
+
196
133
  };
197
134
 
198
135
  //スプレッドシートの中の結果を配列に移動させ、出力するプログラム
@@ -236,4 +173,5 @@
236
173
  }
237
174
 
238
175
  };
176
+ 以下略
239
177
  ```