정적 알림을 대화형 Teams 워크플로로 바꾸기
By Mirko Peters ·
다시 오신 것을 환영합니다, 여러분! 여러분도 저처럼 매일 쏟아지는 정적 알림에 파묻혀 계신다면, 이 글이 공감되실 겁니다. 띵, 삐익, 배지 숫자는 계속 올라갑니다. 누군가 업데이트를 올렸거나, 검토를 요청했거나, Microsoft Teams 채널에 일반적인 메시지를 남긴 것이죠. 그러면 보통 우리는 그냥 읽고 잊어버리거나, 더 나쁘게는 별도의 브라우저 탭을 열고, 다른 앱에 로그인해서 여기저기 클릭해야 합니다. 작은 피드백 하나를 제출하거나 간단한 요청 하나를 승인하려고 말이죠. 이런 방식은 마찰이 많고, 사용자 참여를 떨어뜨리며, 팀을 완전히 업무 흐름에서 벗어나게 만듭니다.
Automatically translated with AI from the original post. Read the English original
여러분, 다시 오신 것을 환영합니다! 여러분도 저와 같다면, 매일 쏟아지는 알림 속에서 허우적거리고 계실 겁니다. 띵, 삑, 배지 숫자 증가. 누군가 게시물을 올렸거나, 검토를 요청했거나, Microsoft Teams 채널에 일반적인 메시지를 남긴 것입니다. 그러면 우리는 보통 어떻게 할까요? 읽고 나서 잊어버리거나, 더 나쁘게는 브라우저의 새 탭을 열고, 다른 앱에 로그인해서 여기저기 클릭해야 합니다. 아주 작은 피드백을 제출하거나 간단한 요청을 승인하기 위해서요. 이런 방식은 번거롭고, 사용자 참여를 떨어뜨리며, 팀을 업무 흐름에서 완전히 밀어냅니다.
바로 이 대규모 생산성 병목을 해결하고자 합니다. 지루하고 정적인 알림을 완전히 상호작용하는 Adaptive Cards로 업그레이드하는 방법을 보여드리겠습니다. 피드백을 수집하고, 견고한 백그라운드 프로세스를 시작하고, 봇과의 대화를 분기하고, 콘텐츠를 즉석에서 동적으로 개인화하는 모습을 상상해 보십시오. 사용자는 Microsoft Teams 앱을 벗어날 필요가 전혀 없습니다. 전체 논의 내용을 자세히 듣고 심층 오디오 구간을 모두 확인하려면 동반 팟캐스트 에피소드 Build Interactive Microsoft Teams Adaptive Cards를 꼭 들어 보십시오. 이제 아키텍처, 코드 스니펫, 그리고 오늘 바로 익혀야 할 정확한 패턴을 깊이 살펴보겠습니다.
에피소드 개요
정적 알림에 지치셨나요? 이 가이드와 관련 팟캐스트 에피소드에서는 기본 Adaptive Cards를 고성능 대화형 경험으로 바꾸는 방법을 다룹니다. 피드백을 손쉽게 수집하고, 복잡한 워크플로를 시작하고, 지능형 봇으로 대화를 분기하고, 콘텐츠를 동적으로 개인화하는 방법을 배우게 됩니다. 또한 복사해서 바로 붙여 넣을 수 있는 JSON, 배포 팁, 검증된 패턴도 함께 제공하여, 자동화 프로세스가 백그라운드에서 원활하게 실행되는 동안 사용자가 Teams 안에서 편안하게 머물 수 있도록 돕습니다.
대상 독자
- Teams 관리자, 메이커, 봇 개발자
- Power Automate 및 Power Platform 전문가
- Microsoft Graph 또는 Bot Framework로 Microsoft 365 워크플로를 구축하는 개발자
- 참여율을 크게 높이고 무시되는 게시물을 줄이고자 하는 커뮤니케이션, HR, IT 리더
핵심 개념 (간단 정리)
- 스키마 구성 요소:
type은 카드 또는 요소를 정의하고,body는 사용자가 실제로 보는 내용을 정하며,actions는 사용자가 할 수 있는 작업을 정합니다. - 상호작용:
Action.Submit은 원시 데이터를 Flow 또는 봇 백엔드로 바로 보내고,Action.Execute는 컨텍스트를 인식하는 봇 작업을 처리하며,Action.OpenUrl은 일반적으로 최후의 수단으로만 사용해야 합니다. - 입력:
Input.Text,Input.Number,Input.ChoiceSet,Input.Date같은 요소를 사용해 깔끔한 데이터를 수집하세요. - 동적 UX:
${...}구문을 이용한 템플릿, 데이터 바인딩, 조건부isVisible속성을 활용해 경험을 맞춤화하세요.
복사해서 바로 쓰는 시작 예제
1) Teams 안에서 피드백 수집하기
기본 예제부터 시작하겠습니다. 이 카드는 간단한 정책 업데이트 안내와 함께 의견을 입력할 텍스트 상자, 사용자 반응을 고를 수 있는 확장형 선택 목록을 보여줍니다.
{ "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", "type": "AdaptiveCard", "version": "1.5", "body": [ { "type": "TextBlock", "text": "Policy Update: Quick Feedback", "weight": "Bolder", "size": "Large" }, { "type": "Input.Text", "id": "policyFeedback", "placeholder": "Share your thoughts..." }, { "type": "Input.ChoiceSet", "id": "sentiment", "style": "expanded", "choices": [ { "title": "👍 Helpful", "value": "positive" }, { "title": "😐 Neutral", "value": "neutral" }, { "title": "👎 Needs work", "value": "negative" } ] } ], "actions": [ { "type": "Action.Submit", "title": "Send", "data": { "kind": "policy-feedback" } } ]}무슨 일이 일어나나요: 사용자가 Send를 클릭하는 순간 Teams가 policyFeedback, 선택한 sentiment, 그리고 직접 정의한 data.kind 속성을 자동으로 묶어 연결된 봇이나 자동화 흐름으로 바로 전달합니다.
2) Power Automate 흐름 시작하기(HTTP 트리거)
- When an HTTP request is received 트리거를 사용하는 표준 Power Automate 워크플로를 구성합니다.
- 카드의
Action.Submit정의에서 중간 봇을 통해 흐름 URL을 전달하거나 들어오는 웹훅 엔드포인트를 사용합니다. 결과로 생성되는 흐름 본문에는 정의한 모든 입력 ID와 사용자 지정data속성이 자동으로 포함됩니다.
예상 페이로드 발췌:
{ "kind": "policy-feedback", "policyFeedback": "Please clarify WFH days.", "sentiment": "neutral", "from": { "aadObjectId": "user-guid", "name": "Adele V." }}3) Action.Execute로 봇에서 분기 처리하기
{ "type": "Action.Execute", "title": "Approve", "verb": "approveRequest", "data": { "requestId": "${request.id}" }}봇 핸들러 아이디어: approveRequest 동사를 받으면 백엔드는 사용자 ACL을 검증하고, 트랜잭션을 Dataverse 또는 SharePoint에 안전하게 기록한 다음, 전체 상태를 승인됨으로 표시하고 작업 버튼을 모두 숨기는 식으로 업데이트된 레이아웃을 카드 활동에 직접 응답해야 합니다.
4) 조건부 표시 및 개인화
{ "type": "Container", "items": [ { "type": "TextBlock", "text": "Hello, ${user.displayName}!" }, { "type": "TextBlock", "text": "Task: ${task.title}" } ], "isVisible": "${task.status != 'completed'}"}5) 더 안전한 선택지 (잘못된 입력 방지)
{ "type": "Input.ChoiceSet", "id": "priority", "value": "normal", "choices": [ { "title": "Low", "value": "low" }, { "title": "Normal", "value": "normal" }, { "title": "High (requires reason)", "value": "high" } ], "wrap": true}백엔드 핸들러 로직에서 사용자가 priority == "high"로 설정하면 텍스트로 사유를 입력하도록 하는 검증 규칙을 쉽게 적용할 수 있으며, 그 전까지 워크플로가 진행되지 않도록 할 수 있습니다.
효과가 있는 디자인 패턴
- 마이크로 승인: 필수 코멘트 입력란을 갖춘 깔끔한 승인 또는 거부 메커니즘을 구축하여, 완료되는 즉시 카드를 인라인으로 업데이트합니다.
- 트리아지 카드: ChoiceSet을 구현해 들어오는 IT 또는 HR 지원 티켓을 동적으로 라우팅하고, 선택된 경로에 따라 봇이 자동 후속 질문을 게시하도록 합니다.
- 대상 맞춤 알림: 기본 조건
${overdueCount} > 0이 참으로 평가될 때에만 “담당자에게 알림” 버튼을 표시하도록 카드를 설계합니다. - 체크리스트:
isVisible조건을 활용하면 완료된 항목은 깔끔하게 숨기고, 아직 남은 작업만 표시할 수 있습니다.
테스트 및 도구
- 레이아웃을 확인할 때는 항상 공식 Adaptive Card Designer를 사용해 Teams 데스크톱 호스트와 모바일 화면 모두에서 미리 보기를 하십시오.
- 사용할 스키마 버전을 신중하게 검증하십시오.
isVisible매개 변수를 사용한다면 버전1.4이상을, 최신 기능을 쓰려면1.5를 사용하십시오. - 로컬 개발 단계에서는 원시 제출 페이로드를 기록해 입력 ID와 전체 데이터 구조를 꼼꼼하게 확인하십시오.
연결 방식 선택 (백엔드 고르기)
- Power Automate: 가장 빠르게 시작할 수 있는 방법입니다. 들어오는 카드 입력값을 SharePoint, Dataverse, 이메일 알림, 승인 흐름에 바로 매핑할 수 있습니다.
- 봇(Bot Framework / Teams Toolkit): 아키텍처를 가장 세밀하게 제어할 수 있습니다.
Action.Execute를 사용하면 반응이 빠른 다단계 대화형 워크플로를 구현할 수 있습니다. - Azure Functions / Logic Apps: 사용자 지정 웹후크와 특수한 백엔드 API를 관리하기에 가볍고 유용한 선택지입니다.
가드레일 및 주의 사항
- 모든 입력 요소에는
id가 있어야 합니다. 입력 요소에 명시적인id속성이 없으면 서버로 어떤 데이터도 돌아오지 않습니다. - OpenUrl은 과도하게 사용하지 마십시오. 가능한 한 외부 웹페이지로 이동시키지 않고 사용자를 Teams 앱 안에 머물게 하십시오.
- 접근 제어: 버튼을 누른 사용자가 누구인지 항상 서버 측에서 검증하십시오. 클라이언트 측 표시 설정만 믿고 맹목적으로 신뢰해서는 안 됩니다.
- 상태 업데이트: 작업이 완료된 후에는 항상 새로고침된 카드 페이로드를 게시하여, 사용자가 같은 요청을 중복 제출하는 불편을 막으십시오.
- 모바일 우선: 긴 텍스트 문자열, ChoiceSet 렌더링 동작, 버튼 줄바꿈 방식을 실제 모바일 기기에서 꼼꼼하게 테스트하십시오.
- 버전 관리: Microsoft 업데이트 중 예기치 않은 호스트 회귀를 피하도록 템플릿 안에 스키마 버전을 명시적으로 고정하십시오.
롤아웃 체크리스트 (30~60분)
- 조직 안에서 반복적으로 발생하는 메시지 유형 하나를 고르십시오. 예를 들어 피드백 요청, 행사 참석 여부 회신, 지원 티켓 분류처럼 입력을 받는 것이 도움이 될 만한 메시지가 좋습니다.
- 온라인 Designer에서 기본 카드 레이아웃을 만드십시오. 깔끔한 Input 요소와 함께 Action.Submit 트리거를 추가하십시오.
- 해당 액션을 Power Automate HTTP 흐름에 직접 연결해 응답을 SharePoint 또는 Dataverse에 깔끔하게 기록하십시오.
- 조건부 표시 규칙을 적용해 역할별 관리 작업이 권한이 있는 사람에게만 보이도록 하십시오.
- 작고 집중된 Team에서 새 워크플로를 시범 운영하십시오. 피드백을 바탕으로 문구와 레이아웃을 개선한 뒤, 전사 배포를 위해 템플릿으로 만드십시오.
자주 묻는 질문
- 제출 후에도 카드를 업데이트할 수 있나요? 네, 물론입니다. 완전히 새로운 카드 액티비티를 게시하거나 기본 봇 응답을 활용해 UI를 인라인으로 업데이트할 수 있습니다.
- 입력을 받으려면 봇이 필요한가요? 아닙니다. 단순한 데이터 수집에는 기본 Power Automate HTTP 트리거만으로도 충분히 잘 작동합니다. 다만 봇을 사용하면 훨씬 풍부한 대화형 분기를 구현할 수 있습니다.
- 승인할 수 있는 사람을 어떻게 제한하나요?
Action.*페이로드를 처리하기 전에 서버 측에서 항상 Microsoft Entra ID 그룹 구성원 여부나 보안 역할을 검증하십시오. - 텍스트를 현지화할 수 있나요? 네, 들어오는 페이로드에서 텍스트를 동적으로 바인딩하거나, 로케일별 JSON 템플릿을 즉석에서 생성할 수 있습니다.
수동적인 커뮤니케이션에서 벗어나 능동적이고 기능적인 설계로 관점을 바꾸면, 조직이 Microsoft Teams를 경험하는 방식을 근본적으로 바꿀 수 있습니다. 더 이상 번거로운 절차도, 놓치는 피드백도, 무시되는 알림도 없습니다. 이 패턴들을 환경에 적용해 오늘부터 직원들의 참여를 이끌어내는 경험을 만들어 보십시오. 이 개념들에 대한 전체 오디오 설명, 실용적인 팁, 아키텍처 논의는 관련 팟캐스트 에피소드 Build Interactive Microsoft Teams Adaptive Cards에서 확인하실 수 있습니다. 즐거운 빌딩 되세요!