Slack bot을 만들어서 Slack 채널의 소식을 한 채널에 집중시킬 수 있습니다.
11138 단어 Google Apps ScriptSlackGAStech
슬랙의 지보가 회사 내 트위터에!여러분의 분류를 한 채널로 모으는 슬랙봇을 만들어 봤습니다.
의 표절은 GAS판 투고일 뿐이다.
생성물
집합하고 싶지 않은 채널에서 무시할 수 있는 옵션을 만들었습니다.
GAS이기 때문에 사용 횟수 제한이 있으니 주의해야 한다.
https://developers.google.com/apps-script/guides/services/quotas
2021/04/20시
Feature
Consumer (e.g., gmail.com) and G Suite free edition(legacy)
Google Workspace accounts
Triggers total runtime
90 min/day
6 hr/day
URL Fetch calls
20,000/day
100,000/day
이런 내용이 기재돼 있기 때문에 GAS가 아닌 규모감에 따라 구현하는 방식이 좋다.
Trigger는 Spreadsheet에 Slack 정보를 캐시하는 데 사용
URL Fetch는 슬랙에서 정보를 재생하기 위해 사용되며, 상기 상한선이 엄격하다고 생각되면 이 기사를 참고하지 않는 것이 좋다.
설정
Slack 프로그램의 scope 설정
https://api.slack.com/apps에서 애플리케이션 생성
OAuth &Permissions 화면에서 Bot User에 아래의 scope를 추가합니다.
설정이 완료되면 OAuth & Permissions 화면 상단의 Bot User OAuth Token 값을 복제합니다.
GAS 프로젝트 만들기
다음 명령에 따라 소스를 가져오시오.
git clone https://github.com/igara/bot_slack_matome_channnel.git
cd bot_slack_matome_channnel
환경 변수에 적응한다.cp .env.sample.ts .env.ts
export default {
// Slackのチーム名
SLACK_TEAM: "hoge",
// OAuth & Permissionsのページに記載されてたBot User OAuth Token
SLACK_ACCESS_TOKEN: "xoxb-xxxxx-xxxxx-xxxxx",
// メッセージを送りたい対象のチャンネル名
BOT_SLACK_MATOME_CHANNEL_NAME: "bot_slack_matome_channnel",
// 集約したい対象のチャンネル名の正規表現 下記は分報チャンネル想定
TARGET_CHANNEL_REGEXES: [/^t_\S*/, /^time_\S*/],
// TARGET_CHANNEL_REGEXESの中から除外したいチャンネルの正規表現
IGNORE_TARGET_CHANNEL_REGEXES: [/^t_ignore_\S*/, /^time_ignore_\S*/],
};
다음 명령에 따라 Spreadsheet & GAS 만들기npm install
# login
npx clasp login
# new create spreadsheet & script project & .clasp.json
npm run new name=hoge
# build
npm run build
# push
npx clasp push
위의 작업을 수행하면 Spreadsheet이 만들어지고 스크립트 편집을 열면 GAS가 추가됩니다.Spreadsheet에서 Slack 정보 읽기
스크립트 편집기에서 다음 함수를 실행하여 Spreadsheet에서 Slack 정보를 유지합니다.
create_sheets.ts.gs의createSheets를 실행하여 필요한 작업표를 작성합니다
get_channels.ts.gs의 getChannels를 실행하고 워크시트에 채널 정보를 남기기
get_users.ts.gs의 getUsers를 실행하고 작업표에 사용자의 정보를 남기기
Google Cloud Console과 직접 만든 Clape이 로그인하면
npx clasp run createSheets
npx clasp run getChannels
npx clasp run getUsers
명령을 사용하여 수행할 수 있습니다.이 시점의 Google 애플리케이션의 범위 설정은 이쪽에서 해야 합니다.
웹 응용 프로그램 공개
스크립트 편집기 메뉴에서 공개 -> 웹 프로그램으로 가져온 후 업데이트 실행
공개된 웹 응용 프로그램의 URL을 복사합니다.
Slack의 Event Subscriptions에 로그인
Request URL에 공개된 GAS의 웹 응용 프로그램 URL을 붙여 Verified가 표시되는지 확인합니다.
확인 후 Subscribe to bot events 항목
이상 설정이 완료되었습니다.
Slack을 통해 대상 채널을 만들고 정보를 발표합니다.bot의 정보를 보내면 성공합니다.
소스 코드 설명
src/tasks/create_clasp_json.ts
맞춤형https://github.com/google/clasp#create
Spreadsheet과 스크립트 편집자의 이름을 같이 넣고 싶어서 만든 거예요.
src/gas/create_sheets.ts
GAS용 함수
GAS를 통한 워크시트 작성
Spreadshhet.deleteSheet(Spreadshhet.getSheetByName("channels"));
const channelsSheetColumnNames = ["id", "name"];
const ChannelsSheet = Spreadshhet.insertSheet("channels");
ChannelsSheet.getRange(1, 1, 1, channelsSheetColumnNames.length).setValues([channelsSheetColumnNames]);
의 삭제 후 워크시트 다시 만들기과거 Google API를 통해 CSV를 기반으로 워크시트를 제작한
로컬 PC에서 실행하는 것보다 이번에는 GAS 환경에서 실행하고 싶습니다.
src/gas/do_post.ts
Slack의 Event Subscriptions를 통해 메시지를 요청하고 처리하는 GAS의 함수
이번에 설정한 Event Subscriptions는 메시지의 업데이트 시스템도 밀렸기 때문에 제외하기 위해 다음과 같이 썼습니다.
필요에 따라 제외된 것들을 활용해보는 것도 좋을 것 같아요.
또한 GAS의 활용 범위
src/gas/get_channels.ts
GAS용 함수
모든 채널을 보려면 Slack API 를 클릭하십시오.
스크립트 편집기에서 정기적으로 실행되는 트리거를 설정할 수 있기 때문에 이 함수를 시간적으로 실행하는 것이 좋습니다
트리거 설정도 인코딩하고 싶으면 아래 코드를 참고해도 될까요?안해봤어요.
src/gas/get_users.ts
GAS용 함수
모든 사용자를 보려면 Slack API를 클릭하십시오.
src/utils/tasks/clasp_json.ts
JSON 파일이라도 유형을 정의하고 싶은 생각이 강해서 ts 파일을 통해 읽을 예정입니다.
src/utils/tasks/clasprc_json.ts
JSON 파일이라도 유형을 정의하고 싶은 생각이 강해서 ts 파일을 통해 읽을 예정입니다.
src/utils/tasks/google.ts
Google API 클라이언트 처리
Reference
이 문제에 관하여(Slack bot을 만들어서 Slack 채널의 소식을 한 채널에 집중시킬 수 있습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/igara/articles/bot_slack_matome_channnel텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)