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 pas encore configuré Copilot dans votre environnement, consultez Configuration de GitHub Copilot pour vous-même ou Résolution des problèmes courants liés à GitHub Copilot.
- Pour obtenir des conseils et des bonnes pratiques sur getting started, consultez Meilleures pratiques pour l’utilisation de GitHub Copilot ou Ingénierie rapide pour GitHub Copilot Chat.
- Pour obtenir des exemples liés à des tâches spécifiques, consultez Cookbook GitHub Copilot Chat.
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
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.
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 :
-
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.
-
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.
-
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.
-
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.
-
À 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.
-
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 commandesghpar 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.
# 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 }}
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-latestRun 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
doneCreate 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 }}