一键导入
zendesk-query
Query Zendesk support tickets and comments for Emplois de l'Inclusion (read-only). (project)
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Query Zendesk support tickets and comments for Emplois de l'Inclusion (read-only). (project)
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
Indicateurs du Réseau pour l'emploi (France Travail) — accès/présence en emploi, formation, recrutement, RSA, par territoire et par mois. Données agrégées, nationales, couvrant tout le réseau (pas seulement nos services). À distinguer d'autometa_tables_db.
Lire et écrire dans Notion — interroger une base de données ou une page, et publier des rapports. À utiliser dès qu'une demande référence une page/base Notion (URL app.notion.com, ou ancien notion.so).
Create a new dashboard (TDB) — scaffolds files and inserts a row in the dashboards table. Use this skill instead of writing files directly.
Update a dashboard's metadata (title, description, tags, flags, archive). MUST be invoked whenever the user wants to modify an existing dashboard — guarantees the right slug is targeted and reloads coding conventions.
Composer un system prompt riche en contexte métier et lancer un run autometa-jobs à partir de l'intention de l'utilisateur. À utiliser quand l'utilisateur veut une analyse autonome et longue (minutes à heures), trop lourde ou trop lente pour le chat interactif — par ex. « lance un job qui analyse tous les services Dora ».
Exporter le résultat d'une requête SQL vers S3 sous forme de jeu de données accessible par un job (sqlite/jsonl/csv) avec une URL présignée. À utiliser quand vous composez un run autometa-jobs qui doit analyser des données trop volumineuses pour être embarquées dans le prompt.
基于 SOC 职业分类
| name | zendesk_query |
| description | Query Zendesk support tickets and comments for Emplois de l'Inclusion (read-only). (project) |
Lecture seule des tickets et commentaires Zendesk du support Emplois.
Variables d'environnement (cf. .env.example) :
ZENDESK_SUBDOMAIN — sous-domaine <subdomain>.zendesk.comZENDESK_EMAIL — email du compte APIZENDESK_API_TOKEN — jeton API (Admin Center → Apps → API)L'instance par défaut est emplois. Configurée dans config/sources.yaml.
from lib.sources import get_zendesk
zd = get_zendesk()
ticket = zd.get_ticket(12345)
# ZendeskTicket(id=12345, subject=..., status="solved", tags=[...], ...)
comments = zd.get_ticket_comments(12345)
# [ZendeskComment(public=True, author_role="end-user", body=..., ...), ...]
first_reply = zd.first_user_reply(12345)
# Premier commentaire end-user après la première réponse agent (la « clarification »).
for r in zd.iter_tickets([1, 2, 3], with_comments=True):
# TicketResult(ticket_id=1, ticket=ZendeskTicket(...), comments=[...], error=None)
if r.error:
continue
print(r.ticket.subject, len(r.comments or []))
# Recherche full-text (filtre `type:ticket` ajouté automatiquement)
hits = zd.search_tickets("status:open tags:bug created>2026-01-01", sort_by="created_at", sort_order="desc", max_results=50)
n = zd.count_tickets("status:open tags:bug created>2026-01-01")
print(f"{n} tickets correspondent, {len(hits)} chargés")
| Méthode | Retour | Usage |
|---|---|---|
get_ticket(ticket_id) | ZendeskTicket | Métadonnées d'un ticket |
get_ticket_comments(ticket_id) | list[ZendeskComment] | Commentaires (oldest first, première page uniquement) |
first_user_reply(ticket_id) | ZendeskComment | None | Première réponse end-user après le premier message agent |
iter_tickets(ids, with_comments=False) | itérateur TicketResult | Boucle batch avec gestion d'erreur par ticket et log de progression |
search_tickets(query, sort_by=None, sort_order=None, max_results=100) | list[ZendeskTicket] | Recherche full-text via /search.json ; type:ticket ajouté automatiquement, suit next_page jusqu'à max_results |
count_tickets(query) | int | Nombre total de tickets correspondants (/search/count.json), sans coût pagination |
check_auth() | dict | Vérifie les credentials (users/me) |
Les tickets de support contiennent parfois des NIR (numéros de sécurité sociale) saisis par les usagers — mesuré à ~1,3 % des tickets sur un échantillon de 300.
Le client les remplace automatiquement par [NIR-ANONYMISÉ] dans les sujets de tickets et les commentaires (body et html_body). Un NIR n'est donc jamais exposé à l'agent ni restitué à l'utilisateur.
La détection valide la clé INSEE (97 - (13 premiers chiffres mod 97)), ce qui évite d'effacer des numéros de téléphone, SIRET ou références de commande. Les séparateurs (espaces, points, tirets) sont gérés.
Le code vit dans lib/pii.py, indépendant de Zendesk : redact_nir(texte) est réutilisable sur n'importe quelle source de texte libre (commentaires Matomo, exports Metabase, contenus de tableaux de bord…).
load_api() # anonymisation active
load_api().redact # -> True
ZendeskAPI(..., redact=False) # désactivation explicite — à n'utiliser que hors restitution
Ne jamais désactiver l'anonymisation pour produire une réponse, un rapport ou un tableau de bord destiné à un utilisateur.
Retry-After et réessaie jusqu'à 3 fois avant de lever ZendeskError(429, ...).ZendeskError(status_code, message) sur erreur HTTP non-200.users pour exposer author_role (end-user / agent / admin).iter_tickets (logue tous les 500 et continue malgré les erreurs ponctuelles) plutôt que de boucler à la main.iter_tickets(with_comments=True) fait 2 appels par ticket (métadonnées + commentaires). Pour des batches volumineux, prévoir le coût.get_ticket_comments ne lit que la première page de la réponse Zendesk (~100 commentaires max). Les tickets longs (chaînes de support très actives) seront tronqués sans erreur. Si ce cas devient bloquant, ajouter le suivi de next_page dans _get.