質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
LINE Messaging API

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

Google Apps Script

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

615閲覧

GAS LINEBOTコードの間違いを教えてください

kinakosonsi

総合スコア15

LINE Messaging API

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

Google Apps Script

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2019/06/09 11:31

編集2019/06/09 14:11

GASの画面には65行条件の後に)がありません。
と表示されます。コードは下のとうりです。念のため写真も載せておきます![イメージ説明]

何をしたいかっていうと
(送信されたメッセージのことをWIKIで検索→説明とURL)+(/helpと送信されたら固定のメッセージを送る。)です
何回か直そうとしたんですが何も帰ってこなくなったりしました

var CHANNEL_ACCESS_TOKEN = "アクセストークン"; var simple_wikipedia_api = 'http://wikipedia.simpleapi.net/api'; function doPost(e) { var contents = e.postData.contents; var obj = JSON.parse(contents); var events = obj["events"]; for (var i = 0; i < events.length; i++) { if (events[i].type == "message") { reply_message(events[i]); } } } function reply_message(e) { if (e.message.type == "text") { var input_text = e.message.text; var reply_text = ""; if (input_text == "/help") { reply_text = "こちらはhelpです。使い方の説明をします。『調べたい単語+とは』と送信してください。"; } else if (input_text == "おはよう") { reply_text = "おはようございます"; } } else if ( function doPost(e) { var reply_token= JSON.parse(e.postData.contents).events[0].replyToken; if (typeof reply_token === 'undefined') { return; } var user_message = JSON.parse(e.postData.contents).events[0].message.text; var reply_messages = ['wikiに登録されてないよ!!(´;ω;`)']; if (/とは??$/.test(user_message)) { var q = user_message.match(/(.*)とは??$/)[1]; var url_and_body = getWikipediaUrlAndBody(q); if (url_and_body !== null) { reply_messages = [ '「' + q + '」' + 'について調べるよ!!', url_and_body.body.substr(0, 140) + '...', '長いからこの先は下記からどうぞ(˘ω˘)', url_and_body.url, ]; } } var messages = reply_messages.map(function (v) { return {'type': 'text', 'text': v}; }); UrlFetchApp.fetch(line_endpoint, { 'headers': { 'Content-Type': 'application/json; charset=UTF-8', 'Authorization': 'Bearer ' + CHANNEL_ACCESS_TOKEN, }, 'method': 'post', 'payload': JSON.stringify({ 'replyToken': reply_token, 'messages': messages, }), }); return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON); } function getWikipediaUrlAndBody(q) { var url = simple_wikipedia_api + '?keyword=' + encodeURIComponent(q) + '&output=json'; var res = JSON.parse(UrlFetchApp.fetch(url)); if (res !== null) { return {'url': res[0].url,'body': res[0].body}; } else { return null; } } var postData = { "replyToken": e.replyToken, "messages": [{ "type": "text", "text": reply_text }] }; } var options = { "method": "post", "headers": { "Content-Type": "application/json", "Authorization": "Bearer " + CHANNEL_ACCESS_TOKEN }, "payload": JSON.stringify(postData) }; UrlFetchApp.fetch("https://api.line.me/v2/bot/message/reply", options); }

else ifはいらないと思いなくしてみました

var

