前提・実現したいこと
特定の電車の遅延情報を知らせるSlackBotを作っています。
オリジナルのスラッシュコマンド /traininfo_now
を作り、このスラッシュコマンドを入力した時に、電車の遅延情報を返すようにしたいと思っています。
以下のサイトを参考に作成しました。
SlackBotで電車の運行情報をスラッシュコマンドで通知してもらうhttps://qiita.com/yuina_i/items/617066e09426194bcd71
発生している問題・エラーメッセージ
/trainindfo_nowを入力するとbotは遅延情報を返してくれますが、その直後にエラーを返します。
コマンドを入力すると10:32の遅延状況を返しますが、直後にエラーも返ってきます。中身をよく読むと末尾に
The Script completed but did not return anything
と書いてあります
該当のソースコード
Java
1var slackAccessToken = PropertiesService.getScriptProperties().getProperty('slack APIで取得した Verification TOKEN'); 2 3function doPost(e) { 4var slackApp = SlackApp.create(slackAccessToken); 5// 対象チャンネル 6var channelId = "#train_info"; 7var options = { 8// 投稿するユーザーの名前 9username: "train_info", 10icon_emoji: ":train:", 11} 12 13 var currentDate = new Date(); 14 var weekday = currentDate.getDay(); 15 var date = Utilities.formatDate( currentDate, 'Asia/Tokyo', 'M月d日 HH時mm分'); 16 17 if (weekday == 0 || weekday == 6) { 18 return; 19 } 20 var calendar = CalendarApp.getCalendarById('ja.japanese#holiday@group.v.calendar.google.com'); 21 if (calendar.getEventsForDay(currentDate, {max: 1}).length > 0) { 22 return; 23 } 24 25 //soubu line info 26 var yahoodata = UrlFetchApp.fetch("https://transit.yahoo.co.jp/traininfo/detail/40/0/").getContentText(); 27 if(yahoodata.indexOf('現在、事故・遅延に関する情報はありません。') > -1){ 28 // match the word 29 postMessage("\n" + "◆総武線は平常運転です。\n",'slack APIで取得した Webhook Address'); 30 }else{ 31 //get error info 32 var yahoodatastart = yahoodata.indexOf('og:description" content="'); 33 //4 japanese word only 34 yahoodatastart += 25; 35 var yahoodataend = yahoodata.indexOf('の情報です。'); 36 var yahoodataoutput = yahoodata.substring(yahoodatastart, yahoodataend); 37 38 postMessage("\n" + "◆総武線 " + date + "\n" + yahoodataoutput + "\n",'slack APIで取得した Webhook Address'); 39 } 40 41 42 //tokyometro tozai line info 43 var yahoodata2 = UrlFetchApp.fetch("https://transit.yahoo.co.jp/traininfo/detail/135/0/").getContentText(); 44 if(yahoodata2.indexOf('現在、事故・遅延に関する情報はありません。') > -1){ 45 // match the word 46 postMessage("\n" + "◆東西線は平常運転です。\n",'slack APIで取得した Webhook Address'); 47 }else{ 48 //get error info 49 var yahoodatastart2 = yahoodata2.indexOf('og:description" content="'); 50 //4 japanese word only 51 yahoodatastart2 += 25; 52 var yahoodataend2 = yahoodata2.indexOf('の情報です。'); 53 var yahoodataoutput2 = yahoodata2.substring(yahoodatastart2, yahoodataend2); 54 55 postMessage("\n" + "◆東京メトロ東西線 " + date + yahoodataoutput2 + "\n",'slack APIで取得した Webhook Address'); 56 57 } 58 59 // JR Chuo line info 60 var yahoodata2 = UrlFetchApp.fetch("https://transit.yahoo.co.jp/traininfo/detail/38/0/").getContentText(); 61 if(yahoodata2.indexOf('現在、事故・遅延に関する情報はありません。') > -1){ 62 // match the word 63 postMessage("\n" + "◆JR中央線(快速)は平常運転です。\n",'slack APIで取得した Webhook Address') 64 }else{ 65 //get error info 66 var yahoodatastart2 = yahoodata2.indexOf('og:description" content="'); 67 //4 japanese word only 68 yahoodatastart2 += 25; 69 var yahoodataend2 = yahoodata2.indexOf('の情報です。'); 70 var yahoodataoutput2 = yahoodata2.substring(yahoodatastart2, yahoodataend2); 71 72 postMessage("\n" + "◆JR中央線(快速) " + date + yahoodataoutput2 + "\n",'slack APIで取得した Webhook Address'); 73 74 } 75 76 77} 78 79 80function postMessage(message, hookpoint){ 81 var payload = { 82 "text": message, 83 "channelId": '#train_info', 84 "userName": 'train_info', 85 "icon_emoji": ':train:' 86 } 87 var options = { 88 "method": "POST", 89 "payload": JSON.stringify(payload), 90 "headers": { 91 "Content-type": "application/json", 92 } 93 } 94 var response = UrlFetchApp.fetch('slack APIで取得した Webhook Address',options); 95 96 if (response.getResponseCode() == 200) { 97 return response; 98 } 99 return false; 100}
事の発端と考えてみたこと
もともと定時に電車の遅延を知らせるbotを作っていました。
※参考: https://teratail.com/questions/174195#
この後ネットの海をさまよっていたところ、スラッシュコマンド入力でbotに電車遅延を知らせることができるようになると知りました。
個人的には定時&任意の時に知りたい→任意の時に知りたいならスラッシュコマンド便利じゃん!となり、実装を決意しました。
最初、もともと実装していたコードをそのまま動かそうとしたのですが「doPostがないよ!」とエラーを返されました。そのため元々のコードにdoPost Functionを足し、またメッセージを返すWebhook URLもslack API側のWebhook URLに直しました。(元のコードでは、Incoming Webhookから取得したURLを利用しています)
自分がいじったコードがまずそう、というのはなんとなくわかるのですが、何をどう処理したらよいのか(そもそもコードの問題でもなくて、slackでbot生成した際の不具合なのか?)わからずにいます。
ご教示願えますと幸いです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/21 05:14
退会済みユーザー
2019/02/21 05:21
2019/02/21 05:33
2019/02/21 05:44
2019/02/21 05:51