【Slack】 지정한 채널에 키워드를 포함한 게시물이있을 때 다른 채널에 알림을 던지고 싶습니다.
거기서 커뮤니티의 운영측에 질문등이 있을 때, 곧바로 반응할 수 없는 것은 기회 손실일까라고 생각합니다.
Slack 기능을 사용하면 특정 키워드가 포함된 문장을 게시하면 미리 설정한 문장을 반환하는 bot를 설정으로 쉽게 만들 수 있습니다. 운영측에 통지를 던지고 싶다!」라고 하는 요망의 경우는, 해결할 수 없습니다.
또한 Slack 앱 중 하나인 Outgoing webhook은 키워드가 문장의 시작 부분에 없으면 이벤트가 발화하지 않기 때문에 이 요구 사항에도 맞지 않습니다.
그래서, 이 기능을 간단하게 만들어 보았습니다.
구성
예를 들어 SlackApi와 GAS의 조합으로 구현합니다.
다만 이번에는 Outgoing Webhook을 사용하지 않으므로 SlackApi를 맞춤설정하여 게시물을 데리러 GAS에서 채널과 키워드를 확인, 확인 후 모든 채널에 Incoming Webhook에서 알림을 떨어뜨립니다.
SlackApi 설정
htps : // 아피. scck. 이 m/아 ps에서 설정합니다.
SlackApi의 설정 주위는 여기 를 참고로 했습니다.
자세한 내용은 위를 참조하십시오.
SlackApi 관리 화면의 Event Subscriptions에서 GAS API URL을 등록하고 API를 두드리는 이벤트를 설정합니다.
요청 URL에 GAS의 API URL을 입력하지만 등록시 Slack 측에서 Challenge라는 매개 변수가 게시되고 반환하지 않으면 유효한 URL로 승인되지 않으므로 GAS는 다음과 같은 코드를 등록합니다. 합니다.
function doPost(e){
var params = JSON.parse(e.postData.getDataAsString());
return ContentService.createTextOutput(params.challenge);
}
등록이 완료되면, 같은 페이지의 Subscribe to events on behalf of users 항목에서 message.channels 이벤트를 추가합니다.
이 작업이 완료되면 모든 작업 공간에 이 SlackApi를 설치합니다.
GAS 설정
Slack에서 오는 post 파라미터는 다음과 같은 느낌입니다.
{
"token":"xxxxxxxxxxxxxxxxxxxxxxxx",
"team_id":"xxxxxxxxxxx",
"api_app_id":"xxxxxxxxxxx",
"event":{
"type":"message",
"subtype":"bot_enable",
"text":"投稿したテキスト",
"user":"xxxxxxxxxxx",
"bot_id":"xxxxxxxxxxx",
"bot_link":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"ts":"xxxxxxxxxx.xxxxxx",
"channel":"xxxxxxxxxxx",
"event_ts":"xxxxxxxxxx.xxxxxx",
"channel_type":"channel"
},
"type":"event_callback",
"event_id":"xxxxxxxxxxxx",
"event_time":xxxxxxxxxx,
"authorizations":[
{
"enterprise_id":null,
"team_id":"xxxxxxxxxxx",
"user_id":"xxxxxxxxxxx",
"is_bot":false,
"is_enterprise_install":false
}
],
"is_ext_shared_channel":false,
"event_context":"1-message-xxxxxxxxxxx-xxxxxxxxxxx"
}
그래서 다음과 같이 GAS를 씁니다.
var postUrl = 'Incoming WebhookのURL';
function doPost(e) {
var params = JSON.parse(e.postData.getDataAsString());
// キーワードを正規表現で抜き出し
var stoString = params.event.text.match(/キーワード/i)[0];
var correctChennelId = 'チャンネルIDを入力'
if (params.event.channel == correctChennelId && stoString) {
var jsonData =
{
"text" : 'キーワードの入った投稿があったよ!'
};
var payload = JSON.stringify(jsonData);
var options =
{
"method" : "post",
"contentType" : "application/json",
"payload" : payload
};
UrlFetchApp.fetch(postUrl, options);
}
}
위의 코드로 API를 게시합니다.
채널 ID는 슬랙의 모든 채널에서 오른쪽 클릭 > 링크를 복사하여 얻을 수 있습니다.
https://ワークスペース名.slack.com/archives/チャンネルID
GAS의 API 게시 방법은 여기을 참조하십시오.
Incoming Webhook 설정
GAS와 Incoming Webhook의 제휴 기사는 메짜크처이므로, 꼭 그쪽을 참조해 보세요.
(예 : 이런 기사)
Incoming Webhook에서 게시된 URL을 GAS로 설정하고 API를 다시 게시하면 완료됩니다.
동작 확인 · 문제점
채널 ID를 설정한 채널로 키워드를 포함한 게시물을 하고, Incoming Webhook의 대상 채널에 알림이 떨어지면 완성됩니다.
문제점으로서는, 현재 GAS의 API가 Workspace 부하의 채널에서의 투고 모두에 반응해 버려, GAS측에서 채널 ID로부터 조건 분기를 하고 있으므로, 아무래도 GAS의 실행 횟수가 증가해 버립니다.
적어도 채널만으로도 SlackApi 측에서 지정할 수 없을까라고 시행착오중입니다.
지식이 있으시면 알려주세요 m (_ _) m
20201229 추가
일부러 Imcoming Webhook 앱을 넣지 않아도 SlackApi의 Imcoming Webhook 기능 사용하면 할 수 있습니다.
Reference
이 문제에 관하여(【Slack】 지정한 채널에 키워드를 포함한 게시물이있을 때 다른 채널에 알림을 던지고 싶습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/10inoino/items/fd8faa707b660769576e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
htps : // 아피. scck. 이 m/아 ps에서 설정합니다.
SlackApi의 설정 주위는 여기 를 참고로 했습니다.
자세한 내용은 위를 참조하십시오.
SlackApi 관리 화면의 Event Subscriptions에서 GAS API URL을 등록하고 API를 두드리는 이벤트를 설정합니다.
요청 URL에 GAS의 API URL을 입력하지만 등록시 Slack 측에서 Challenge라는 매개 변수가 게시되고 반환하지 않으면 유효한 URL로 승인되지 않으므로 GAS는 다음과 같은 코드를 등록합니다. 합니다.
function doPost(e){
var params = JSON.parse(e.postData.getDataAsString());
return ContentService.createTextOutput(params.challenge);
}
등록이 완료되면, 같은 페이지의 Subscribe to events on behalf of users 항목에서 message.channels 이벤트를 추가합니다.
이 작업이 완료되면 모든 작업 공간에 이 SlackApi를 설치합니다.
GAS 설정
Slack에서 오는 post 파라미터는 다음과 같은 느낌입니다.
{
"token":"xxxxxxxxxxxxxxxxxxxxxxxx",
"team_id":"xxxxxxxxxxx",
"api_app_id":"xxxxxxxxxxx",
"event":{
"type":"message",
"subtype":"bot_enable",
"text":"投稿したテキスト",
"user":"xxxxxxxxxxx",
"bot_id":"xxxxxxxxxxx",
"bot_link":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"ts":"xxxxxxxxxx.xxxxxx",
"channel":"xxxxxxxxxxx",
"event_ts":"xxxxxxxxxx.xxxxxx",
"channel_type":"channel"
},
"type":"event_callback",
"event_id":"xxxxxxxxxxxx",
"event_time":xxxxxxxxxx,
"authorizations":[
{
"enterprise_id":null,
"team_id":"xxxxxxxxxxx",
"user_id":"xxxxxxxxxxx",
"is_bot":false,
"is_enterprise_install":false
}
],
"is_ext_shared_channel":false,
"event_context":"1-message-xxxxxxxxxxx-xxxxxxxxxxx"
}
그래서 다음과 같이 GAS를 씁니다.
var postUrl = 'Incoming WebhookのURL';
function doPost(e) {
var params = JSON.parse(e.postData.getDataAsString());
// キーワードを正規表現で抜き出し
var stoString = params.event.text.match(/キーワード/i)[0];
var correctChennelId = 'チャンネルIDを入力'
if (params.event.channel == correctChennelId && stoString) {
var jsonData =
{
"text" : 'キーワードの入った投稿があったよ!'
};
var payload = JSON.stringify(jsonData);
var options =
{
"method" : "post",
"contentType" : "application/json",
"payload" : payload
};
UrlFetchApp.fetch(postUrl, options);
}
}
위의 코드로 API를 게시합니다.
채널 ID는 슬랙의 모든 채널에서 오른쪽 클릭 > 링크를 복사하여 얻을 수 있습니다.
https://ワークスペース名.slack.com/archives/チャンネルID
GAS의 API 게시 방법은 여기을 참조하십시오.
Incoming Webhook 설정
GAS와 Incoming Webhook의 제휴 기사는 메짜크처이므로, 꼭 그쪽을 참조해 보세요.
(예 : 이런 기사)
Incoming Webhook에서 게시된 URL을 GAS로 설정하고 API를 다시 게시하면 완료됩니다.
동작 확인 · 문제점
채널 ID를 설정한 채널로 키워드를 포함한 게시물을 하고, Incoming Webhook의 대상 채널에 알림이 떨어지면 완성됩니다.
문제점으로서는, 현재 GAS의 API가 Workspace 부하의 채널에서의 투고 모두에 반응해 버려, GAS측에서 채널 ID로부터 조건 분기를 하고 있으므로, 아무래도 GAS의 실행 횟수가 증가해 버립니다.
적어도 채널만으로도 SlackApi 측에서 지정할 수 없을까라고 시행착오중입니다.
지식이 있으시면 알려주세요 m (_ _) m
20201229 추가
일부러 Imcoming Webhook 앱을 넣지 않아도 SlackApi의 Imcoming Webhook 기능 사용하면 할 수 있습니다.
Reference
이 문제에 관하여(【Slack】 지정한 채널에 키워드를 포함한 게시물이있을 때 다른 채널에 알림을 던지고 싶습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/10inoino/items/fd8faa707b660769576e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
{
"token":"xxxxxxxxxxxxxxxxxxxxxxxx",
"team_id":"xxxxxxxxxxx",
"api_app_id":"xxxxxxxxxxx",
"event":{
"type":"message",
"subtype":"bot_enable",
"text":"投稿したテキスト",
"user":"xxxxxxxxxxx",
"bot_id":"xxxxxxxxxxx",
"bot_link":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"ts":"xxxxxxxxxx.xxxxxx",
"channel":"xxxxxxxxxxx",
"event_ts":"xxxxxxxxxx.xxxxxx",
"channel_type":"channel"
},
"type":"event_callback",
"event_id":"xxxxxxxxxxxx",
"event_time":xxxxxxxxxx,
"authorizations":[
{
"enterprise_id":null,
"team_id":"xxxxxxxxxxx",
"user_id":"xxxxxxxxxxx",
"is_bot":false,
"is_enterprise_install":false
}
],
"is_ext_shared_channel":false,
"event_context":"1-message-xxxxxxxxxxx-xxxxxxxxxxx"
}
var postUrl = 'Incoming WebhookのURL';
function doPost(e) {
var params = JSON.parse(e.postData.getDataAsString());
// キーワードを正規表現で抜き出し
var stoString = params.event.text.match(/キーワード/i)[0];
var correctChennelId = 'チャンネルIDを入力'
if (params.event.channel == correctChennelId && stoString) {
var jsonData =
{
"text" : 'キーワードの入った投稿があったよ!'
};
var payload = JSON.stringify(jsonData);
var options =
{
"method" : "post",
"contentType" : "application/json",
"payload" : payload
};
UrlFetchApp.fetch(postUrl, options);
}
}
https://ワークスペース名.slack.com/archives/チャンネルID
GAS와 Incoming Webhook의 제휴 기사는 메짜크처이므로, 꼭 그쪽을 참조해 보세요.
(예 : 이런 기사)
Incoming Webhook에서 게시된 URL을 GAS로 설정하고 API를 다시 게시하면 완료됩니다.
동작 확인 · 문제점
채널 ID를 설정한 채널로 키워드를 포함한 게시물을 하고, Incoming Webhook의 대상 채널에 알림이 떨어지면 완성됩니다.
문제점으로서는, 현재 GAS의 API가 Workspace 부하의 채널에서의 투고 모두에 반응해 버려, GAS측에서 채널 ID로부터 조건 분기를 하고 있으므로, 아무래도 GAS의 실행 횟수가 증가해 버립니다.
적어도 채널만으로도 SlackApi 측에서 지정할 수 없을까라고 시행착오중입니다.
지식이 있으시면 알려주세요 m (_ _) m
20201229 추가
일부러 Imcoming Webhook 앱을 넣지 않아도 SlackApi의 Imcoming Webhook 기능 사용하면 할 수 있습니다.
Reference
이 문제에 관하여(【Slack】 지정한 채널에 키워드를 포함한 게시물이있을 때 다른 채널에 알림을 던지고 싶습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/10inoino/items/fd8faa707b660769576e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
일부러 Imcoming Webhook 앱을 넣지 않아도 SlackApi의 Imcoming Webhook 기능 사용하면 할 수 있습니다.
Reference
이 문제에 관하여(【Slack】 지정한 채널에 키워드를 포함한 게시물이있을 때 다른 채널에 알림을 던지고 싶습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/10inoino/items/fd8faa707b660769576e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)