🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
LINE Messaging API

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

852閲覧

Dateクラスのインスタンスを作ろうとするとエラーが発生します。

FoyLand

総合スコア72

LINE Messaging API

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2019/11/29 13:44

LINE botを作るためにGoogle Apps Scriptを書いているのですが、現在時刻を取得するためにDateクラスインスタンスを生成しようとするとエラーが発生します。エラーが出ている個所は次の1行です。

JavaScript

1var now = new Date();

エラーの内容は次の通りです。

TypeError: (class)@1a141b39 は関数ではありません。undefined です。 at doPost(コード:22)

変数名を変えて試してみるなど色々しましたが解決しませんでした。原因として何か思い当たる方、ご教授いただければ幸いです。よろしくお願いいたします。一応全体のコードも貼っておきます。該当箇所は22行目です。

JavaScript

1 2 3 4function doPost(e) { 5 var replyToken = JSON.parse(e.postData.contents).events[0].replyToken; 6 var user_id = JSON.parse(e.postData.contents).events[0].source.userId; 7 var input = JSON.parse(e.postData.contents).events[0].message; 8 if (typeof replyToken === 'undefined') {return;} 9 var user_message = input.text; 10 var sheet_id = [スプレッドシートID]; 11 12 var spreadsheet0 = SpreadsheetApp.openById(sheet_id[0]); // user info 13 var spreadsheet1 = SpreadsheetApp.openById(sheet_id[1]); // contents 14 var spreadsheet2 = SpreadsheetApp.openById(sheet_id[2]); // post log 15 var users_info = spreadsheet0.getDataRange().getValues(); 16 var contents_info = spreadsheet1.getDataRange().getValues(); 17 18 19 20 21 var now = new Date(); 22 var Year = now.getFullYear(); 23 var Month = now.getMonth()+1; 24 var Date = now.getDate(); 25 var Hour = now.getHours(); 26 var Min = now.getMinutes(); 27 var Sec = now.getSeconds(); 28 var date_str = Year+'/'+Month+'/'+Date; 29 var time_str = Hour+'/'+Min+'/'+Sec; 30 var post_log = spreadsheet2.getDataRange().getValues(); 31 var L = getCol(post_log, 0).length; 32 setValueFunc(spreadsheet2,L,0,date_str); 33 setValueFunc(spreadsheet2,L,1,time_str); 34 setValueFunc(spreadsheet2,L,2,user_id); 35 setValueFunc(spreadsheet2,L,3,user_message); 36 37 38 var id_column = getCol(users_info, 0); 39 var index = id_column.indexOf(user_id); 40 var line = 'ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー'; 41 var selectSentence = '\n\n'+line+'\n利用するモードを選択してください!\n'+line+'\n質問モード⇒1\n回答モード⇒2\n回答請求⇒3\nレベル照会⇒4\n問い合わせ⇒5\n'+line; 42 if(index<0){ 43 var L = id_column.length; 44 setValueFunc(spreadsheet0,L,0,user_id); 45 setValueFunc(spreadsheet0,L,1,user_message); 46 setValueFunc(spreadsheet0,L,2,0); 47 setValueFunc(spreadsheet0,L,3,0); 48 var message = simpleMessage(user_message+'さん、ユーザー登録完了しました!\n名前を変更したい場合は管理者までお問い合わせください。'+selectSentence); 49 } else { 50 //登録完了後の処理 51 var user_name = users_info[index][1]; 52 var user_level = users_info[index][2]; 53 var user_status = users_info[index][3]; 54 user_level = user_level + 1; 55 setValueFunc(spreadsheet0,index,2,user_level); 56 57 58// console.log(getCol(contents_info, 2).length); 59 60 61 62 switch(user_status) { 63 case 0: // user_status0 モード選択 64 switch(user_message) { 65 case '1': //モード1を選択した場合 質問受付 66 var message = simpleMessage('質問をどうぞ!'); 67 setValueFunc(spreadsheet0,index,3,1); 68 break; 69 case '2': //モード2を選択した場合 募集中質問提示 70 var isFit = false; 71 var indexToAnswer=0; 72 while(!isFit) { 73 indexToAnswer=indexToAnswer+1; 74 if(indexToAnswer===getCol(contents_info, 2).length){break;} 75 isFit = contents_info[indexToAnswer][2] === 0 && contents_info[indexToAnswer][0] !== user_id; 76 } 77 if(isFit) { 78 var questionToAnswer = contents_info[indexToAnswer][1]; 79 var message = simpleMessage('次の質問を受信しました。\n\n'+questionToAnswer); 80 setValueFunc(spreadsheet1,indexToAnswer,2,1); 81 setValueFunc(spreadsheet1,indexToAnswer,3,user_id); 82 user_status = 2; 83 } else { 84 var message = simpleMessage('申し訳ございませんが、現在回答募集中の質問がございません。\n時間をおいてからお試しください。'+selectSentence); 85 user_status = 0; 86 } 87 setValueFunc(spreadsheet0,index,3,user_status); 88 break; 89 case '3': //モード3を選択した場合 90 var isSame = false; 91 var indexToAnswer=0; 92 while(!isSame) { 93 indexToAnswer=indexToAnswer+1; 94 if(indexToAnswer===getCol(contents_info, 2).length){break;} 95 isSame = contents_info[indexToAnswer][2] === 2 && contents_info[indexToAnswer][0] === user_id;} 96 if(isSame) { 97 var question = contents_info[indexToAnswer][1]; 98 var answer = contents_info[indexToAnswer][4]; 99 setValueFunc(spreadsheet1,indexToAnswer,2,3); 100 var message = simpleMessage('「' + question + '」\nに対する回答は、\n「' + answer + '」\nでした。'+selectSentence); 101 } else { 102 var message = simpleMessage('申し訳ございませんが、現在回答済みの質問がございません。\n時間をおいて請求するか、新しく質問してください。'+selectSentence); 103 } 104 setValueFunc(spreadsheet0,index,3,0); 105 break; 106 case '4': //モード4を選択した場合 107 var message = simpleMessage(user_name + 'さん、\nあなたのユーザーレベルは' + user_level + 'です。'+selectSentence); 108 user_status = 0; setValueFunc(spreadsheet0,index,3,user_status); 109 break; 110 case '5': //モード5を選択した場合 111 var message = simpleMessage('管理人本人に直接お問い合わせいただくか、もしくは以下のメールおよびツイッターまでご連絡ください。\n\nGmail : system.company.japan@gmail.com\nTwitter : https://twitter.com/SystemJapan'+selectSentence); 112 user_status = 0; setValueFunc(spreadsheet0,index,3,user_status); 113 break; 114 default: 115 var message = simpleMessage('入力は半角の1か2か3か4か5でお願いします。'); 116 } 117 break; //←これは大きなswitch文のcase0のbreak 118 case 1: // user_status1 質問受付 119 L = getCol(contents_info, 0).length; 120 setValueFunc(spreadsheet1,L,0,user_id); 121 setValueFunc(spreadsheet1,L,1,user_message); 122 setValueFunc(spreadsheet1,L,2,0); 123 var message = simpleMessage('質問を受け付けました。\n回答があった場合、3の回答請求から確認できます。\n2の回答モードにて、他の人の質問に答えてあげましょう!'+selectSentence); 124 setValueFunc(spreadsheet0,index,3,0); 125 break; 126 case 2: // user_status2 回答受付 127 var isSame = false; 128 var indexToAnswer=0; 129 while(!isSame) { 130 indexToAnswer=indexToAnswer+1; 131 isSame = contents_info[indexToAnswer][2] === 1 && contents_info[indexToAnswer][3] === user_id; } 132 setValueFunc(spreadsheet1,indexToAnswer,4,user_message); 133 setValueFunc(spreadsheet1,indexToAnswer,2,2); 134 var message = simpleMessage('回答を受け付けました。\nありがとうございます。'+selectSentence); 135 setValueFunc(spreadsheet0,index,3,0); 136 break; 137 default: 138 var message = simpleMessage('予期せぬエラーが発生しました。\n頑張って直します。'); 139 } // switch文の閉じかっこ 140 } // else文の閉じかっこ 141 reply(replyToken, message); 142 143 144 145 146 147 148 149 return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON); 150} 151 152 153//指定の文字列をメッセージ化 154function simpleMessage(str) { 155 return [{'type': 'text', 'text': str}];} 156//指定のセルに文字列を書き込み 157function setValueFunc(sheet,index1,index2,value) { 158 var currentCell=currentCellFunc(sheet,index1,index2); 159 currentCell.setValue(value);} 160//該当列の2行目が空白であるか判定 161function hasNoName(sheet,index) { 162 var currentCell=currentCellFunc(sheet,index,1); 163 return currentCell.isBlank();} 164//カレントセルを指定 165function currentCellFunc(sheet,index1,index2) { 166 var currentCell = sheet.getRange("A1"); 167 currentCell=currentCell.offset(index1,index2); 168 return currentCell;} 169//配列の列ベクトル抽出 170function getCol(matrix, col){ 171 var column = []; 172 for(var i=0; i<matrix.length; i++){column.push(matrix[i][col]);} 173 return column;} 174//メッセージ送信 175function reply(replyToken, message) { 176 var url = 'https://api.line.me/v2/bot/message/reply'; 177 var channelToken = 'チャンネルトークン'; 178 UrlFetchApp.fetch(url, { 179 'headers': { 180 'Content-Type': 'application/json; charset=UTF-8', 181 'Authorization': 'Bearer ' + channelToken, 182 }, 183 'method': 'post', 184 'payload': JSON.stringify({ 185 'replyToken': replyToken, 186 'messages': message, 187 }), 188 }); 189} 190 191

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

JavaScript

1 var now = new Date(); //下の var Date のせいで Date が undefinded に!! 2 //(中略) 3 var Date = now.getDate();

varで宣言した変数は巻き上げされるため、後のvar DateのせいでDate型がundefinedになってしまうのが原因です。詳しくは「JavaScript 巻き上げ」等で検索すると色々解説されたサイトが出てきます。
解決策としては、var Dateで宣言している変数名を変更しましょう。

投稿2019/11/29 14:02

編集2019/11/29 14:04
draq

総合スコア2577

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

FoyLand

2019/11/29 14:12

無事解決しました。助かりました。 毎度お早いご回答をありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問