Slack Next-gen Platform – Scheduled Triggers

This is translation of  Slack Next-gen Platform – Scheduled Triggers written by Kaz (SDK Engineering & DevRel at Slack), I do not include any personal opinion here except guessing when meaning of original text is not clear for me)

이 글은 슬랙의 SDK Engineering / DevRel 인 Kaz 의 글을 번역한것입니다. 저의 개인 의견은 들어가지 않으며, 일부 원문의 의미가 애매한 경우에만 부연 설명을 달았습니다.


이번 튜토리얼에서는 트리거를 스케쥴하여 워크플로를 실행하는 방법에 대해서 배워보겠습니다.

Prerequisites

차세대 플랫폼을 접하는 것이 처음이시라면, 이전의 튜토리얼인 “The Simplest Hello World” 부터 읽어주세요. 요약하면 유료 Slack 워크스페이스와 해당 워크스페이스에서 “beta feature” 를 사용할 수 있는 권한이 필요합니다. 가지고 계시다면 Slack CLI 와 워크스페이스를 연결하기만 하면 됩니다.

준비되었다면 앱을 한번 만들어보도록 하죠. 시작해보겠습니다.

Create a Blank Project

slack create 명령어를 사용하여, 새로운 프로젝트를 시작할 수 있습니다. 이 튜토리얼에서는 아무것도 없는 상태에서 앱을 만들어보겠습니다. “Blank Project” 를 선택하여 주십시요.

$ slack create
? Select a template to build from:

  Hello World
  A simple workflow that sends a greeting

  Scaffolded project
  A solid foundational project that uses a Slack datastore

> Blank project
  A, well.. blank project

  To see all available samples, visit github.com/slack-samples.

프로젝트가 생성되면, slack run 명령어가 정상적으로 동작하는지 확인해보세요. 이 명령어는 “dev” 버전의 앱을 워크스페이스에 설치합니다. 이 앱의 봇 유저가 생성되고, 이 봇은 API 호출을 위한 봇 토큰 값을 가지고 있습니다.

$ cd affectionate-panther-654
$ slack run
? Choose a workspace  seratch  T03E94MJU
   App is not installed to this workspace

Updating dev app install for workspace "Acme Corp"

  Outgoing domains
   No allowed outgoing domains are configured
   If your function makes network requests, you will need to allow the outgoing domains
   Learn more about upcoming changes to outgoing domains: https://api.slack.com/future/changelog
  seratch of Acme Corp
Connected, awaiting events

Connected, awaiting events 로그 메세지를 보신다면, 이 앱이 성공적으로 워크스페이스에 연결된 것입니다. “Ctrl +C” 를 눌러 로컬 앱 프로세스를 종료합니다.

Define Workflow and Trigger

스케쥴 트리거는 워크플로를 주기적으로 실행하게 됩니다. 지원하는 인터벌 간격은 현시점 기준으로는 “한번”, “매시간”, “매일”, “매주”, “매월”, “매년” 입니다.

워크플로와 트리거 생성 후 30초뒤에 해당 워크플로를 실행하는 트리거를 정의 해보도록 하겠습니다.

import { DefineWorkflow } from "deno-slack-sdk/mod.ts";

export const workflow = DefineWorkflow({
  callback_id: "scheduled-trigger-demo-workflow",
  title: "Scheduled Trigger Demo Workflow",
  input_parameters: { properties: {}, required: [] },
});

import { Trigger } from "deno-slack-api/types.ts";
const trigger: Trigger<typeof workflow.definition> = {
  type: "scheduled",
  name: "Trigger a workflow",
  workflow: `#/workflows/${workflow.definition.callback_id}`,
  inputs: {},
  schedule: {
    // This start_time means 30 seconds after you run
    // `slack triggers create` command
    start_time: new Date(new Date().getTime() + 30_000).toISOString(),
    // This can be invoked only once
    frequency: { type: "once" },
  },
};
export default trigger;

그리고 워크플로를 manifest.ts 에 추가합니다.

