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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Google Apps Script

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

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

JavaScript

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

Slack

Slackは、Tiny Speckという企業からリリースされたコミュニケーションツールです。GoogleDriveやGitHubなど、さまざまな外部サービスと連携することができます。

Q&A

解決済

2回答

8362閲覧

Slack Slash Commandのタイムアウトの対応策について

yosiaking

総合スコア10

Google Apps Script

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

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

JavaScript

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

Slack

Slackは、Tiny Speckという企業からリリースされたコミュニケーションツールです。GoogleDriveやGitHubなど、さまざまな外部サービスと連携することができます。

0グッド

1クリップ

投稿2016/02/09 16:44

初めて質問をさせていただきます。
プログラミング初心者のため、ヘンテコな内容となっておりましたら申し訳ございません。。


■現在のステイタス
現在、
①SlackのSlashCommandを使ってリクエストを送り、
②GoogleAppsScriptコマンドでGoogleSpreadSheetから値を取得し、
③レスポンスされた値をSlack上に表示する
というシステムを作っております。


■問題
③でレスポンスが返ってくるまでの時間が3000msを超えて、以下のようなタイムアウトエラーが出てしまいます。(※Slackでは、レスポンスまでに3000msを超えるとタイムアウトが起こるそうです)

解決策としてはStack Overflowにそれらしいものがあったのですが…。

How to avoid slack command timeout error?

http://stackoverflow.com/questions/34896954/how-to-avoid-slack-command-timeout-error

こちら、頑張って訳しながら読んだのですが、内容がいまひとつ理解できず…どなたか解説をいただけませんでしょうか…?また、他にも良さそうな解決策がございましたら、ご指導をいただけますと幸いです。


■参考
参考までに、現在作っているWebアプリの概要を下記いたします。
(タイムアウトエラーがでなければ、問題なく機能することは確認済みです)

Javascript

1function doPost(e){ 2 var sheet = SpreadsheetApp.openById('スプレッドシートのID').getSheetByName('対象のシート'); 3 4 5 6 //①入力された案件IDの行を取得する関数 7 function seachRow(){ 8 var rowCount = 2; 9 10 for(var i=2;i<=sheet.getLastRow();i++){ 11 if(sheet.getRange(i,1).getValue() == e.parameter['text']){ 12 var resultRow = sheet.getRange(i,1).getValue(); 13 break; 14 }else{ 15 rowCount += 1; 16 } 17 18 } 19 20 return rowCount; 21 } 22 23 //②行を格納 24 var row = seachRow(); 25 26 //③で格納した行のカラムA取得 27 var A = sheet.getRange(row,3).getValue(); 28 29 //③で格納した行のカラムB取得 30 var B = sheet.getRange(row,4).getValue(); 31 32 //③で格納した行のカラムC取得 33 var C = sheet.getRange(row,7).getValue(); 34 35 //③で格納した行のカラムC取得 36 var D = sheet.getRange(row,8).getValue(); 37 38 //Return 39 return ContentService.createTextOutput(A+B+C+D); 40 41}

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

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

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

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

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

guest

回答2

0

ベストアンサー

タイムアウトへの対応策ということではないのですが、GASではAPIを呼ぶときのコストが大きいのでデータはまとめて取得したほうが速いです。

GASでSpreadsheetを操作する自分的ベストプラクティス

投稿2016/02/09 23:35

nobuhito

総合スコア146

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

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

yosiaking

2016/02/10 01:06

ありがとうございます。参考にさせていただきます!
yosiaking

2016/02/10 05:12

データをまとめて取得するようにしたところ、3000ms以内でレスポンスが返ってくるようになりました!!今後も、他のAPIを叩くときの参考にさせていただきます。ありがとうございました。 追記 3000msというのはslackのデフォルト値でしたので、APIの設定から編集できるようです。 https://api.slack.com/slash-commands
guest

0

3000msというのはslackのデフォルト値でしたので、APIの設定から編集できるようです。
https://api.slack.com/slash-commands

投稿2016/02/10 06:58

yosiaking

総合スコア10

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問