Skip to main content

비활성 사용자에게 GitHub Copilot 라이선스를 사용하도록 미리 알림

GitHub API를 사용하여 비활성 사용자를 식별하고 시작하는 데 도움을 줍니다.

누가 이 기능을 사용할 수 있나요?

Organization owners and billing managers

GitHub Copilot Business or GitHub Copilot Enterprise

비즈니스에서 GitHub Copilot을 배포할 때 어떤 사용자가 Copilot 라이선스를 사용하고 있는지 추적하는 것이 중요합니다. 그러면 사용하지 않는 라이선스를 다시 할당하거나 사람들이 Copilot을 시작하도록 지원하여 효과적으로 대응할 수 있습니다.

조직의 모든 Copilot 사용자 할당 나열 API 엔드포인트를 사용하여 조직에서 라이선스가 할당된 각 사용자의 마지막 활동 날짜를 찾을 수 있습니다. 그런 다음 일정 시간 동안 라이선스를 사용하지 않은 사용자를 필터링하고 해당 사용자에게 미리 알림을 보내 자동으로 응답할 수 있습니다.

미리 알림 메시지 작성

비활성 사용자를 위한 미리 알림은 사용자가 Copilot에 대한 일반적인 채택 방해 요인을 극복하는 데 도움이 됩니다. 설문 조사를 실시하거나 개발자를 인터뷰하여 회사의 특정 방해 요인을 식별하는 것이 좋습니다.

예를 들어 메시지에는 사용자에게 도움이 되는 정보 및 링크가 포함될 수 있습니다.

  • 해당 환경에 Copilot을 설치합니다.
  • Copilot을 설정하여 회사의 프록시 또는 방화벽을 사용합니다.
  • 일상적인 작업에서 Copilot을 최대한 활용합니다.

또한 사용자 라이선스 해지와 같이 라이선스가 계속 사용되지 않는 경우에는 수행할 추가 조치를 명확하게 전달해야 합니다.

미리 알림 예제

다음 섹션에서 각 비활성 사용자에게 할당된 문제를 만드는 자동화에서 이 메시지를 사용합니다.

30일 동안 GitHub Copilot에 할당된 라이선스를 사용하지 않은 것으로 확인되었습니다. 다음은 시작하는 데 도움이 될 수 있는 몇 가지 리소스입니다.

Copilot에 더 이상 액세스할 필요가 없는 경우 이 문제에 대해 알려주세요. 라이선스가 30일 동안 비활성 상태로 유지되는 경우 다른 사용자가 액세스를 해제할 수 있도록 라이선스를 해지해 드립니다.

Markdown의 미리 알림 예제

Markdown
We noticed you haven't used your assigned license for GitHub Copilot in 30 days. Here are some resources that might help you get started:

