Slack: Upload File (Bots)
Uploads files to Slack with Bots.
Configs: Common
  • Step Name
  • Note
Configs
  • C1-deprecated: Slack Bot Token
  • C1: OAuth2 Setting *
  • C2: Slack Channel Name *
  • C3: Data item whose attached files will be uploaded (File) *
Script (click to open)

main();
function main() {
  const token = configs.get("Token");
  const oauth2 = configs.get("conf_OAuth2");
  const channel = configs.get("ChannelName");
  const filesDef = configs.getObject("File");
//check whether files exist or not


  const files = engine.findData( filesDef );
  if (files === null){
    engine.log ("No File to upload");
    return;
  }
  //check whether number of files is under the limit
  const numOfFiles = files.length;
  if (numOfFiles > httpClient.getRequestingLimit()){
    throw "Number of Files is over the limit.";
  }
  for (let i = 0; i < numOfFiles; i++){
    upload(token,oauth2,files[i],channel);
  }
}
/**
  * Upload File
  * @param {String} oauth2
  * @param {String} token 
  * @param {QfileView} file
  * @param {String} channel
  */  
function upload (token,oauth2,file,channel){ 
  let request = httpClient.begin()
  if (oauth2 !== "" && oauth2 !== null || token === "" || token === null){
    request = request.authSetting(oauth2);
  }else{
    request = request.bearer(token);
  } 
  request = request.multipart('file',file);
  request = request.multipart('channels',channel);  
  const response = request.post("https://slack.com/api/files.upload"); 
  const status = response.getStatusCode();
  const responseTxt = response.getResponseAsString();

  let responseJson;
  try {
    responseJson = JSON.parse(responseTxt);
  } catch(e) {
    engine.log("failed to parse as json");
    engine.log(`status: ${status}`);
    engine.log(responseTxt);
    throw `Failed to upload. status: ${status}`;
  }
  if (responseJson.ok !== true) {
    const filename = file.getName();
    const error = `Failed to upload\n filename: ${filename}`;
    engine.log(`status: ${status}`);
    engine.log(responseTxt);
    throw error;
  }

}

Notes

  • If you specify more than one channel to upload to, the channel names must be separated by commas.
  • If C1-deprecated: Slack Bot token is set, set C1: OAuth2.

Capture

See also

Appendix

  • slack-file-upload-bots.xml (C) Questetra, Inc. (MIT License)
    • If you are using Professional, you can modify the contents of this file and use it as your own add-on
%d bloggers like this: