개발 아카이브

slack 파일 업로드, completeUploadExternal(),getUploadURLExternal() 사용법

딤섬뮨 2024. 11. 19. 17:06
728x90

슬랙에 파일을 보내기 위해 대부분 사용하고 있던 files.upload()함수가 2025년 3월 11일에 종료됩니다.

대안으로, files.getUploadURLExternal 과 files.completeUploadExternal 함수를 사용하라고 하는데,

코드 예시가 많이 없어 불편해서 글을 작성하게 되었습니다.

과정은 대략 이렇습니다.

 

  1. 파일 업로드할 url 가져오기
  2. 1번에서 받은 url로 파일 올리기
  3. 1번에서 받은 파일 아이디로 슬랙 전송하기

파일 업로드할 URL 가져오기

  • Request
    • params 에 filename(파일이름), fileLength(파일길이) 추가
return await instance({
    method: 'post',
    url: '<https://slack.com/api/files.getUploadURLExternal>',
    headers: {
      Authorization: process.env.SLACK_APP_TOKEN,
    },
    params: {
      filename: fileName,
      length: fileLength,
    },
  });
}
  • Response
{
    "ok": true,
    "upload_url": "<https://files.slack.com/upload/v1/ABC123>...",
    "file_id": "F123ABC456"
}

 

 

파일 업로드

  • Request
    • 1번에서 받은 URL(upload_url)로 파일 포함하여 업로드 요청
async function uploadFile(url, formData) {
  return await axios.post(url, formData, {
    headers: {
      Authorization: process.env.SLACK_APP_TOKEN,
    },
  });
}
  • Response
    • 상태코드 200

슬랙으로 파일 전송

  • Request - files.completeUploadExternal 슬랙 전송
    1. params에 files, channel_id 전송
      1. files : [{ id : fileId , title : fileName }]
      2. channel_id 아는 법
        1. 슬랙 메세지를 우 클릭 해서 링크를 복사한다.
        2. 링크를 브라우저에 붙여넣고, archives 다음 나오는 url이 channel_id다.
    async function sendSlack(fileId, fileName) {
      const instance = axios.create();
    
      return await instance({
        method: 'post',
        url: '<https://slack.com/api/files.completeUploadExternal>',
        headers: {
          Authorization: process.env.SLACK_APP_TOKEN,
        },
        params: {
          files: JSON.stringify([{ id: fileId, title: fileName }]),
          channel_id: process.env.CHANNEL_ID,
        },
      });
    }
    
  • Response
    • 파일이 슬랙으로 전송된다.
  •  
728x90