This is translation of Slack Next-gen Platform – The Simplest “Hello World” – DEV Community π©βπ»π¨βπ» ” 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 μ κΈμ λ²μνκ²μ λλ€. μ μ κ°μΈ μ견μ λ€μ΄κ°μ§ μμΌλ©°, μΌλΆ μλ¬Έμ μλ―Έκ° μ λ§€ν κ²½μ°μλ§ λΆμ° μ€λͺ μ λ¬μμ΅λλ€.
μ΄ νν 리μΌμμλ, Slack μ Next generation Platform(μ΄ν μ°¨μΈλ νλ«νΌ) μ μ¬μ©νλ λ°©λ²μ λν΄μ λ°°μλ³Ό μ μμ΅λλ€.
μμ€μλ μλλ°μ, slack create λͺ λ Ήμ΄λ₯Ό μ¬μ©νμ¬ μλ‘μ΄ app μ λ§λ€ λ, μ€νΌμ “ν¬λ‘μ° μλ” νλ‘μ νΈ ν νλ¦Ώμ μ¬μ©ν΄λ³Ό μ μμ΅λλ€. ν΄λΉ νλ‘μ νΈμ ν νλ¦Ώ μ½λλ λ€μ λ§ν¬μμ νμΈν μ μμ΅λλ€.
https://github.com/slack-samples/deno-hello-world
νλ«νΌμ λ°°μ°λλ° μ’μ ν νλ¦Ώμ λλ€. λ§μ κ²μ λ€λ€λ³Ό μ μκΈ° λλ¬Έμ λλ€. (μ± λ§€λνμ€νΈ, νΈλ¦¬κ±°, μν¬νλ‘, λΉνΈμΈ νΌ νμ , 컀μ€ν νμ , λΉνΈμΈ λ©μΈμ§ νμ , νμ€ λλ ν 리 ꡬ쑰 λ±)
κ·Έλ μ§λ§, μ΄λ² νν 리μΌμμλ μ΅μνμ λΉλ© λΈλ½, μ± λ§€λνμ€νΈ, νΈλ¦¬κ±°, μν¬νλ‘, λΉνΈμΈ λ©μΈμ§ νμ μ μλ―Έλ€μ λν΄μλ§ λ°°μλ³΄κ² μ΅λλ€. λͺ¨λ κ²μ νλμ© μ΄ν΄ν΄κ°λκ²μ μ°νλ‘ μ²λΌ 보μ΄κΈ°λ νμ§λ§ μ§λ¦κΈΈμ΄κΈ°λ ν©λλ€. (νλνλ μ΄ν΄νλ κ²μ΄ μ€μνλ€ λΌλ μλ―Έλ‘ μ΄κ² κ°λ€μ)
Prerequisites (μ€λΉμ¬ν)
λ§μ½ Slack μ μ°¨μΈλ νλ«νΌμ μ²μ λ€λ€λ³΄μ λ€λ©΄, 곡μ ν΅ μ€ννΈ κ°μ΄λλ₯Ό μ½μ΄λ³΄μΈμ. ν΅ μ€ννΈ κ°μ΄λμμ μΈκΈλ λ°μ κ°μ΄, Slack CLI μ μ€μ νκ³ , μ λ£ μ¬λ μν¬μ€νμ΄μ€μ μ°κ²°ν΄λμ΄μΌ ν©λλ€.
μ΄ κΈμ μ°λ νμ¬ μμ (2022λ 12μ) κΈ°μ€μΌλ‘, μ°¨μΈλνλ«νΌμ μμ§ μ€ν λ² ν μνμ λλ€. κ·Έλμ, Slack μν¬μ€νμ΄μ€ κ΄λ¦¬μκ° beta feature λ₯Ό μΌμ£Όμ΄μΌ ν©λλ€. (https://my.slack.com/admin/settings#permissions)
μ¬κΈ°κΉμ§ λλ¬μΌλ©΄ μ΄μ 첫λ²μ§Έ μ±μ λ§λ€ μ€λΉκ° λμμ΅λλ€. μμν΄λ³΄μ£
Create a black project (λΉ νλ‘μ νΈ μμ±)
μλ‘μ΄ νλ‘μ νΈλ₯Ό μμν λ slack create λͺ λ Ήμ΄λ₯Ό μ¬μ©ν μ μμ΅λλ€.
$ 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.
Hello World ν νλ¦Ώλ 보μ΄μκ² μ§λ§, μ§κΈμ Blank Project λ₯Ό μ νν΄μ£ΌμΈμ
νλ‘μ νΈκ° μμ±λκ³ λλ©΄ slack run λͺ λ Ήμ΄κ° λ¬Έμ μμ΄ λμνλμ§ νμΈν΄λ΄ μλ€. μ΄ λͺ λ Ήμ΄λ “dev”λ²μ μ μλ‘μ΄ μ±μ μ¬λ¬λΆλ€μ Slack μν¬μ€νμ΄μ€μ μ€μΉν©λλ€. λλλ©΄ μ±μ λ΄ μ μ κ° μν¬μ€νμ΄μ€λ΄μ μ‘΄μ¬νκ² λλ©°, μ±μ λ΄μ΄ API μ½μ ν μ μλλ‘ token κ°μ νμΈν μ μμ΅λλ€.
$ cd dreamy-gazelle-453
$ 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 λ©μΈμ§λ₯Ό νμΈν μ μλ€λ©΄, μ±μ΄ μ±κ³΅μ μΌλ‘ Slack μ μ°κ²°λ κ²μ λλ€. μ¬κΈ°μ “Ctrl + C” λ₯Ό λλ¬, μ΄ μ±μ νλ‘μΈμ€λ₯Ό μ’ λ£ν μ μμ΅λλ€.
μ΄ μ±μλ μμ§ μ무κ²λ μλ μνμ λλ€. κ·Έλ¬λ―λ‘, λͺκ°μ§ νμΌλ€μ μ΄ νλ‘μ νΈμ μΆκ°ν΄λ³΄λλ‘ νμ£ . μλ§ μ΄λ―Έ λ³΄μ ¨μν λ° , Slack μ μ°¨μΈλ νλ«νΌμμ μ€νλλ μ±μ Deno(a novel JavaScript runtime) μΌλ‘ μ€νλ©λλ€. κ·Έλμ νλ‘μ νΈλ₯Ό μν μ½λ©/νΈμ§μ μν΄μλ VS Code μ 곡μ Deno νλ¬κ·ΈμΈμ μ¬μ©νλ κ²μ κΆμ₯ν©λλ€.
Hello World with Webhook Trigger
μ°¨μΈλνλ«νΌμ μ±μμλ μ¬λ¬κ°μ μν¬νλ‘λ₯Ό κ°μ§ μ μμ΅λλ€. λν κ° μν¬νλ‘ λ³λ‘ νΈλ¦¬κ±°λ₯Ό κ°μ§ μ μμ΅λλ€. νΈλ¦¬κ±°λ μ°λλ μν¬νλ‘λ₯Ό μμνκΈ° μν λ°©λ²μ΄λ©°, μ΄μ μ Slack νλ«νΌκ³Ό λ€λ₯Έμ μ€ νκ°μ§ μ λλ€.
μ΄λ»κ² νΈλ¦¬κ±°κ° λμνλμ§ λ°°μ보기 μν΄μ, “Incoming Webhooks νΈλ¦¬κ±°”λ₯Ό νλ² μ¨λ³΄λλ‘ ν΄λ³΄μ£ . λ€μκ³Ό κ°μ κ³Όμ μ κ±°μΉ κ²μ λλ€.
- μν¬νλ‘μ νΈλ¦¬κ±°λ₯Ό ν¬ν¨ν workflow_and_trigger.ts μμ±
- Slack μν¬μ€νμ΄μ€μ μ±λ ID νμΈνμ¬ μ½λλ΄μ μ μ©
- manifest.ts μ μν¬νλ‘ μΆκ°
- slack run λͺ λ Ήμ΄λ₯Ό ν΅ν μ΅μ’ μ ν μ΄ μ μ©λ μ± μ¬μ€μΉ
- νΈλ¦¬κ±° μμ± (slack triggers create –trigger-def ./workflow_and_trigger.ts λͺ λ Ήμ΄ μ€ν)
- webhook URL λ‘ POST μμ²μ 보λ΄μ μν¬νλ‘ μμ
μν¬νλ‘μ νΈλ¦¬κ±°λ₯Ό ν¬ν¨ν workflow_and_trigger.ts μμ±
workflow_and_trigger.ts νμΌμ λ§λ€κ³ , μλ λ΄μ©μΌλ‘ μ μ₯ν©λλ€.
// -------------------------
// Workflow definition
// -------------------------
import { DefineWorkflow, Schema } from "deno-slack-sdk/mod.ts";
// Don't forget to add this workflow to manifest.ts!
export const workflow = DefineWorkflow({
callback_id: "hello-world-workflow",
title: "Hello World Workflow",
input_parameters: { properties: {}, required: [] },
});
// Send a message in a channel using the built-in function
workflow.addStep(Schema.slack.functions.SendMessage, {
channel_id: "C03E94MKS", // TODO: Grab the ID in Slack UI
message: "Hello World!",
});
// -------------------------
// Trigger Definition
// -------------------------
import { Trigger } from "deno-slack-api/types.ts";
// This trigger starts the workflow when the webhook URL receives an HTTP request
const trigger: Trigger<typeof workflow.definition> = {
type: "webhook", // Incoming Webhooks
name: "Hello World Trigger",
// Need to embed the workflow's callback_id here
workflow: `#/workflows/${workflow.definition.callback_id}`,
};
// As long as the trigger object is default exported,
// you can generate a trigger with this code:
// $ slack triggers create --trigger-def ./workflow_and_trigger.ts
export default trigger;
μ΄ μμ€νμΌμ λκ°μ§ μΌμ ν©λλ€.
- μ±μ μν μλ‘μ΄ μν¬νλ‘ μ μ
- μν¬νλ‘λ₯Ό μμν μ μλ webhook νΈλ¦¬κ±° μ μ
λͺκ°μ§ μΌμ΄ λ λ¨μμ΅λλ€. λ€μμΌλ‘ λμ΄κ°λ³΄μ£ .
Slack μν¬μ€νμ΄μ€μ μ±λ ID νμΈνμ¬ μ½λλ΄μ μ μ©
workflow_and_trigger.ts νμΌλ΄μ TODO μ½λ©νΈλ₯Ό 보μλ©΄ λ€μκ³Ό κ°μ νλͺ©μ΄ μμ΅λλ€.
channel_id: "C03E94MKS", // TODO: Grab the ID in Slack UI
μ±λ ID λ₯Ό νμΈνκΈ° μν΄μ μΌλ¨ 곡κ°μ±λμ νλ 골λΌμ£Όμμμ. (ν μμ κΈ°μ€μΌλ‘, λ² ν νλ«νΌμμλ 곡κ°μ±λλ§ μ§μλ©λλ€. GA κ° λλ©΄ λΉκ³΅κ°μ±λλ μ§μν κ²μ λλ€.)
μ±λ ID λ₯Ό νμΈνκΈ° μν κ°μ₯ μ¬μ΄ λ°©λ²μ Slack ν΄λΌμ΄μΈνΈμ UI μμ μ±λμ΄λ¦μ μ ννν, μ°ν΄λ¦ -> μ±λ μΈλΆμ 보 보기λ₯Ό 보μλ©΄ “C” λ‘ μμνλ λ¬Έμμ΄μ λ³΄μ€ μ μμ΅λλ€. κ·Έκ² μ±λμ ID κ° μ λλ€.

μ΄ λ°©λ²μΈμλ ν΄λΉμ±λμ λ©μΈμ§μ€ νλλ₯Ό κ³ λ₯΄μκ³ , “λ§ν¬ 볡쬔 λ₯Ό ν΄λ³΄μλ©΄, κ·Έ μμ λμΌνκ² “C” λ‘ μμνλ λΆλΆμ νμΈνμ€ μ μμ΅λλ€. (https://my.slack.com/archives/..)
μ±λ ID κ° νμΈλλ©΄, workflow_and_trigger.ts μ½λλ΄μ μ±λ ID λ₯Ό λ°κΏμ€λλ€.
manifest.ts μ μν¬νλ‘ μΆκ°
λ€μμΌλ‘, manifest.ts νμΌμ μλμ κ°μ΄ μν¬νλ‘λ₯Ό μΆκ°ν©λλ€. κ·Έλ¦¬κ³ manifest.ts νμΌλ΄μ workflow μ μκ°μ μν¬νΈνκ³ , workflow λ°°μ΄λ΄μ κ°μ²΄μ λ νΌλ°μ€λ₯Ό μΆκ°νμ¬ μ€λλ€. (μ κ° κ°λ°μͺ½μ μΌμ무μμ΄λΌ λ²μμ΄ μ λλ‘ λκ±΄μ§ λͺ¨λ₯΄κ² λ€μ)
import { Manifest } from "deno-slack-sdk/mod.ts";
// Import the workflow you've just created
import { workflow as HelloWorld } from "./workflow_and_trigger.ts";
export default Manifest({
name: "dreamy-gazelle-453",
description: "Hello World!",
icon: "assets/default_new_app_icon.png",
// Add the imported workflow here
workflows: [HelloWorld],
outgoingDomains: [],
botScopes: ["commands", "chat:write", "chat:write.public"],
});
slack run λͺ λ Ήμ΄λ₯Ό ν΅ν μ΅μ’ μ ν μ΄ μ μ©λ μ± μ¬μ€μΉ
νμν λͺ¨λ λ³κ²½μ΄ μλ£λμμ΅λλ€. μμ§ ν°λ―Έλμ μ΄μ΄λμ μνλΌλ©΄, λκ°μ 컀맨λλ₯Ό λ€μνλ² μ€νν΄μ£Όμλ©΄ λ©λλ€. (slack run), λ³λ€λ₯Έ μλ¬λ©μΈμ§κ° λμ€μ§ μλλ€λ©΄ λͺ¨λ κ² μ’μ μνμ λλ€.
slack run 컀맨λλ₯Ό μ’ λ£ν΄λ μ’μ΅λλ€λ§(ctrl +c), μΌλ¨ λ λμκ³ λ€λ₯Έ ν°λ―Έλ μλμ°λ₯Ό νλ λ μ€ννμ¬ λ€λ₯Έ λͺ λ Ήμ΄λ₯Ό μ€νν΄λ³΄λλ‘ νμ£ .
Webhook νΈλ¦¬κ±° μμ±
μ΄μ μν¬νλ‘κ° μ€λΉλμμΌλ©° μ΄ μν¬νλ‘λ Slack μ ν΄λΌμ°λ μΈνλΌμμ μ€νλ©λλ€. μ΄μ μ΄ μν¬νλ‘λ₯Ό μ€ννκΈ° μν webhook νΈλ¦¬κ±°λ₯Ό λ§λ€ μ μμ΅λλ€. app manifest μ workflow λ₯Ό μΆκ°νλ€νλλΌλ νΈλ¦¬κ±°λ₯Ό μλμΌλ‘ λ§λ€μ§ μκΈ° λλ¬Έμ, νΈλ¦¬κ±°λ₯Ό λ§λ€μ΄μ£Όμ΄μΌ ν©λλ€.
slack triggers create λͺ λ Ήμ΄λ₯Ό μ€ννλ©΄ νΈλ¦¬κ±°λ₯Ό λ§λ€ μ μμ΅λλ€.
λκ°μ§ μ΅μ μ λ³Ό μ μμν λ°, μ§κΈμ μΌλ¨ (dev) κ° λ¬λ¦° κ²μ μ νν΄μ£ΌμΈμ.
$ slack triggers create --trigger-def ./workflow_and_trigger.ts
? Choose an app [Use arrows to move, type to filter]
seratch T03E94MJU
App is not installed to this workspace
> seratch (dev) T03E94MJU
dreamy-gazelle-453 (dev) A04DHV08MPF
λ§μ½ “workflow not found” μλ¬κ° λ°μνλ€λ©΄, manifest.ts μ μν¬νλ‘λ₯Ό μΆκ°νλ κ²μ κΉλ°νκ±°λ, κ°μ₯ μ΅μ μ manafest data λ₯Ό κ°μ§κ³ μ±μ μ¬μ€μΉ νμ§ μμλ€λ μλ―Έμ λλ€.
μ μμ μΌλ‘ μ μ§νμ΄ λμλ€λ©΄, λ€μκ³Ό κ°μ κ²°κ³Όλ¬Όμ λ³Ό μ μμ΅λλ€. μ΄λ κ² μμ±λ webhook URL λ‘ μν¬νλ‘λ₯Ό μμν μ μμ΅λλ€. λ³λμ μΈμ¦κ³Όμ μ΄ μκΈ° λλ¬Έμ wehbook URL μ 곡κ°μ μΌλ‘ μ€ννμλ©΄ μλ©λλ€.
$ slack triggers create --trigger-def ./workflow_and_trigger.ts
? Choose an app seratch (dev) T03E94MJU
dreamy-gazelle-453 (dev) A04DHV08MPF
β‘ Trigger created
Trigger ID: Ft04DLR5XXXX
Trigger Type: webhook
Trigger Name: Hello World Trigger
Webhook URL: https://hooks.slack.com/triggers/T11111/22222/xxxxx
webhook URL λ‘ POST μμ²μ 보λ΄μ μν¬νλ‘ μμ
μ΄μ 첫λ²μ§Έ μν¬νλ‘λ₯Ό μ€νν λμ λλ€! POST μμ²μ webhook URL λ‘ λ³΄λ΄λ³΄μΈμ.
curl -XPOST https://hooks.slack.com/triggers/T11111/22222/xxxxx
{“ok”:true} λ©μΈμ§κ° λμ¨λ€λ©΄, μ±κ³΅μ μΌλ‘ μ€νλ κ²μ λλ€. μ΄μ Slack μν¬μ€νμ΄μ€μ μ±λλ‘ μ΄λνμ¬, λ©μΈμ§λ₯Ό νμΈν΄λ΄ μλ€.
λ€μκ³Ό κ°μ΄ “Hello World” λ©μΈμ§λ₯Ό λ³΄μ€ μ μμ κ²μ λλ€. μΆνν©λλ€!

λ€μνλ² μ§κΈ μ΄λ€κ²λ€μ νλμ§ μ 리ν΄λ΄ μλ€.
- λΉ νλ‘μ νΈ μμ±
- workflow_and_trigger.ts νμΌμ μμ±νμ¬ μν¬νλ‘μ webhook νΈλ¦¬κ±°λ₯Ό μ μ
- μν¬νλ‘λ₯Ό manifest.ts μ μΆκ°
- slack run λͺ λ Ήμ΄ μ€νμ ν΅νμ¬ μ± μ¬μ€μΉ
- slack triggers create λͺ λ Ήμ΄λ₯Ό μ€ννμ¬ νΈλ¦¬κ±° μμ±
- POST μμ²μ 보λ΄μ νΈλ¦¬κ±° μ€ν
μ΄ κ³Όμ λ€μ΄ λΉμ μ΄ μκ°νλ κ²λ³΄λ€ ν¨μ¬ μ½κ³ , κ°λ¨νλ€κ³ λκ»΄μ§κΈΈ λ°λλλ€.
μμ°Έ, λ§μ½ νΈλ¦¬κ±°λ₯Ό μ€ννκΈ° μ μ slack run λͺ λ Ήμ΄λ₯Ό μ’ λ£ν΄λ μνλΌλ©΄, slack run λͺ λ Ήμ΄λ₯Ό μ’ λ£νλλ°λ μν¬νλ‘κ° λμνλ κ²μ λ³΄κ³ μ’ λλ μλ μλλ°μ. λλΌμλκ² μ μμ΄λ©° μ°¨μΈλνλ«νΌμμλ μ΄λ¬ν λ°©μμΌλ‘ λμν©λλ€. κΈ°μ‘΄μ μ± λμλ°©μκ³Όλ λ€λ₯΄κ², νΈλ¦¬κ±°μ μν¬νλ‘λ₯Ό λ€λ£¨λ μν¬νλ‘ μμ§μ΄ μ¬λ¬λΆλ€μ λ‘μ»¬μ΄ μλ Slack μ ν΄λΌμ°λ μΈνλΌμμ λμνκΈ° λλ¬Έμ λλ€. λ°λΌμ, μ¬λ¬λΆμ μν¬νλ‘μ λ³λμ 컀μ€ν νμ (λ€λ₯Έ νν 리μΌμμ μ€μ λλ¦¬κ² μ΅λλ€.) μ κ°μ§κ³ μμ§ μλ€λ©΄, slack run μ κ³μν΄μ μ€νν΄ λνμκ° μμ΅λλ€.
Hello World with Link Trigger
μ§κΈκΉμ§ webhook νΈλ¦¬κ±°λ₯Ό λ§λ€κ³ μ¬μ©νλ λ°©λ²μ λν΄ λ°°μ μ΅λλ€. λ€μμ “link” νΈλ¦¬κ±°λ₯Ό νλ² ν΄λ³΄λλ‘ νμ£ . link νΈλ¦¬κ±°λ Slack ν΄λΌμ΄μΈνΈ UI μμμ μ¬λλ€μ΄ “link” λ₯Ό ν΄λ¦νλ©΄ μν¬νλ‘κ° μ΄νλλλ‘ ν μ μμ΅λλ€.
workflow_and_trigger.ts λ₯Ό λ€μκ³Ό κ°μ΄ λ°κΏμ£ΌμΈμ.
// -------------------------
// Workflow definition
// -------------------------
import { DefineWorkflow, Schema } from "deno-slack-sdk/mod.ts";
// Don't forget to add this workflow to manifest.ts!
export const workflow = DefineWorkflow({
callback_id: "hello-world-workflow",
title: "Hello World Workflow",
input_parameters: {
properties: {
// The channel ID passed from the link trigger
channel_id: { type: Schema.slack.types.channel_id },
},
required: ["channel_id"],
},
});
// Send a message in a channel using the built-in function
workflow.addStep(Schema.slack.functions.SendMessage, {
// Set the channel ID given by trigger -> workflow
channel_id: workflow.inputs.channel_id,
message: "Hello World!",
});
// -------------------------
// Trigger Definition
// -------------------------
import { Trigger } from "deno-slack-api/types.ts";
// This trigger starts the workflow when an end-user clicks the link
const trigger: Trigger<typeof workflow.definition> = {
type: "shortcut",
name: "Hello World Trigger",
workflow: `#/workflows/${workflow.definition.callback_id}`,
inputs: {
// The channel where you click the link trigger
channel_id: { value: "{{data.channel_id}}" },
},
};
// As long as the trigger object is default exported,
// you can generate a trigger with this code:
// $ slack triggers create --trigger-def ./workflow_and_trigger.ts
export default trigger;
보μ λ°μ κ°μ΄ λ§μ κ²μ΄ λ³κ²½λμλλ°μ, λ³κ²½λ κ²λ€μ λ€μκ³Ό κ°μ΅λλ€.
- workflow κ° μ±λ ID λ₯Ό μ λ ₯κ°μΌλ‘ λ°μ
- SendMessage νμ μ΄ μ λ ₯λ°μ μ±λ ID λ₯Ό μ¬μ©ν¨ (hard-coded λ μ±λID κ° λμ )
- νΈλ¦¬κ±° νμ μ΄ shortcut μΌλ‘ λ³κ²½λμμΌλ©°, link νΈλ¦¬κ±°λ₯Ό μλ―Έν¨
- νΈλ¦¬κ±°κ° μ λ ₯λ°μ μ±λ ID λ₯Ό μν¬νλ‘λ‘ μ λ¬ν¨
slack run μ μ€ννμ¬ λ³λ€λ₯Έ μλ¬ λ©μΈμ§κ° λ°μνλμ§ νμΈν΄λ³΄μΈμ. μλ€λ©΄ slack triggers create –trigger-def ./workflow_and_trigger.ts λ₯Ό μ€ννμ¬ μλ‘μ΄ link νΈλ¦¬κ±°λ₯Ό λ§λλλ€.
$ slack triggers create --trigger-def ./workflow_and_trigger.ts
? Choose an app seratch (dev) T03E94MJU
dreamy-gazelle-453 (dev) A04DHV08MPF
β‘ Trigger created
Trigger ID: Ft04DEBXXXX
Trigger Type: shortcut
Trigger Name: Hello World Trigger
URL: https://slack.com/shortcuts/Ft04DEBXXXXX/YYYY
https λ‘ μμνλ URL μ΄ link URL μ λλ€. μ°κ²°λ μν¬μ€νμ΄μ€λ΄μμλ§ μ ν¨ν©λλ€. μ΄ λ§ν¬λ₯Ό λ©μΈμ§λ‘ 곡μ νλκ° λΆλ§ν¬λ‘ μ§μ ν΄λμλ μκ² μ£ . link URL μ΄ κ³΅μ λλ©΄, unfurl μ΄ μ§νλλ©° μν¬νλ‘μ° μ€ννΈ λ²νΌμ λ³Ό μ μμ΅λλ€.
start λ₯Ό λλ¬λ³΄μλ©΄ hello world λ©μΈμ§κ° μ±λμ λ°λ‘ νμλ©λλ€!

Wrapping up
μ΄ νν 리μΌμ ν΅ν΄μ λ€μκ³Ό κ°μ μ λ€μ λ°°μλ³΄μ ¨μ΅λλ€.
- μν¬νλ‘ μμ±
- manifest.ts μ μν¬νλ‘ μΆκ°
- μν¬νλ‘λ₯Ό μμνκΈ° μν webhook νΈλ¦¬κ±° μμ±
- μν¬νλ‘λ₯Ό μμνκΈ° μν link νΈλ¦¬κ±° μμ±
νν 리μΌμ μ¬μ©λ νλ‘μ νΈλ λ€μ λ§ν¬μμ νμΈν΄λ³΄μ€ μ μμ΅λλ€. https://github.com/seratch/slack-next-generation-platform-tutorials/tree/main/01_The_Simplest_Hello_World
κ°λ¨νκ² ν΄λ³΄κΈ° μν΄μ μ λ μν¬νλ‘μ νΈλ¦¬κ±°λ₯Ό workflow_and_trigger.ts λΌλ λ¨μΌ νμΌλ΄μ μ μν΄λμκ³ , μ λμνμλκ±Έ λ³Ό μ μμ΅λλ€. κ·Έλ μ§λ§ μΌλ°μ μΌλ‘ κΆμ₯λλ ꡬ쑰λ λ€μκ³Ό κ°μ΅λλ€.(μν¬νλ‘μ νΈλ¦¬κ±°λ₯Ό λ³λμ νμΌμμ μ μ)
$ tree
.
βββ manifest.ts
βββ triggers
βΒ Β βββ link.ts
βΒ Β βββ webhook.ts
βββ workflows
βββ hello_world.ts.
νμ€ νλ‘μ νΈ κ΅¬μ‘°μ λν΄μ 곡λΆν΄λ³΄κ³ μΆμΌμλ€λ©΄, “hello World” λλ “Scaffold project” ν νλ¦Ώμ μ¬μ©νμ¬ νλ‘μ νΈλ₯Ό λ§λ€μ΄λ³΄μΈμ£ .
λν, github.com/slack-samples orgarnization μμ λ€λ₯Έ ν νλ¦Ώμ μ¬μ©ν΄λ³΄μ€ μ λ μμ΅λλ€. μλ₯Ό λ€μ΄ https://github.com/slack-samples/deno-request-time-off ν νλ¦Ώμ μ¬μ©ν΄λ³΄κ³ μΆλ€λ©΄ λ€μκ³Ό κ°μ΄ νλ©΄ λ©λλ€.
slack create my-time-off-app -t slack-samples/deno-request-time-off
νν 리μΌμ μ¦κΈ°μ ¨κΈ°λ₯Ό λ°λλλ€. μ°¨μΈλνλ«νΌμ λν μΆκ°μ μΈ νν 리μΌμ λͺκ°μ§ λ 곡μ ν΄λ³΄λλ‘ νκ² μ΅λλ€. μ΄λ€ μ견μ΄λ μ½λ©νΈκ° μμΌμλ€λ©΄ νΈμν°(@seratch) λ μ κ° νμΈν΄λ³Ό μ μλ μ΄λ€ μ₯μμ λ¨κ²¨μ£ΌμΈμ.
Happy hacking with Slack’s next-generation platform π