1var simple_wikipedia_api = 'http://wikipedia.simpleapi.net/api'; 2function doPost(e) { 3var contents = e.postData.contents; 4var obj = JSON.parse(contents); 5var events = obj["events"]; 6for (var i = 0; i < events.length; i++) { 7if (events[i].type == "message") { 8reply_message(events[i]); 9} 10} 11} 12 13function reply_message(e) { 14if (e.message.type == "text") { 15var input_text = e.message.text; 16var reply_text = ""; 17if (input_text == "/help") { 18reply_text = "こちらはhelpです。使い方の説明をします。『調べたい単語+とは』と送信してください。"; 19} else if (input_text == "おはよう") { 20reply_text = "おはようございます"; 21} 22 23 24 25function doPost(e) { 26 var reply_token= JSON.parse(e.postData.contents).events[0].replyToken; 27 if (typeof reply_token === 'undefined') { 28 return; 29 } 30 var user_message = JSON.parse(e.postData.contents).events[0].message.text; 31 32 var reply_messages = ['wikiに登録されてないよ!!(´;ω;`)']; 33 if (/とは??$/.test(user_message)) { 34 var q = user_message.match(/(.*)とは??$/)[1]; 35 var url_and_body = getWikipediaUrlAndBody(q); 36 if (url_and_body !== null) { 37 reply_messages = [ 38 '「' + q + '」' + 'について調べるよ!!', 39 url_and_body.body.substr(0, 140) + '...', 40 '長いからこの先は下記からどうぞ(˘ω˘)', 41 url_and_body.url, 42 ]; 43 } 44 } 45 46 var messages = reply_messages.map(function (v) { 47 return {'type': 'text', 'text': v}; 48 }); 49 50 UrlFetchApp.fetch(line_endpoint, { 51 'headers': { 52 'Content-Type': 'application/json; charset=UTF-8', 53 'Authorization': 'Bearer ' + CHANNEL_ACCESS_TOKEN, 54 }, 55 'method': 'post', 56 'payload': JSON.stringify({ 57 'replyToken': reply_token, 58 'messages': messages, 59 }), 60 }); 61 return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON); 62} 63 64 function getWikipediaUrlAndBody(q) { 65 var url = simple_wikipedia_api + '?keyword=' + encodeURIComponent(q) + '&output=json'; 66 var res = JSON.parse(UrlFetchApp.fetch(url)); 67 if (res !== null) { 68 return {'url': res[0].url,'body': res[0].body}; 69 } else { 70 return null; 71 } 72} 73 74 75 76 77 var postData = { 78"replyToken": e.replyToken, 79"messages": [{ 80"type": "text", 81"text": reply_text 82}] 83}; 84} 85var options = { 86"method": "post", 87"headers": { 88"Content-Type": "application/json", 89"Authorization": "Bearer " + CHANNEL_ACCESS_TOKEN 90}, 91"payload": JSON.stringify(postData) 92}; 93UrlFetchApp.fetch("https://api.line.me/v2/bot/message/reply", options); 94} 95
var CHANNEL_ACCESS_TOKEN = "アクセストークン"; var simple_wikipedia_api = 'http://wikipedia.simpleapi.net/api'; function doPost(e) { var contents = e.postData.contents; var obj = JSON.parse(contents); var events = obj["events"]; for (var i = 0; i < events.length; i++) { if (events[i].type == "message") { reply_message(events[i]); } } } function reply_message(e) { if (e.message.type == "text") { var input_text = e.message.text; var reply_text = ""; if (input_text == "/help") { reply_text = "こちらはhelpです。使い方の説明をします。『調べたい単語+とは』と送信してください。"; } else if (input_text == "おはよう") { reply_text = "おはようございます"; } { var reply_token= JSON.parse(e.postData.contents).events[0].replyToken; if (typeof reply_token === 'undefined') { return; } var user_message = JSON.parse(e.postData.contents).events[0].message.text; var reply_messages = ['wikiに登録されてないよ!!(´;ω;`)']; if (/とは??$/.test(user_message)) { var q = user_message.match(/(.*)とは??$/)[1]; var url_and_body = getWikipediaUrlAndBody(q); if (url_and_body !== null) { reply_messages = [ '「' + q + '」' + 'について調べるよ!!', url_and_body.body.substr(0, 140) + '...', '長いからこの先は下記からどうぞ(˘ω˘)', url_and_body.url, ]; } } var messages = reply_messages.map(function (v) { return {'type': 'text', 'text': v}; }); UrlFetchApp.fetch(line_endpoint, { 'headers': { 'Content-Type': 'application/json; charset=UTF-8', 'Authorization': 'Bearer ' + CHANNEL_ACCESS_TOKEN, }, 'method': 'post', 'payload': JSON.stringify({ 'replyToken': reply_token, 'messages': messages, }), }); return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON); } function getWikipediaUrlAndBody(q) { var url = simple_wikipedia_api + '?keyword=' + encodeURIComponent(q) + '&output=json'; var res = JSON.parse(UrlFetchApp.fetch(url)); if (res !== null) { return {'url': res[0].url,'body': res[0].body}; } else { return null; } var postData = { "replyToken": e.replyToken, "messages": [{ "type": "text", "text": reply_text }] }; var options = { "method": "post", "headers": { "Content-Type": "application/json", "Authorization": "Bearer " + CHANNEL_ACCESS_TOKEN }, "payload": JSON.stringify(postData) }; UrlFetchApp.fetch("https://api.line.me/v2/bot/message/reply", options); } } }

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

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

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

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

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

guest

回答2

0

ベストアンサー

js

1funtion reply_message(e) { 2... 3}

