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

대안으로, files.getUploadURLExternal 과 files.completeUploadExternal 함수를 사용하라고 하는데,
코드 예시가 많이 없어 불편해서 글을 작성하게 되었습니다.
과정은 대략 이렇습니다.
- 파일 업로드할 url 가져오기
- 1번에서 받은 url로 파일 올리기
- 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 슬랙 전송
- params에 files, channel_id 전송
- files : [{ id : fileId , title : fileName }]
- channel_id 아는 법
-
- 슬랙 메세지를 우 클릭 해서 링크를 복사한다.
- 링크를 브라우저에 붙여넣고, 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, }, }); }
- params에 files, channel_id 전송
- Response
- 파일이 슬랙으로 전송된다.
728x90
'개발 아카이브' 카테고리의 다른 글
Grafana LGTM 톺아보기 (1) - Loki 란? (5) | 2025.01.19 |
---|---|
당근 채팅 시스템은 어떻게 만들까? (5) | 2024.12.08 |
Node.js 에서 Cpu intensive한 코드 찾아내는 법 강연 정리 (3) | 2024.10.27 |
쿠버네티스란? feat. 데이터 처리도 이제는 컨테이너로, 우아한형제들의 데이터플랫폼 혁신 (5) | 2024.10.13 |
[Deview] - 일본에서도 VOD 를 빠르게 업로드하고 재생할 순 없을까 정리 및 후기 (7) | 2024.09.29 |