{"meta":{"title":"비활성 사용자에게 GitHub Copilot 라이선스를 사용하도록 미리 알림","intro":"API를 GitHub 사용하여 비활성 사용자를 식별하고 시작하는 데 도움을 주세요.","product":"GitHub Copilot","breadcrumbs":[{"href":"/ko/copilot","title":"GitHub Copilot"},{"href":"/ko/copilot/tutorials","title":"자습서"},{"href":"/ko/copilot/tutorials/roll-out-at-scale","title":"대규모 배포"},{"href":"/ko/copilot/tutorials/roll-out-at-scale/assign-licenses","title":"라이선스 할당"},{"href":"/ko/copilot/tutorials/roll-out-at-scale/assign-licenses/remind-inactive-users","title":"비활성 사용자 미리 알림"}],"documentType":"article"},"body":"# 비활성 사용자에게 GitHub Copilot 라이선스를 사용하도록 미리 알림\n\nAPI를 GitHub 사용하여 비활성 사용자를 식별하고 시작하는 데 도움을 주세요.\n\n비즈니스에 GitHub Copilot를 배포할 때는 어떤 사용자가 Copilot 라이선스를 사용 중인지 추적하는 것이 중요합니다. 그래야 사용하지 않는 라이선스를 재할당하거나 사용자들이 Copilot를 시작할 수 있도록 지원하는 방식으로 효과적으로 대응할 수 있습니다.\n\n[조직을 위한 모든 Copilot 좌석 할당 나열](/ko/rest/copilot/copilot-user-management#list-all-copilot-seat-assignments-for-an-organization) API 엔드포인트를 사용하여 조직 내에서 라이선스가 할당된 각 사용자의 마지막 활동 날짜를 찾을 수 있습니다. 그런 다음 일정 시간 동안 라이선스를 사용하지 않은 사용자를 필터링하고 해당 사용자에게 미리 알림을 보내 자동으로 응답할 수 있습니다.\n\n## 미리 알림 메시지 작성\n\n비활성 사용자에게 보내는 알림은 사용자가 Copilot의 일반적인 도입 장벽을 극복하도록 돕습니다. 설문 조사를 실시하거나 개발자를 인터뷰하여 회사의 특정 방해 요인을 식별하는 것이 좋습니다.\n\n예를 들어 메시지에는 사용자에게 도움이 되는 정보 및 링크가 포함될 수 있습니다.\n\n* 해당 환경에 Copilot을 설치합니다.\n* 회사의 프록시 또는 방화벽을 사용하도록 설정합니다 Copilot .\n* 일상 업무에서 Copilot를 최대한 활용하세요.\n\n또한 사용자 라이선스 해지와 같이 라이선스가 계속 사용되지 않는 경우에는 수행할 추가 조치를 명확하게 전달해야 합니다.\n\n### 미리 알림 예제\n\n다음 섹션에서 각 비활성 사용자에게 할당된 문제를 만드는 자동화에서 이 메시지를 사용합니다.\n\n> 30일 동안 할당된 라이선스를 GitHub Copilot 사용하지 않은 것으로 확인되었습니다. 다음은 get started 데 도움이 될 수 있는 몇 가지 리소스입니다.\n>\n> * 환경에서 아직 설정 Copilot 하지 않은 경우 [GitHub Copilot을 직접 설정하기](/ko/copilot/how-tos/set-up/set-up-for-self) 또는 [GitHub Copilot 관련된 일반적인 문제 해결](/ko/copilot/how-tos/troubleshoot-copilot/troubleshoot-common-issues)을 참조하세요.\n> * 시작하기에 대한 모범 사례 및 조언은 [GitHub 부필로트 사용에 대한 모범 사례](/ko/copilot/get-started/best-practices) 또는 [GitHub Copilot 채팅에 대한 프롬프트 엔지니어링](/ko/copilot/concepts/prompting/prompt-engineering)을 참조하세요.\n> * 특정 작업과 관련된 예제는 [GitHub Copilot 활용 안내서](/ko/copilot/tutorials/copilot-cookbook) 참조하세요.\n>\n> 더 이상 Copilot에 대한 액세스가 필요하지 않은 경우 이 이슈에서 알려주세요. 라이선스가 30일 동안 비활성 상태로 유지되면 다른 사용자에 대한 access 확보하도록 해지합니다.\n\n#### Markdown의 미리 알림 예제\n\n<!-- markdownlint-disable search-replace -->\n\n```markdown copy\nWe noticed you haven't used your assigned license for GitHub Copilot in 30 days. Here are some resources that might help you get started:\n\n* If you haven't yet set up Copilot in your environment, see [Setting up GitHub Copilot for yourself](https://docs.github.com/en/copilot/setting-up-github-copilot/setting-up-github-copilot-for-yourself) or [Troubleshooting common issues with GitHub Copilot](https://docs.github.com/en/copilot/troubleshooting-github-copilot/troubleshooting-common-issues-with-github-copilot).\n* For best practices and advice on getting started, see [Best practices for using GitHub Copilot](https://docs.github.com/en/copilot/using-github-copilot/best-practices-for-using-github-copilot) or [Prompt engineering for GitHub Copilot](https://docs.github.com/en/copilot/using-github-copilot/prompt-engineering-for-github-copilot).\n* For examples related to specific tasks, see [Copilot Chat Cookbook](https://docs.github.com/en/copilot/example-prompts-for-github-copilot-chat).\n\nIf you no longer need access to Copilot, please let us know in this issue. If your license remains inactive for a further 30 days, we'll revoke it to free up access for another user.\n```\n\n<!-- markdownlint-enable search-replace -->\n\n## GitHub Actions를 사용한 미리 알림 자동화\n\n다음 예제 워크플로에서는 API를 사용하여 30일 동안 라이선스를 사용하지 않았거나 사용자가 할당된 이후로 전혀 사용하지 않은 조직의 사용자를 식별한 다음, 각 사용자에게 할당된 문제를 만듭니다. 이는 요구 사항에 맞게 조정할 수 있는 간단한 예입니다.\n\n다음과 같은 경우 이 워크플로를 사용합니다.\n\n1. 미리 알림 문제가 만들어지는 리포지토리에 레이블을 만듭니다.\n   `copilot-reminder` 레이블을 호출합니다. 이 레이블을 사용하여 각 비활성 사용자에 대해 미리 알림 문제가 이미 열려 있는지 확인합니다.\n\n   레이블을 만들려면 [레이블 관리](/ko/issues/using-labels-and-milestones-to-track-work/managing-labels#creating-a-label)을(를) 참조하세요.\n\n2. [Markdown의 예제 미리 알림에](#example-reminder-in-markdown) 제공된 것과 같은 미리 알림 메시지를 리포지토리 또는 조직의 변수로 GitHub Actions 저장합니다.\n   `COPILOT_REMINDER_MESSAGE` 변수를 호출합니다.\n\n   변수를 만들려면 [변수에 정보 저장](/ko/actions/how-tos/write-workflows/choose-what-workflows-do/use-variables#creating-configuration-variables-for-a-repository)을(를) 참조하세요.\n\n3. personal access token 조직 API 엔드포인트에 [대한 모든 Copilot 사용자 할당 목록을 호출할 수 있는](/ko/rest/copilot/copilot-user-management#list-all-copilot-seat-assignments-for-an-organization) 사용 권한을 만듭니다. 예를 들어 다음 세부 정보를 사용하여 세분화된 토큰을 만듭니다.\n\n   * **리소스 소유자**: 비활성 사용자를 찾고 있는 조직입니다.\n   * **조직 권한**: GitHub Copilot Business (읽기 전용)\n\n   토큰을 만들려면 [개인용 액세스 토큰 관리](/ko/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#creating-a-fine-grained-personal-access-token) 참조하세요.\n\n4. 액세스 토큰을 리포지토리 또는 조직에 비밀로 GitHub Actions 저장합니다.\n   `COPILOT_LICENSE_READ` 표준 함수를 호출합니다.\n\n   비밀을 만들려면 [GitHub Actions에서 비밀 사용](/ko/actions/how-tos/write-workflows/choose-what-workflows-do/use-secrets#creating-secrets-for-a-repository) 참조하세요.\n\n5. 아래 예제를 사용하여 미리 알림 문제를 만들 리포지토리에 워크플로를 만듭니다.\n\nGitHub Actions이(가) 처음이라면 [GitHub Actions에 대한 빠른 시작 가이드](/ko/actions/get-started/quickstart)을(를) 참조하세요.\n\n1. 워크플로가 있는 리포지토리가 아닌 다른 리포지토리에서 문제를 만들려면 `${{ github.repository }}` 명령의 `gh` 미리 알림 문제를 만들 리포지토리의 이름으로 바꿉니다. 예: `octo-org/octo-repo`\n\n### 예시 워크플로\n\n> \\[!NOTE] 이 예제에서는 조직을 통해 라이선스를 할당하는 것으로 가정합니다. 엔터프라이즈 계정 및 엔터프라이즈 팀에 대해 유사한 API 엔드포인트가 있습니다.\n> [Copilot 사용자 관리를 위한 REST API 엔드포인트](/ko/rest/copilot/copilot-user-management)을(를) 참조하세요.\n\n<!-- markdownlint-disable GHD021 -->\n\n```yaml annotate\n# Name your workflow\nname: Remind inactive users about GitHub Copilot license\n\non:\n  # Run on demand (enables `Run workflow` button on the Actions tab to easily trigger a run manually)\n  workflow_dispatch:\n  # Run the workflow every day at 8am UTC\n  schedule:\n    - cron: '0 8 * * *'\n\njobs:\n  context-log:\n    runs-on: ubuntu-latest\n\n    # Modify the default permissions granted to GITHUB_TOKEN\n    permissions:\n      contents: read\n      issues: write\n\n    steps:\n      - name: Check last GitHub Copilot activity\n        id: check-last-activity\n        run: |\n          # List all GitHub Copilot seat assignments for an organization\n          RESPONSE=$(gh api \\\n            -H \"Accept: application/vnd.github+json\" \\\n            -H \"X-GitHub-Api-Version: 2022-11-28\" \\\n            -H \"Authorization: Bearer ${{ secrets.COPILOT_LICENSE_READ }}\" \\\n            /orgs/${{ github.repository_owner }}/copilot/billing/seats)\n          echo \"Raw Response from gh api:\"\n          echo \"$RESPONSE\"\n\n          # Parse and check each user's `last_activity_at` and `created_at`\n          echo \"$RESPONSE\" | jq -c '.seats[]' | while read -r seat; do\n            LOGIN=$(echo \"$seat\" | jq -r '.assignee.login')\n            LAST_ACTIVITY=$(echo \"$seat\" | jq -r '.last_activity_at')\n            CREATED_AT=$(echo \"$seat\" | jq -r '.created_at')\n\n            # List all open issues with label `copilot-reminder`\n            EXISTING_ISSUES=$(gh issue list --repo ${{ github.repository }} --assignee $LOGIN --label 'copilot-reminder' --json id)\n\n            # Get last activity date and convert dates to seconds since epoch for comparison\n            if [ \"$LAST_ACTIVITY\" = \"null\" ]; then\n              LAST_ACTIVITY_DATE=$(date -d \"$CREATED_AT\" +%s)\n            else\n              LAST_ACTIVITY_DATE=$(date -d \"$LAST_ACTIVITY\" +%s)\n            fi\n            THIRTY_DAYS_AGO=$(date -d \"30 days ago\" +%s)\n\n            # Create issues for inactive users who don't have an existing open issue\n            if [ \"$LAST_ACTIVITY_DATE\" -lt \"$THIRTY_DAYS_AGO\" ] && [ \"$EXISTING_ISSUES\" = \"[]\" ]; then\n              echo \"User $LOGIN has not been active in the last 30 days. Last activity: $LAST_ACTIVITY\"\n\n              NEW_ISSUE_URL=\"$(gh issue create --title \"Reminder about your GitHub Copilot license\" --body \"${{ vars.COPILOT_REMINDER_MESSAGE }}\" --repo ${{ github.repository }} --assignee $LOGIN --label 'copilot-reminder')\"\n            else\n              echo \"User $LOGIN is active or already has an assigned reminder issue. Last activity: $LAST_ACTIVITY\"\n            fi\n          done\n\n        # Set the GH_TOKEN, required for the 'gh issue' commands\n        env:\n          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n```\n\n<!-- markdownlint-enable GHD021 -->\n\n## 추가 참고 자료\n\n* [GitHub Copilot 대한 메트릭 데이터 속성](/ko/copilot/reference/metrics-data#last_activity_at)\n* [회사에서 GitHub Copilot 도입 촉진](/ko/copilot/tutorials/roll-out-at-scale/enable-developers/drive-adoption)\n* [Copilot 사용 메트릭을 사용하여 라이선스 활성화 및 초기 사용 추적](/ko/copilot/tutorials/roll-out-at-scale/assign-licenses/track-usage-and-adoption)"}