回答編集履歴

11

2023/01/02 03:36

投稿

退会済みユーザー
test CHANGED
@@ -122,7 +122,7 @@
122
122
  };
123
123
  var json = UrlFetchApp.fetch(url, options);
124
124
  if (json.getResponseCode() !== 200) {
125
- throw Error(json.getContentText());
125
+ throw new Error(json.getContentText());
126
126
  }
127
127
 
128
128
  json = JSON.parse(json);
@@ -159,7 +159,7 @@
159
159
  };
160
160
  var json = UrlFetchApp.fetch(url, options);
161
161
  if (json.getResponseCode() !== 200) {
162
- throw Error(json.getContentText());
162
+ throw new Error(json.getContentText());
163
163
  }
164
164
 
165
165
  console.log('画像のアップロードが完了しました。');
@@ -181,7 +181,7 @@
181
181
 
182
182
  var json = UrlFetchApp.fetch(url, options);
183
183
  if (json.getResponseCode() !== 200) {
184
- throw Error(json.getContentText());
184
+ throw new Error(json.getContentText());
185
185
  }
186
186
 
187
187
  console.log('リッチメニューの設定が完了しました。');

10

2022/12/31 11:04

投稿

退会済みユーザー
test CHANGED
@@ -15,7 +15,7 @@
15
15
 
16
16
  → しかし、④を実行する時点では、**① で発行したリッチメニューIDに紐づいた画像データ**がアップロードされていません。この結果、質問文にあるようなエラーが発生します。
17
17
  getRichmenu を実行する前に、setImage_Richmenu 関数をエディタから実行されているかもしれません。
18
- しかし、リッチメニューID は `https://api.line.me/v2/bot/richmenu` への POST 毎に異なるIDが発行されます。
18
+ しかし、リッチメニューID は `https://api.line.me/v2/bot/richmenu` への **POST 毎に異なるIDが発行されます**
19
19
  すなわち、getRichmenu 関数を実行したときに75行目で発行されるリッチメニューIDと、setImage_Richmenu を実行したときに75行目で発行されるリッチメニューIDは別のIDになるため、各関数を別々に実行するとうまく設定できません。
20
20
 
21
21
  ##### 対応

9

2022/12/31 11:04

投稿

退会済みユーザー
test CHANGED
@@ -29,7 +29,7 @@
29
29
  setImage_Richmenu
30
30
 
31
31
  getRichmenu
32
- の各関数を、1つの実行フェーズ内で順番に実行します。それぞれの関数に、取得したリッチメニューIDを引数として渡すことで、リッチメニューIDの整合性がとれるようにします。
32
+ の各関数を main という関数にまとめ、1つの実行フェーズ内で順番に実行するようにします。それぞれの関数に、取得したリッチメニューIDを引数として渡すことで、リッチメニューIDの整合性がとれるようにしています。
33
33
 
34
34
  (関数外にある 75・76行目は削除)
35
35
  (質問文内のコード 80行目 URLの先頭にある半角スペースを削除)

8

2022/12/31 11:03

投稿

退会済みユーザー
test CHANGED
@@ -29,7 +29,7 @@
29
29
  setImage_Richmenu
30
30
 
31
31
  getRichmenu
32
- 1回せます。それぞれの関数に、取得したリッチメニューIDを引数として渡すことで、リッチメニューIDの整合性がとれるようにします。
32
+ の各関数、1つの実行フェーズ内順番に実行します。それぞれの関数に、取得したリッチメニューIDを引数として渡すことで、リッチメニューIDの整合性がとれるようにします。
33
33
 
34
34
  (関数外にある 75・76行目は削除)
35
35
  (質問文内のコード 80行目 URLの先頭にある半角スペースを削除)

7

2022/12/31 11:00

投稿

退会済みユーザー
test CHANGED
@@ -1,8 +1,8 @@
1
1
  おそらく、それぞれの関数を1回1回別個に実行しており、そのうち「 getRichmenu 」をエディタで実行した場合に上記のエラーが出て「登録できない」と悩まれているのだと推測します。
2
2
 
3
3
  ##### エラーが発生する原因
4
- 関数外75・76行目が関数の外にあるため、エディタ上で getRichmenu を指定して実行した時の処理の流れは、下記のようになっています。
4
+ エディタ上で getRichmenu を指定して実行した時の処理の流れは、下記のようになっています。
5
-
5
+ ポイントは、75・76行目が関数の外にある点です。
6
6
  ① 最初に、75行目 の `let response = createRichMenu()` が実行され、リッチメニューのレイアウトがアップロードされます。そして createRichMenu 関数からリッチメニューのIDが返され、グローバルスコープで宣言された変数 response に格納されます。
7
7
 
8
8
  ② 76行目が実行され、リッチメニューのIDがコンソールに表示されます。

6

2022/12/31 10:52

投稿

退会済みユーザー
test CHANGED
@@ -16,7 +16,7 @@
16
16
  → しかし、④を実行する時点では、**① で発行したリッチメニューIDに紐づいた画像データ**がアップロードされていません。この結果、質問文にあるようなエラーが発生します。
