Objectif : un formulaire de contact que n'importe qui remplit sur votre site, et qui crée automatiquement un ticket (ou une tâche) dans Projets/Support.
Prérequis : modules Forms et Projets/Support disponibles ; un JWT de membre.
1. Créer le formulaire couplé à Work¶
FORMS=https://forms.api.puwapi.com
curl -X POST $FORMS/api/forms \
-H "Authorization: Bearer $JWT" -H "Content-Type: application/json" \
-d '{
"title": "Contactez-nous",
"schema": [
{"key":"nom","label":"Votre nom","type":"text","required":true},
{"key":"email","label":"E-mail","type":"email","required":true},
{"key":"sujet","label":"Sujet","type":"text","required":true},
{"key":"message","label":"Message","type":"textarea","required":true}
],
"notifyEmails": ["support@monentreprise.fr"],
"workConfig": {
"createWorkItem": true,
"type": "ticket",
"projectId": "'$PROJECT_ID'",
"fieldMapping": { "title": "sujet", "description": "message" }
}
}'
La réponse contient l'id et surtout le slug public (aléatoire si non fourni).
2. Publier le lien¶
Le formulaire est accessible à https://forms.puwapi.com/{org}/{slug} ({org} = le slug de
votre organisation, {slug} = celui du formulaire). Intégrez ce lien (ou la page) à votre
site.
3. Ce qui se passe à la soumission¶
curl -X POST $FORMS/api/forms/public/<slug>/submit \
-H "Content-Type: application/json" \
-d '{"data": {"nom":"Alice","email":"alice@ex.com","sujet":"Bug login","message":"..."}}'
Côté serveur, dans l'ordre :
- l'organisation est dérivée du slug ;
- si le honeypot est rempli →
200silencieux, rien n'est enregistré ; - si l'origine n'est pas autorisée →
403; - la soumission est persistée ;
workConfig.createWorkItemétant vrai, un ticket est créé dans le projet cible (title←sujet,description←message), best-effort ;- les
notifyEmailsreçoivent la soumission ; l'e-mail du soumetteur reçoit un accusé.
4. Vérifier¶
Le ticket apparaît dans Support/Projets — le tableau se rafraîchit en temps réel. Vous pouvez aussi lister les soumissions :
curl $FORMS/api/forms/$FORM_ID/submissions -H "Authorization: Bearer $JWT"
Points d'attention¶
- Le pont Forms → Work est best-effort : si Work est indisponible, la soumission reste enregistrée (l'item sera simplement absent).
- Pour restreindre aux membres de votre organisation, passez la visibilité à
organization(voir Référence API — Forms).