Skip to main content

Rappelant aux utilisateurs inactifs d’utiliser leur licence Copilot GitHub

Utilisez l’API GitHub pour identifier les utilisateurs inactifs et les aider à get started.

Qui peut utiliser cette fonctionnalité ?

Organization owners and billing managers

GitHub Copilot Business or GitHub Copilot Enterprise

Lorsque vous déployez GitHub Copilot dans une entreprise, il est important de suivre les utilisateurs qui utilisent leur licence Copilot, afin de pouvoir répondre efficacement en réaffectant des licences inutilisées ou en aidant les personnes à get started avec Copilot.

Vous pouvez utiliser le point de terminaison d’API Répertorier toutes les attributions de sièges Copilot pour une organisation afin de trouver la dernière date d’activité pour chaque utilisateur auquel une licence est attribuée dans une organisation. Ensuite, vous pouvez répondre automatiquement en filtrant les utilisateurs qui n’ont pas utilisé leur licence pendant un certain temps et en envoyant un rappel à ces utilisateurs.

Écriture du message de rappel

Votre rappel aux utilisateurs inactifs doit aider les utilisateurs à surmonter les obstacles courants à l'adoption de Copilot. Nous vous recommandons d’identifier des bloqueurs spécifiques pour votre entreprise en exécutant des enquêtes ou en interviewant des développeurs.

Par exemple, le message peut inclure des informations et des liens pour aider les utilisateurs :

  • Installer Copilot dans leur environnement.
  • Configurez Copilot pour fonctionner avec le proxy ou le pare-feu de votre entreprise.
  • Tirer le meilleur parti de Copilot dans leur travail quotidien.

Vous devez également communiquer clairement toute autre action que vous effectuerez si la licence continue d’être inutilisée, par exemple la révocation de la licence de l’utilisateur.

Exemple de rappel

Dans la section suivante, nous allons utiliser ce message dans une automatisation qui crée un problème affecté à chaque utilisateur inactif.

Nous avons remarqué que vous n’avez pas utilisé votre licence affectée pour GitHub Copilot en 30 jours. Voici quelques ressources qui peuvent vous aider à get started :

Si vous n’avez plus besoin d’accéder à Copilot, veuillez nous en informer dans ce ticket. Si votre licence reste inactive pendant plus de 30 jours, nous le révoquez pour libérer access pour un autre utilisateur.

Exemple de rappel dans 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.

Automatiser le rappel avec GitHub Actions

L’exemple de flux de travail suivant utilise l’API pour identifier les utilisateurs d’une organisation qui n’ont pas utilisé leur licence pendant 30 jours ou qui ne l’ont jamais utilisée depuis l’attribution du siège, puis crée un problème attribué à chaque utilisateur. Il s’agit d’un exemple simple que vous pouvez adapter pour répondre à vos besoins.

Pour utiliser ce flux de travail :

  1. Créez une étiquette dans le dépôt où les tickets de rappel seront créés. Appeler le label copilot-reminder. Nous allons utiliser cette étiquette pour vérifier si un problème de rappel est déjà ouvert pour chaque utilisateur inactif.

    Pour créer une étiquette, voir Gestion des étiquettes.

  2. Enregistrez votre message de rappel, tel que celui fourni dans Exemple de rappel dans Markdown, sous la forme d’une variable GitHub Actions dans votre référentiel ou votre organisation. Appeler la variable COPILOT_REMINDER_MESSAGE.

    Pour créer une variable, voir Stocker des informations dans des variables.

  3. Créez un personal access token avec l’autorisation d’appeler le point de terminaison d’API Répertorier toutes les attributions de sièges Copilot pour une organisation. Par exemple, créez un jeton affiné avec les détails suivants :

    • propriétaire de ressource: l’organisation où vous recherchez des utilisateurs inactifs.
    • Autorisations de l’organisation : GitHub Copilot Business (en lecture seule).

    Pour créer un jeton, consultez Gestion de vos jetons d’accès personnels.

  4. Enregistrez le jeton d'accès sous la forme d'un secret GitHub Actions dans votre référentiel ou organisation. Appelez le secret COPILOT_LICENSE_READ.

    Pour créer un secret, consultez Utilisation de secrets dans GitHub Actions.

  5. À l’aide de l’exemple ci-dessous, créez le workflow dans le dépôt où vous souhaitez que les tickets de rappel soient créés.

    Si vous ne connaissez pas GitHub Actions, consultez Démarrage rapide pour GitHub Actions.

  6. Si vous souhaitez créer les problèmes dans un référentiel autre que celui dans lequel se trouve le flux de travail, remplacez ${{ github.repository }} dans les commandes gh par le nom du référentiel où vous souhaitez que les problèmes de rappel soient créés. Par exemple : octo-org/octo-repo.

Exemple de flux de travail

Remarque

Cet exemple part du principe que vous attribuez des licences via une organisation. Des points de terminaison d’API similaires existent pour les comptes d’entreprise et les équipes d’entreprise. Consultez Points de terminaison d’API REST pour la gestion des utilisateurs Copilot.

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 }}

Pour approfondir