17
17
  getRichmenu を実行する前に、setImage_Richmenu 関数をエディタから実行されているかもしれません。
18
18
  しかし、リッチメニューID は `https://api.line.me/v2/bot/richmenu` への POST 毎に異なるIDが発行されます。
19
- すなわち、getRichmenu 関数を実行したときに発行されるリッチメニューIDと、setImage_Richmenu を実行したときに発行されるリッチメニューIDは別のIDになるため、各関数を別々に実行するとうまく設定できません。
19
+ すなわち、getRichmenu 関数を実行したときに75行目で発行されるリッチメニューIDと、setImage_Richmenu を実行したときに75行目で発行されるリッチメニューIDは別のIDになるため、各関数を別々に実行するとうまく設定できません。
20
20
 
21
21
  ##### 対応
22
22
  各関数を別々に実行する場合は、console に表示されるリッチメニューIDをコピペして、コードに直接貼り付けて実行するという運用でもよいですが、面倒だと思います。

5

2022/12/31 10:24

投稿

退会済みユーザー
test CHANGED
@@ -184,7 +184,6 @@
184
184
  throw Error(json.getContentText());
185
185
  }
186
186
 
187
- json = JSON.parse(json);
188
187
  console.log('リッチメニューの設定が完了しました。');
189
188
  }
190
189
  ```

4

 

2022/12/31 10:20

投稿

退会済みユーザー
test CHANGED
@@ -35,7 +35,7 @@
35
35
  (質問文内のコード 80行目 URLの先頭にある半角スペースを削除)
36
36
  (その他細かいところを修正しています)
37
37
 
38
- 実行する際は、エディタから main 関数を指定して実行してください。
38
+ 実行する際は、エディタから main 関数を指定して実行してください。main以外の関数(createRichMenu や setImage_Richmenu など)を個別に実行する必要はありません。
39
39
  ```js
40
40
  const drive_fileId = '**********'; // メニューに使用する画像ファイルのIDを指定
41
41
  const ACCESS_TOKEN = '***********'; // bot のアクセストークンを指定
@@ -188,4 +188,4 @@
188
188
  console.log('リッチメニューの設定が完了しました。');
189
189
  }
190
190
  ```
191
- ```
191
+

3

2022/12/31 10:19

投稿

退会済みユーザー
test CHANGED
@@ -18,12 +18,12 @@
18
18
  しかし、リッチメニューID は `https://api.line.me/v2/bot/richmenu` への POST 毎に異なるIDが発行されます。
19
19
  すなわち、getRichmenu 関数を実行したときに発行されるリッチメニューIDと、setImage_Richmenu を実行したときに発行されるリッチメニューIDは別のIDになるため、各関数を別々に実行するとうまく設定できません。
20
20
 
21
- ##### 対応方法
21
+ ##### 対応
22
22
  各関数を別々に実行する場合は、console に表示されるリッチメニューIDをコピペして、コードに直接貼り付けて実行するという運用でもよいですが、面倒だと思います。
23
23
  別案として、リッチメニューの登録から画像アップロード、ユーザー設定まで一括して行うやり方が考えられます。
24
24
 
25
25
 
26
- ##### 解決方法
26
+ ##### コード例
27
27
  createRichMenu
28
28
 
29
29
  setImage_Richmenu

2

2022/12/31 10:18

投稿

退会済みユーザー
test CHANGED
@@ -13,7 +13,7 @@
13
13
 
14
14
  ---
15
15
 
16
- → しかし、④を実行する時点では、画像データがアップロードされておらず、リッチメニューID と 画像ID の紐付けも完了していません。この結果、質問文にあるようなエラーが発生します。
16
+ → しかし、④を実行する時点では、**① で発行したリッチメニューIDに紐づいた画像データ**がアップロードされていません。この結果、質問文にあるようなエラーが発生します。
17
17
  getRichmenu を実行する前に、setImage_Richmenu 関数をエディタから実行されているかもしれません。
18
18
  しかし、リッチメニューID は `https://api.line.me/v2/bot/richmenu` への POST 毎に異なるIDが発行されます。
19
19
  すなわち、getRichmenu 関数を実行したときに発行されるリッチメニューIDと、setImage_Richmenu を実行したときに発行されるリッチメニューIDは別のIDになるため、各関数を別々に実行するとうまく設定できません。

1

2022/12/31 10:16

投稿

退会済みユーザー
test CHANGED
@@ -32,7 +32,7 @@
32
32
  を1回で済ませます。それぞれの関数に、取得したリッチメニューIDを引数として渡すことで、リッチメニューIDの整合性がとれるようにします。
33
33
 
34
34
  (関数外にある 75・76行目は削除)
35
- (80行目 URLの先頭にある半角スペースを削除)
35
+ 質問文内のコード 80行目 URLの先頭にある半角スペースを削除)
36
36
  (その他細かいところを修正しています)
37
37
 
38
38
  実行する際は、エディタから main 関数を指定して実行してください。