回答編集履歴
11
    
        answer	
    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
    
        answer	
    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
    
        answer	
    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
    
        answer	
    CHANGED
    
    | 
         @@ -29,7 +29,7 @@ 
     | 
|
| 
       29 
29 
     | 
    
         
             
            setImage_Richmenu
         
     | 
| 
       30 
30 
     | 
    
         
             
            ↓
         
     | 
| 
       31 
31 
     | 
    
         
             
            getRichmenu
         
     | 
| 
       32 
     | 
    
         
            -
            を 
     | 
| 
      
 32 
     | 
    
         
            +
            の各関数を、1つの実行フェーズ内で順番に実行します。それぞれの関数に、取得したリッチメニューIDを引数として渡すことで、リッチメニューIDの整合性がとれるようにします。
         
     | 
| 
       33 
33 
     | 
    
         | 
| 
       34 
34 
     | 
    
         
             
            (関数外にある 75・76行目は削除)
         
     | 
| 
       35 
35 
     | 
    
         
             
            (質問文内のコード 80行目 URLの先頭にある半角スペースを削除)
         
     | 
7
    
        answer	
    CHANGED
    
    | 
         @@ -1,8 +1,8 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            おそらく、それぞれの関数を1回1回別個に実行しており、そのうち「 getRichmenu 」をエディタで実行した場合に上記のエラーが出て「登録できない」と悩まれているのだと推測します。
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            ##### エラーが発生する原因
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
      
 4 
     | 
    
         
            +
            エディタ上で getRichmenu を指定して実行した時の処理の流れは、下記のようになっています。
         
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
      
 5 
     | 
    
         
            +
            ポイントは、75・76行目が関数の外にある点です。
         
     | 
| 
       6 
6 
     | 
    
         
             
            ① 最初に、75行目 の `let response = createRichMenu()` が実行され、リッチメニューのレイアウトがアップロードされます。そして createRichMenu 関数からリッチメニューのIDが返され、グローバルスコープで宣言された変数 response に格納されます。
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
8 
     | 
    
         
             
            ② 76行目が実行され、リッチメニューのIDがコンソールに表示されます。
         
     | 
6
    
        answer	
    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
    
        answer	
    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
    
        answer	
    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,3 @@ 
     | 
|
| 
       188 
188 
     | 
    
         
             
              console.log('リッチメニューの設定が完了しました。');
         
     | 
| 
       189 
189 
     | 
    
         
             
            }
         
     | 
| 
       190 
190 
     | 
    
         
             
            ```
         
     | 
| 
       191 
     | 
    
         
            -
            ```
         
     | 
3
    
        answer	
    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
    
        answer	
    CHANGED
    
    | 
         @@ -13,7 +13,7 @@ 
     | 
|
| 
       13 
13 
     | 
    
         | 
| 
       14 
14 
     | 
    
         
             
            ---
         
     | 
| 
       15 
15 
     | 
    
         | 
| 
       16 
     | 
    
         
            -
            → しかし、④を実行する時点では、画像データがアップロードされて 
     | 
| 
      
 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
    
        answer	
    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 関数を指定して実行してください。
         
     |