Skip to main content

Напоминание неактивным пользователям использовать лицензию GitHub Copilot

Используйте API GitHub для выявления неактивных пользователей и помощи им в get started.

Кто может использовать эту функцию?

Organization owners and billing managers

GitHub Copilot Бизнес or GitHub Copilot Энтерпрайз

Когда вы внедряете GitHub Copilot в бизнесе, важно отслеживать, какие пользователи используют свою лицензию Copilot, чтобы эффективно реагировать, переназначая неиспользуемые лицензии или помогая людям get started с Copilot.

Список всех назначений мест Copilot можно использовать для конечной точки API организации , чтобы найти дату последнего действия для каждого пользователя, которому назначена лицензия в организации. Затем вы можете автоматически реагировать, отфильтровав пользователей, которые не использовали свою лицензию в течение определенного периода времени и отправив напоминание этим пользователям.

Написание сообщения напоминания

Напоминание о неактивных пользователях должно помочь пользователям получить прошлые распространенные блокировщики внедрения для Copilot. Мы рекомендуем определить конкретные блокировщики для вашей компании, выполнив опросы или интервью разработчиков.

Например, сообщение может содержать сведения и ссылки, чтобы помочь пользователям:

  • Установите Copilot в своей среде.
  • Настройте Copilot для работы с прокси-сервером или брандмауэром вашей компании.
  • Получите большую часть данных Copilot в повседневной работе.

Вы также должны четко сообщить о любых дальнейших действиях, которые вы будете предпринимать, если лицензия продолжает оставаться неиспользуемой, например отзыв лицензии пользователя.

Пример напоминания

В следующем разделе мы будем использовать это сообщение в службе автоматизации, которая создает проблему, назначенную каждому неактивного пользователя.

Мы заметили, что вы не использовали назначенную лицензию для GitHub Copilot в течение 30 дней. Вот несколько ресурсов, которые могут помочь вам get started:

Если вам больше не нужно access Copilot, пожалуйста, сообщите нам об этом выпуске. Если ваша лицензия останется неактивной ещё 30 дней, мы аннулируем её, чтобы освободить access для другого пользователя.

Пример напоминания в 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. Создайте personal access token с разрешением на вызов списка всех назначений мест Copilot для конечной точки API организации . Например, создайте подробный маркер со следующими сведениями: * Владелец ресурса: организация, в которой вы ищете неактивных пользователей. * Разрешения организации: GitHub Copilot Бизнес (только для чтения).

    Чтобы создать токена, см. Управление личными маркерами доступа.

  4. Сохраните access токен как GitHub Actions секрет в вашем репозитории или организации. Вызовите секрет COPILOT_LICENSE_READ.

    Чтобы создать секрет, см. Использование секретов в GitHub Actions.

  5. В приведенном ниже примере создайте рабочий процесс в репозитории, в котором необходимо создать проблемы с напоминанием.

    Если вы не знакомы с GitHub Actions, см. раздел Быстрый старт для GitHub Actions.

  6. Если вы хотите создать задачи в репозитории, отличном от того, в котором находится рабочий процесс, замените ${{ github.repository }} в командах gh на имя репозитория, в котором нужны проблемы с напоминанием. Например: octo-org/octo-repo.

Пример рабочего процесса

Примечание.

В этом примере предполагается, что вы назначаете лицензии через организацию. Аналогичные конечные точки API существуют для корпоративных учетных записей и корпоративных команд. См . раздел AUTOTITLE.

YAML
name: Remind inactive users about GitHub Copilot license
on:

Name your workflow

  workflow_dispatch:

Run on demand (enables Run workflow button on the Actions tab to easily trigger a run manually)

  schedule:
    - cron: '0 8 * * *'
jobs:
  context-log:
    runs-on: ubuntu-latest

Run the workflow every day at 8am UTC

    permissions:
      contents: read
      issues: write
    steps:
      - name: Check last GitHub Copilot activity
        id: check-last-activity
        run: |

Modify the default permissions granted to GITHUB_TOKEN

          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/${{ github.repository_owner }}/copilot/billing/seats)
          echo "Raw Response from gh api:"
          echo "$RESPONSE"

List all GitHub Copilot seat assignments for an organization

          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')
            CREATED_AT=$(echo "$seat" | jq -r '.created_at')

Parse and check each user's last_activity_at and created_at

            EXISTING_ISSUES=$(gh issue list --repo ${{ github.repository }} --assignee $LOGIN --label 'copilot-reminder' --json id)

List all open issues with label copilot-reminder

            if [ "$LAST_ACTIVITY" = "null" ]; then
              LAST_ACTIVITY_DATE=$(date -d "$CREATED_AT" +%s)
            else
              LAST_ACTIVITY_DATE=$(date -d "$LAST_ACTIVITY" +%s)
            fi
            THIRTY_DAYS_AGO=$(date -d "30 days ago" +%s)

Get last activity date and 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"
              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')"
            else
              echo "User $LOGIN is active or already has an assigned reminder issue. Last activity: $LAST_ACTIVITY"
            fi
          done

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

        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

Set the GH_TOKEN, required for the 'gh issue' commands

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

on:
  # Run on demand (enables `Run workflow` button on the Actions tab to easily trigger a run manually)
  workflow_dispatch:
  # Run the workflow every day at 8am UTC
  schedule:
    - cron: '0 8 * * *'

jobs:
  context-log:
    runs-on: ubuntu-latest

    # Modify the default permissions granted to GITHUB_TOKEN
    permissions:
      contents: read
      issues: write

    steps:
      - name: Check last GitHub Copilot activity
        id: check-last-activity
        run: |
          # List all GitHub Copilot seat assignments for an organization
          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/${{ github.repository_owner }}/copilot/billing/seats)
          echo "Raw Response from gh api:"
          echo "$RESPONSE"

          # Parse and check each user's `last_activity_at` and `created_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')
            CREATED_AT=$(echo "$seat" | jq -r '.created_at')

            # List all open issues with label `copilot-reminder`
            EXISTING_ISSUES=$(gh issue list --repo ${{ github.repository }} --assignee $LOGIN --label 'copilot-reminder' --json id)

            # Get last activity date and convert dates to seconds since epoch for comparison
            if [ "$LAST_ACTIVITY" = "null" ]; then
              LAST_ACTIVITY_DATE=$(date -d "$CREATED_AT" +%s)
            else
              LAST_ACTIVITY_DATE=$(date -d "$LAST_ACTIVITY" +%s)
            fi
            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"

              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')"
            else
              echo "User $LOGIN is active or already has an assigned reminder issue. Last activity: $LAST_ACTIVITY"
            fi
          done

        # Set the GH_TOKEN, required for the 'gh issue' commands
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

Дополнительные материалы

  •         [AUTOTITLE](/copilot/reference/metrics-data#last_activity_at)
    
  •         [автозаголовок](/copilot/rolling-out-github-copilot-at-scale/driving-copilot-adoption-in-your-company)
    
  •         [автозаголовок](/copilot/rolling-out-github-copilot-at-scale/analyzing-usage-over-time-with-the-copilot-metrics-api)