import { Manifest } from "deno-slack-sdk/mod.ts";
// Add this
import { workflow as DemoWorkflow } from "./workflow_and_trigger.ts";

export default Manifest({
  name: "objective-fox-22",
  description: "Scheduled Trigger Example",
  icon: "assets/default_new_app_icon.png",
  workflows: [DemoWorkflow], // Add this
  botScopes: ["commands"],
});

다음으로 두개의 윈도우 터미널을 열어주세요. 하나는 slack run 을 실행하고, 다른 하나에서는 slack trigger create 명령어를 실행할 것입니다.

워크플로를 등록하기 위해서, 첫번째 터미널에서 slack run 명령어를 실행주시고, 그 다음 slack triggers create –trigger-def workflow_and_trigger.ts 를 다른 터미널에서 실행해주십시요. 다음과 같은 결과물을 보실 수 있습니다.

$ slack triggers create --trigger-def workflow_and_trigger.ts
? Choose an app  seratch (dev)  T03E94MJU
   objective-fox-22 (dev) A04G9S43G2K


Trigger created
   Trigger ID:   Ft04HE42B15E
   Trigger Type: scheduled
   Trigger Name: Trigger a workflow

slack run 을 실행중인 터미널 가보시면 30초뒤에 워크플로가 실행되는 것을 볼 수 있습니다.

$ slack run
? Choose a workspace  seratch  T03E94MJU
   objective-fox-22 A04G9S43G2K

Updating dev app install for workspace "Acme Corp"

⚠️  Outgoing domains
   No allowed outgoing domains are configured
   If your function makes network requests, you will need to allow the outgoing domains
   Learn more about upcoming changes to outgoing domains: https://api.slack.com/future/changelog
seratch of Acme Corp
Connected, awaiting events

2022-12-27 17:10:46 [info] [Fn04GHQFQMC6] (Trace=Tr04GQD13VH8) Function execution started for workflow function 'Scheduled Trigger Demo Workflow'
2022-12-27 17:10:46 [info] [Wf04H31WBE1X] (Trace=Tr04GSSF1CTE) Execution started for workflow 'Scheduled Trigger Demo Workflow'
2022-12-27 17:10:46 [info] [Fn04GHQFQMC6] (Trace=Tr04GQD13VH8) Function execution completed for function 'Scheduled Trigger Demo Workflow'
2022-12-27 17:10:46 [info] [Wf04H31WBE1X] (Trace=Tr04GSSF1CTE) Execution completed for workflow 'Scheduled Trigger Demo Workflow'

잘 동작하네요. 만약 워크플로를 다시 실행시키고 싶다면, 트리거 정의에서 frequency 부분을 조절하여 주시면 됩니다. 예제로 매시간 실행시켜 보겠습니다.

  schedule: {
    // This start_time means 30 seconds after you run
    // `slack triggers create` command
    start_time: new Date(new Date().getTime() + 30_000).toISOString(),
    // end_time is required for repeated executions
    end_time: "2037-12-31T23:59:59Z",
    frequency: {
      // hourly, daily, weekly, monthly, and yearly are available here
      type: "hourly",
      // For bi-weekly etc., you can set 2
      repeats_every: 1,
    },
  },

좀 더 상세한 내용은 다음 링크를 참조하세요. https://api.slack.com/future/triggers/scheduled 

Wrapping Up

이번 튜토리얼에서는 다음 내용을 배웠습니다.

  • 워크플로 실행을 위한 스케쥴 트리거를 정의하는 방법

이 튜토리얼의 프로젝트는 다음링크에서 확인하실 수 있습니다. https://github.com/seratch/slack-next-generation-platform-tutorials/tree/main/06_Scheduled_Triggers

이번 튜토리얼도 즐거우셨으면 좋겠네요. 마찬가지로 피드백이나 코멘트가 있으시다면 트위터 (@seratch) 로 연락주시거나, 여기 남겨주세요.

Happy hacking with Slack’s next-generation platform 🚀

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다