前提
Google Apps Scripts で LINE Bot を作っています。
リッチメニューを Messaging API で作成したいです.
LINE のリッチメニューの実装中に以下のエラーメッセージが発生しました。
実現したいこと
- リッチメニューを width 2500px , height 843px のサイズでリッチメニュー(1つ)を作成
ただし,リッチメニューの個数は1つとしています.
発生している問題・エラーメッセージ
エラーメッセージ Exception: Request failed for https://api.line.me returned code 400. Truncated server response: {"message":"must upload richmenu image before applying it to user","details":[]}
該当のソースコード
GoogleAppsScript
1function createRichMenu(){ 2 var url = 'https://api.line.me/v2/bot/richmenu'; 3 4 var areas = []; 5 6 //タップ領域の例 その1 7 areas[0] = { 8 9 //領域の大きさ 10 'bounds': { 11 12 //左から0px地点から 13 'x': 0, 14 15 //上から0px地点から 16 'y': 0, 17 18 //幅2500px 19 'width': 2500, 20 21 //高さ843px 22 'height': 843, 23 }, 24 25 //ユーザがタップ時のアクション 26 'action': { 27 //メッセージアクション 28 'type': 'message', 29 30 //ユーザがタップ時に、botへ送信する内容 31 'text': '在室確認', 32 } 33 }; 34 35 var postData = { 36 37 //タップ領域全体のサイズ 38 'size': { 39 40 //幅2500pxで 41 'width': 2500, 42 43 //高さ843pxで 44 'height': 843, 45 }, 46 47 //デフォルトのリッチメニューにするかどうか 48 'selected': true, 49 50 //リッチメニュー管理用の名前 ユーザには非公開 51 'name': '在室管理' , 52 53 //トークルームメニューに表示されるテキスト 54 'chatBarText': 'MENU' , 55 56 //タップ領域群 57 'areas': areas, 58 }; 59 60 var headers = { 61 'Content-Type': 'application/json', 62 'Authorization': 'Bearer ' + ACCESS_TOKEN, 63 }; 64 65 var options = { 66 'method': 'post', 67 'headers': headers, 68 'payload': JSON.stringify(postData), 69 }; 70 71 var json = UrlFetchApp.fetch(url, options); 72 json = JSON.parse(json); 73 return json.richMenuId; 74} 75let response = createRichMenu(); 76console.log(response); 77 78function setImage_Richmenu() { 79 var richmenu_Id = response; 80 var url = ' https://api-data.line.me/v2/bot/richmenu/' + richmenu_Id + '/content'; 81 82 //GoogleDriveからファイルIDで画像ファイルを開く 83 var image = DriveApp.getFileById(drive_fileId); 84 85 //開いた画像ファイルをPNG形式・BLOBに変換 86 var blob = image.getAs(MimeType.PNG); 87 88 var headers = { 89 'Content-Type': 'image/png', 90 'Authorization': 'Bearer ' + ACCESS_TOKEN, 91 }; 92 93 var options = { 94 'method': 'post', 95 'headers': headers, 96 97 //payloadにBLOBをそのまま乗せる 98 'payload': blob, 99 }; 100 101 var json = UrlFetchApp.fetch(url, options); 102 json = JSON.parse(json); 103} 104console.log('finish!'); 105 106function getRichmenu(){ 107 var richmenu_Id = response; 108 var url = 'https://api.line.me/v2/bot/user/all/richmenu/' + richmenu_Id; 109 var headers = { 110 'Authorization': 'Bearer ' + ACCESS_TOKEN, 111 }; 112 113 var options = { 114 'method' : 'post', 115 'headers': headers, 116 }; 117 118 var json = UrlFetchApp.fetch(url, options); 119 json = JSON.parse(json); 120 121} 122
試したこと
下記のサイトを基に制作しました.
https://note.com/luth/n/ne6d340cec623
リッチメニューの ID が実行するごとに変わるのでオブジェクトとして設定しましたが,うまくいきませんでした.

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/12/31 23:14 編集