2016-08-19 28 views
1

我在Slack中使用自定義斜槓命令通過Google Apps腳本將數據添加到Google文檔,但是,當腳本完成運行(成功)後,Google腳本將此發送到Slack,用戶將解釋爲錯誤:如何防止Google Apps腳本在處理自定義斜槓命令後將HTML返回至鬆弛狀態?

<DOCTYPE html><html><head><link rel="shortcut icon" href="//ssl.gstatic.com/docs/script/images/favicon.ico"><title>Error</title><style type="text/css">body {background-color: #fff; margin: 0; padding: 0;}.errorMessage {font-family: Arial,sans-serif; font-size: 12pt; font-weight: bold; line-height: 150%; padding-top: 25px;}</style></head><body><div><img src="//ssl.gstatic.com/docs/script/images/logo.png"></div><center>The script completed but did not return anything.</center></body></html> 

如何防止此消息被髮送到Slack?

function doPost(request) { 
    var sheets = SpreadsheetApp.openById('id-would-go-here'); 
    var params = request.parameters; 

    var nR = getNextRow(sheets) + 1; 

    if (params.token == "token-would-go-here") { 

    // FALL BACK TO DEFAULT TEXT IF NO ORDER PROVIDED 
    var order = params.text || "No Order Entered"; 
    var employee = params.user_name || "Name Error"; 

    // RECORD TIMESTAMP AND USER NAME IN SPREADSHEET 
    sheets.getRangeByName('date').getCell(nR,1).setValue(new Date()); 
    sheets.getRangeByName('employee').getCell(nR,1).setValue(employee); 

    // RECORD UPDATE INFORMATION INTO SPREADSHEET 
    sheets.getRangeByName('order').getCell(nR,1).setValue(order); 

    var channel = "lunch-orders"; 

    postResponse(channel,order,employee); 

    var eph_url = params.response_url; 
    var eph_response = UrlFetchApp.fetch(eph_url,200); 

    } else { 
    return; 
    } 
} 

function postResponse(channel, order, employee) { 

    var payload = { 
    "channel": "#lunch-orders", 
    "username": "Lunch Order", 
    "link_names": 1, 
    "attachments":[ 
     { 
      "fallback": "A lunch order was placed, but the display here is a little messed up. Check the Google Doc to view the order.", 
      "mrkdwn_in": ["pretext"], 
      "color": "good", 
      "fields":[ 
      { 
       "title":"" + employee + "'s Lunch Order", 
       "value": "" + order + "", 
       "short":false 
      } 
      ] 
     } 
    ] 
    }; 

    var url = 'incoming-webhook-url-goes-here'; 
    var options = { 
    'method': 'post', 
    'payload': JSON.stringify(payload) 
    }; 

    var response = UrlFetchApp.fetch(url,options); 
} 

回答

2

您的設置有點偏離。您不會將數據發回,而是使用ContentService返回。現在一個小問題是,你必須運行webapp作爲匿名認證。我所做的就是將閒置標記保存在腳本屬性服務中,並確保請求的Slack應用程序的標記匹配。

下面是一個簡單的webhook示例,它將傳遞給switch命令的參數寫入電子表格。

function doPost(e) { 
    var returnMessage; 
    var slackToken = PropertiesService.getScriptProperties().getProperty("SlackToken") ; 
    var postData = parseParams(e.postData.getDataAsString()); 
    if(postData.token === slackToken){ 
    SpreadsheetApp.openById('.....').getSheetByName("Log").appendRow([postData]); 
    returnMessage = "Your record has been logged." 
    }else{ 
    returnMessage = "Invalid Token" 
    } 

    return ContentService.createTextOutput(JSON.stringify({text:returnMessage})).setMimeType(ContentService.MimeType.JSON); 
} 

function parseParams(postData){ 
    var postObj = {} 
    postData.split("&").map(function(param){var thisParam = param.split("="); postObj[thisParam[0]] = thisParam[1]}); 
    return postObj; 
} 
相關問題