* 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).
* 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).
* For examples related to specific tasks, see [Copilot Chat Cookbook](https://docs.github.com/en/copilot/example-prompts-for-github-copilot-chat).

If 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.

GitHub Actions를 사용하여 미리 알림 자동화

다음 예제 워크플로에서는 API를 사용하여 30일 동안 라이선스를 사용하지 않은 조직의 사용자를 식별한 다음, 각 사용자에게 할당된 문제를 만듭니다. 이는 요구 사항에 맞게 조정할 수 있는 간단한 예입니다.

다음과 같은 경우 이 워크플로를 사용합니다.

  1. 미리 알림 문제가 만들어지는 리포지토리에 레이블을 만듭니다. copilot-reminder 레이블을 호출합니다. 이 레이블을 사용하여 각 비활성 사용자에 대해 미리 알림 문제가 이미 열려 있는지 확인합니다.

    레이블을 만들려면 레이블 관리을(를) 참조하세요.

  2. Markdown의 미리 알림 예제에 제공된 것과 같은 미리 알림 메시지를 리포지토리 또는 조직의 GitHub Actions 변수로 저장합니다. COPILOT_REMINDER_MESSAGE 변수를 호출합니다.

    변수를 만들려면 변수에 정보 저장을(를) 참조하세요.

  3. 조직의 모든 Copilot 사용자 할당 나열 API 엔드포인트를 호출 할 수 있는 권한이 있는 personal access token을 만듭니다. 예를 들어 다음 세부 정보를 사용하여 세분화된 토큰을 만듭니다.

    • 리소스 소유자: 비활성 사용자를 찾고 있는 조직입니다.
    • 조직 권한: GitHub Copilot Business(읽기 전용)

    토큰을 만들려면 개인용 액세스 토큰 관리을(를) 참조하세요.

  4. 액세스 토큰을 리포지토리 또는 조직에 GitHub Actions 비밀로 저장합니다. COPILOT_LICENSE_READ 비밀을 호출합니다.

    비밀을 만들려면 GitHub Actions에서 비밀 사용을(를) 참조하세요.

  5. 아래 예제를 사용하여 미리 알림 문제를 만들 리포지토리에 워크플로를 만듭니다.

    GitHub Actions를 새로 사용하는 경우 GitHub Actions용 빠른 시작을(를) 참조하세요.

  6. 워크플로에서 gh 명령의 ORG/REPO 자리 표시자를 미리 알림 문제를 만들 리포지토리의 이름으로 바꿉니다. 예: octo-org/octo-repo

예시 워크플로

Note

이 예제에서는 조직을 통해 라이선스를 할당하는 것으로 가정합니다. Copilot Business에 전용 엔터프라이즈 계정을 사용하는 경우 다른 API 엔드포인트를 사용해야 합니다. Copilot 비즈니스 전용 기업 설정(개인 계정)을(를) 참조하세요.

YAML
name: Remind inactive users about Copilot license

Name your workflow

on:
  schedule:
    - cron: '0 8 * * *'
jobs:
  context-log:
    runs-on: ubuntu-latest
    steps:
      - name: Check Copilot Last Activity
        id: check-last-activity
        run: |

Run the workflow every day at 8am UTC

          RESPONSE=$(gh api \
            -H "Accept: application/vnd.github+json" \
            -H "X-GitHub-Api-Version: 2022-11-28" \
            -H "Authorization: Bearer ${{ secrets.COPILOT_LICENSE_READ }}" \
            /orgs/$ORGANIZATION_VAR/copilot/billing/seats)
          echo "Raw Response from gh api:"
          echo "$RESPONSE"

Call the user management API

          echo "$RESPONSE" | jq -c '.seats[]' | while read -r seat; do
            LOGIN=$(echo "$seat" | jq -r '.assignee.login')
            LAST_ACTIVITY=$(echo "$seat" | jq -r '.last_activity_at')

Parse and check each user's last_activity_at

            EXISTING_ISSUES=$(gh issue list --repo ORG/REPO --assignee $LOGIN --label 'copilot-reminder' --json id)

Replace ORG/REPO with the repository name

            LAST_ACTIVITY_DATE=$(date -d "$LAST_ACTIVITY" +%s)
            THIRTY_DAYS_AGO=$(date -d "30 days ago" +%s)

Convert dates to seconds since epoch for comparison

            if [ "$LAST_ACTIVITY_DATE" -lt "$THIRTY_DAYS_AGO" ] && [ "$EXISTING_ISSUES" = "[]" ]; then
              echo "User $LOGIN has not been active in the last 30 days. Last activity: $LAST_ACTIVITY"

Create issues for inactive users who don't have an existing open issue

              NEW_ISSUE_URL="$(gh issue create --title "Reminder about your GitHub Copilot license" --body "${{ vars.COPILOT_REMINDER_MESSAGE }}" --repo ORG/REPO --assignee $LOGIN --label 'copilot-reminder')"
            else
              echo "User $LOGIN is active or already has an assigned reminder issue. Last activity: $LAST_ACTIVITY"
            fi
          done

Replace ORG/REPO with the repository name

        env:
          GITHUB_TOKEN: ${{ github.token }}

Set the GITHUB_TOKEN, required for the gh issue commands

# Name your workflow
name: Remind inactive users about Copilot license

# Run the workflow every day at 8am UTC
on:
  schedule:
    - cron: '0 8 * * *'

jobs:
  context-log:
    runs-on: ubuntu-latest
    steps:
      - name: Check Copilot Last Activity
        id: check-last-activity
        run: |
          # Call the user management API
          RESPONSE=$(gh api \
            -H "Accept: application/vnd.github+json" \
            -H "X-GitHub-Api-Version: 2022-11-28" \
            -H "Authorization: Bearer ${{ secrets.COPILOT_LICENSE_READ }}" \
            /orgs/$ORGANIZATION_VAR/copilot/billing/seats)
          echo "Raw Response from gh api:"
          echo "$RESPONSE"

          # Parse and check each user's `last_activity_at`
          echo "$RESPONSE" | jq -c '.seats[]' | while read -r seat; do
            LOGIN=$(echo "$seat" | jq -r '.assignee.login')
            LAST_ACTIVITY=$(echo "$seat" | jq -r '.last_activity_at')

            # Replace ORG/REPO with the repository name
            EXISTING_ISSUES=$(gh issue list --repo ORG/REPO --assignee $LOGIN --label 'copilot-reminder' --json id)

            # Convert dates to seconds since epoch for comparison
            LAST_ACTIVITY_DATE=$(date -d "$LAST_ACTIVITY" +%s)
            THIRTY_DAYS_AGO=$(date -d "30 days ago" +%s)

            # Create issues for inactive users who don't have an existing open issue
            if [ "$LAST_ACTIVITY_DATE" -lt "$THIRTY_DAYS_AGO" ] && [ "$EXISTING_ISSUES" = "[]" ]; then
              echo "User $LOGIN has not been active in the last 30 days. Last activity: $LAST_ACTIVITY"

              # Replace ORG/REPO with the repository name
              NEW_ISSUE_URL="$(gh issue create --title "Reminder about your GitHub Copilot license" --body "${{ vars.COPILOT_REMINDER_MESSAGE }}" --repo ORG/REPO --assignee $LOGIN --label 'copilot-reminder')"
            else
              echo "User $LOGIN is active or already has an assigned reminder issue. Last activity: $LAST_ACTIVITY"
            fi
          done

        # Set the GITHUB_TOKEN, required for the `gh issue` commands
        env:
          GITHUB_TOKEN: ${{ github.token }}

추가 참고 자료