Functions를 사용하여 플랫폼에서 보내야 할 알림을 유연하게 설정할 수 있으며, 사용자의 이메일 주소로 외부로 보내는 알림을 포함합니다.
Function 내에서 알림을 설정하려면 Principal
( User
또는 Group
을 나타냄) 및 notification
유형을 사용합니다. 이 섹션을 진행하는 동안 이러한 참조가 유용할 수 있습니다:
예를 들어, 온톨로지에 사용자에게 할당할 수 있는 Issue 오브젝트가 포함되어 있다고 가정해 보겠습니다. 주어진 User에게 Issue에 대한 상세 정보가 포함된 알림을 보내야 하는 Function을 작성하려 합니다.
Copied!1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
import { EmailNotificationContent, Function, Notification, ShortNotification, User } from "@foundry/functions-api"; import { Issue } from "@foundry/ontology-api"; export class NotificationFunctions { @Function() public createIssueNotification(issue: Issue, user: User): Notification { // 플랫폼 내에서 표시될 짧은 알림을 생성합니다 const shortNotification = ShortNotification.builder() .heading("새로운 문제") .content("당신에게 새로운 문제가 할당되었습니다.") // 플랫폼에서 Issue 객체에 대한 링크 .addObjectLink("문제", issue) .build(); // 이메일 본문 정의. 이메일 본문은 데이터 테이블과 같은 머리글이 없는 HTML을 포함할 수 있습니다 // 유저와 이슈의 속성에 접근할 수 있음에 주목하세요 const emailBody = `안녕하세요, ${user.firstName}, 당신에게 새로운 문제가 할당되었습니다: ${issue.description}.`; const emailNotificationContent = EmailNotificationContent.builder() .subject("새로운 문제") .body(emailBody) .addObjectLink("문제", issue) .build(); return Notification.builder() .shortNotification(shortNotification) .emailNotificationContent(emailNotificationContent) .build(); } }
Function에 전달된 사용자 외에도 필요에 따라 사용자 또는 그룹을 검색할 수 있습니다. 가령 Issue 오브젝트에 userId를 포함하는 assignee
필드가 있고, 이 Issue에 대해 사용자에게 알림을 보내는 것을 구현하려고 한다고 가정해 봅시다.
그러면 다음과 같이 할 수 있습니다:
Copied!1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
import { EmailNotificationContent, Function, Notification, ShortNotification, User, Users } from "@foundry/functions-api"; import { Issue } from "@foundry/ontology-api"; export class NotificationFunctions { @Function() // 이슈 리마인더 알림을 생성하는 함수 public async createIssueReminderNotification(issue: Issue): Promise<Notification> { // 이슈에 담당자가 지정되지 않은 경우, 에러를 발생시킵니다. if (!issue.assignee) { throw new UserFacingError("Cannot create notification for issue without an assignee."); } // 이슈의 담당자에 해당하는 사용자를 찾습니다. const user = await Users.getUserByIdAsync(issue.assignee); const emailBody = `Hello, ${user.firstName}, This is a reminder to investigate the following issue: ${issue.description}`. // 알림의 전체 구조를 빌드하는데 이 구조를 사용할 수도 있습니다. return Notification.builder() .shortNotification(ShortNotification.builder() .heading("Issue reminder") .content("Investigate this issue.") .addObjectLink("Issue", issue) .build()) .emailNotificationContent(EmailNotificationContent.builder() .subject("New issue") .body(emailBody) .addObjectLink("Issue", issue) .build()) .build(); } }
위에서 문서화된 Notification
API는 사용자 지정 알림 콘텐츠를 반환할 수 있습니다. Functions를 사용하여 알림을 구성하는 또 다른 방법은 알림의 수신자 목록을 반환하는 것입니다. 그렇게 하려면, 하나 이상의 Principal
(예: User
또는 Group
)을 반환하는 Function을 작성하면 됩니다. 아래 예에서 Function은 문제를 보고한 사용자와 현재 문제가 할당된 사용자를 모두 반환합니다.
Copied!1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
import { Function, User, Users } from "@foundry/functions-api"; import { Issue } from "@foundry/ontology-api"; export class NotificationFunctions { /** * 주어진 Issue에 대해, 현재 이슈를 할당받은 사용자와 이슈를 원래 보고한 사용자를 나타내는 Users를 반환합니다. */ @Function() public async getIssueAssigneeAndReporter(issue: Issue): Promise<User[]> { // 이슈에 할당된 사람이나 보고자가 없으면 오류를 던집니다. if (!issue.assignee || !issue.reporter) { throw new UserFacingError("할당자나 보고자 없이 이슈에 대한 알림을 생성할 수 없습니다."); } // 이슈에 할당된 사용자를 가져옵니다. const user = await Users.getUserByIdAsync(issue.assignee); // 이슈를 보고한 사용자를 가져옵니다. const issueReporter = await Users.getUserByIdAsync(issue.reporter); return [user, issueReporter]; } }