こちらのreply_message関数の最後にある else if ( は何かの間違いでしょうか?
else if (の閉じ括弧が見つからないためにエラーが発生していると思われます。
一度そこのコードを整えて、試してみてください!

投稿2019/06/09 12:05

fumito_94

総合スコア679

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

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

kinakosonsi

2019/06/09 12:57

else ifを消した結果、最初の/helpへへの返信は行うことができました。ですが、WIKIのほうは動きませんでした。
fumito_94

2019/06/09 13:00

変更した後のコードも上の質問に載せていただいてもよろしいでしょうか?
kinakosonsi

2019/06/09 13:06

else ifをなくし更新しました。
fumito_94

2019/06/09 13:14

reply_messageの最初のif文の閉じ括弧がないようです。 また、dopost()が二つあるので、そちらを修正して見てください!
kinakosonsi

2019/06/09 14:09

色々試してみましたが、無理みたいです。 ifとdopostについては直しました
fumito_94

2019/06/09 14:51

こちらどうしても括弧の数が合わないのですが、一度エディタ(atom, sublime, visual studio)で書いてみて、それをGASに写してみてはいかがでしょうか? また、getWikipediaUrlAndBody()でelse文があるため、それ以降の処理に進めていないように見えます。 return nullをしてしまっていると、それ以降の処理ができないので、Lineに返信できていないと思います。 一度上の関数の処理を確認の上、postDataに代入するところまで処理が進んでいるかどうかをご確認ください。
kinakosonsi

2019/06/10 06:01

やってみます。ありがとうございました
guest

0

javascript

1const CHANNEL_ACCESS_TOKEN = "アクセストークン"; 2const simple_wikipedia_api = 'http://wikipedia.simpleapi.net/api'; 3// function doPost(e) { 4// e.postData.contents.events.filter(function (e) { return e.type === "message";}).forEach(function (e) { 5// reply_message(e); 6// }); 7// } 8function doPost(e) { 9 const reply_token= e.postData.contents.events[0].replyToken; 10 if (typeof reply_token === 'undefined') { 11 return "invalid token"; 12 } 13 const user_message = e.postData.contents.events[0].message.text; 14 var reply_messages = ['wikiに登録されてないよ!!(´;ω;`)']; 15 if (/とは??$/.test(user_message)) { 16 const q = user_message.match(/(.*)とは??$/)[1]; 17 const url_and_body = getWikipediaUrlAndBody(q); 18 if (url_and_body !== null) { 19 reply_messages = [ 20 '「' + q + '」' + 'について調べるよ!!', 21 url_and_body.body.substr(0, 140) + '...', 22 '長いからこの先は下記からどうぞ(˘ω˘)', 23 url_and_body.url, 24 ]; 25 } 26 } else if (user_message == "/help") { 27 reply_messages = ["こちらはhelpです。使い方の説明をします。『調べたい単語+とは』と送信してください。"]; 28 } else { 29 reply_messages = ["おはようございます", "type /help plz"]; 30 } 31 32 const messages = reply_messages.map(function (v) { 33 return {'type': 'text', 'text': v}; 34 }); 35 36 UrlFetchApp.fetch("https://api.line.me/v2/bot/message/reply", { 37 'headers': { 38 'Content-Type': 'application/json; charset=UTF-8', 39 'Authorization': 'Bearer ' + CHANNEL_ACCESS_TOKEN, 40 }, 41 'method': 'post', 42 'payload': JSON.stringify({ 43 'replyToken': reply_token, 44 'messages': messages, 45 }), 46 }); 47 return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON); 48} 49function getWikipediaUrlAndBody(q) { 50 const url = simple_wikipedia_api + '?keyword=' + encodeURIComponent(q) + '&output=json'; 51 const res = JSON.parse(UrlFetchApp.fetch(url).getContentText()); 52 if (res !== null) { 53 return {'url': res[0].url,'body': res[0].body}; 54 } else { 55 return null; 56 } 57}

投稿2019/06/19 13:42

papinianus

総合スコア12705

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

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

kinakosonsi

2019/06/20 14:56

ご回答ありがとうございます。GASでアクセストークンをいれ実行してみたところ、【Error:simple wikipediaapiの再宣言】と表示されていました。
papinianus

2019/06/20 22:01

私の書いたものだけなら発生しないので、現状どうなっているか、他のファイルも含めた全部がわからないと回答できないです
kinakosonsi

2019/06/21 08:42

試しましたが そちらのコードをそのままGASに入れても発生しますよ
papinianus

2019/06/21 08:52

グローバル部分にconstをおいたことないんでわからないのですが、もしダメだとしてもアクセストークンのほうが先に書いてあるのでそっちでエラーになるはずなんですよね。 そのエラーがこのコードだけで発生することについては否定的です。 ただ試す気もないので、わたしがかいたうちconstとかいているところを全部varにかえてください。そうすりゃそのエラーだけは回避できます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問