Formulaires Widget
Utilisez l'outil de formulaire au lieu d'écrire du balisage à la main : le chat de l'éditeur affiche le formulaire sous forme de carte interactive et renvoie la réponse structurée de l'utilisateur.
Règle d'exécution
Appelez ask_followup_questions. Il sérialise vos champs dans la carte de formulaire native de l'éditeur ; la soumission de l'utilisateur revient comme son prochain message.
Planifiez l'intégralité du questionnaire avant d'appeler l'outil. Envoyez un seul formulaire final, pas un formulaire d'essai suivi d'un formulaire corrigé. L'outil supporte au maximum 12 champs ; si l'utilisateur demande plus de questions, fusionnez les invites connexes en champs combinés avant le premier appel.
Après avoir appelé ask_followup_questions, arrêtez le tour et attendez que la réponse soumise apparaisse dans le chat. N'appliquez pas de choix, ne créez pas d'actifs et ne continuez pas la planification à partir d'une recommandation tant que la sélection de l'utilisateur n'est pas présente dans la conversation.
Correspondance des champs supportés
Construisez un tableau fields. Écrivez chaque chaîne visible dans la langue de la conversation de l'utilisateur.
<form-single>natif ->{ type: "single", variant: "default" }<form-multi>natif ->{ type: "multi", variant: "default" }<form-text>/<form-textarea>natif ->{ type: "text" }<form-visual>natif ->{ type: "single", variant: "visual" }- Cartes d'audition vocale ->
{ type: "single", variant: "voice" } - Cartes de scénario de démarrage natif ->
{ type: "single", variant: "scenario" }
Ton du texte du formulaire
Pour le texte du formulaire (title, prompt, fields[].label, submitLabel et messagePrefix), écrivez comme si OpenChatCut était un partenaire de réalisation vidéo compétent invitant l'utilisateur à décrire ce qu'il veut, pas comme une enquête rigide.
Visez :
- Un ton chaleureux, ouvert et orienté action. Le texte doit suggérer « choisissez le besoin vidéo le plus proche ou dites-moi simplement votre idée ; nous pouvons trouver une solution ensemble ».
- Court et facile à parcourir. Utilisez une phrase naturelle pour
promptet des étiquettes de questions concises. - Un cadrage honnête des capacités. OpenChatCut peut aider avec de nombreux workflows vidéo, mais ne prétendez pas à des capacités non supportées et ne garantissez pas un résultat avant que les entrées ne soient connues.
- La langue de l'utilisateur et les termes produits locaux. Conservez « OpenChatCut », « B-roll », « Motion Graphics », « MG 动画 », les noms de modèles/produits et les noms de plateformes sous leurs formes établies.
- Un langage créatif tourné vers l'utilisateur. Pour les formulaires de planification précoce ou de recueil d'idées créatives, préférez des termes naturels comme idée, direction, plan, histoire, liste de plans, public, ambiance ou besoin vidéo plutôt que le langage de documentation de production interne.
Évitez les étiquettes rigides comme « Sélectionner le type de vidéo », « Veuillez choisir le type de vidéo pour ce projet » ou « Quel type de vidéo voulez-vous faire ? » pour la saisie de scénario, sauf si l'hôte n'a pas la place pour un texte plus chaleureux.
Pour un formulaire de saisie de scénario, préférez un texte comme :
{
"title": "Que voulez-vous créer ?",
"prompt": "Choisissez le scénario vidéo le plus proche, ou choisissez Autre chose et décrivez votre idée.",
"submitLabel": "Commencer la création",
"messagePrefix": "Je veux commencer avec cette direction vidéo :",
"fields": [
{
"id": "scenario",
"label": "Quel scénario correspond le mieux à votre vidéo ?",
"type": "single",
"variant": "scenario",
"otherPlaceholder": "Par exemple : transformer mes séquences de voyage en vlog d'ambiance / réaliser une vidéo de lancement pour un nouveau produit"
}
]
}
N'incluez pas de questions de téléchargement de fichiers dans les formulaires. Si une tâche nécessite réellement des médias sources et que le projet/chat n'en a pas déjà, demandez séparément à l'utilisateur de télécharger des fichiers dans l'éditeur (glisser-déposer ou le bouton d'upload, ou coller dans le composeur du chat). Le téléchargement de fichiers n'est pas un prérequis par défaut pour chaque questionnaire ; ne le demandez que lorsque l'étape d'édition suivante dépend de médias manquants.
Pour les champs de choix :
- Utilisez
idpour la valeur interne dont le prochain appel d'outil a besoin. - Utilisez
labelpour ce que l'utilisateur voit. - Pour les cartes de sélection unique et de sélection multiple ordinaires (
variant: "default"), gardez les options avec seulement un libellé. N'ajoutez pas dedescriptionpar option à moins que l'utilisateur ne puisse pas distinguer les choix à partir des libellés seuls. - Utilisez
descriptionprincipalement pour les cartes vocales. Les cartes de style visuel devraient généralement utiliser seulementpreview+label. - Lorsqu'une réponse hors liste est acceptable, ajoutez une option explicite avec
id: "__other__"et unlabeldans la même langue que le reste du formulaire, en utilisant le mot auquel l'utilisateur s'attendrait pour une réponse hors liste. Le widget transformera cette option en champ de texte lorsqu'elle sera sélectionnée. UtilisezotherPlaceholdersi le champ de texte nécessite un placeholder.
Pour les cartes visuelles :
- Utilisez de vraies URLs d'image ou des URLs d'image de données dans
preview. - Pour les choix de catalogue de style de design, appelez d'abord
manage_design_styleavecaction: "list", puis mappez chaque préréglage retourné à{ id: preset.presetId, label: preset.name }(pas de miniatures dans cette version). - Ne codez jamais en dur les identifiants de préréglages de catalogue à moins que l'utilisateur n'en ait déjà sélectionné un.
Pour les cartes vocales :
- Utilisez
audioUrlpour le fichier échantillon. - Préférez le chemin d'échantillon documenté comme
/voice-samples/doubao-liuchang.mp3ou une URL HTTPS publique. Ne passez pas d'URL d'échantillon localhost ; les iframes de l'hôte MCP ne résolvent pas de manière fiable les médias locaux de l'éditeur. - Gardez les descriptions visibles par l'utilisateur neutres envers les fournisseurs. Décrivez la voix de la même manière que l'UI native d'audition d'OpenChatCut : genre / tranche d'âge / ton / cas d'utilisation, par exemple
Féminin / jeune / amical, généralou男 / 中年 / 低沉知识解说. Ne montrez pas de noms de fournisseurs comme ElevenLabs ou Doubao dans les descriptions d'options. - Conservez l'
idde l'option égal à l'identifiant vocal du fournisseur nécessaire poursubmit_voice.
Pour les cartes de scénario de démarrage natif :
- Utilisez-les lorsque l'utilisateur doit choisir quel workflow vidéo OpenChatCut démarrer, comme le montage de tête parlante, l'animation MG, la transformation de longues vidéos en courtes, la promotion de produit/app, le court métrage IA ou la vidéo explicative.
- Présentez-les comme des besoins/scénarios vidéo courants, pas comme les seuls workflows vidéo possibles. Le formulaire doit également permettre à l'utilisateur de décrire un besoin vidéo différent.
- Utilisez exactement un champ de sélection unique avec
variant: "scenario". - Fournissez des options en utilisant les identifiants canoniques ci-dessous et des libellés localisés dans la langue de l'utilisateur. Incluez
id: "__other__"uniquement lorsque vous devez personnaliser le libellé hors liste ; sinon, le backend ajoute une option Autre localisée. - Les libellés/descriptions/invites de démarrage de scénario en anglais, chinois et espagnol sont intégrés. Pour toute autre langue d'utilisateur, traduisez fidèlement le
label, ladescriptionet l'invite de démarrage anglais de chaque scénario dans la langue de l'utilisateur et passez ces valeurs localisées dans les objets d'option. Préservez les termes de produit OpenChatCut et le sens du workflow ; n'ajoutez pas de nouvelles exigences. UtilisezsubmitPromptpour l'invite de démarrage traduite. Cette surcharge est spécifique àvariant: "scenario"; les cartes d'options ordinaires, les cartes vocales et les cartes de style visuel obtiennent déjà leur texte visible à partir des valeurs que vous passez. - Ne fournissez pas de
previewouaudioUrlpersonnalisé ; le backend remplit l'image de prévisualisation native du premier écran. - Identifiants canoniques :
talking-head,motion-graphics,long-video-to-shorts,app-promo,ai-cinematic-short-film,explainer, plus__other__pour un besoin vidéo libre. - Exemple d'options :
{ "id": "talking-head", "label": "Montage de tête parlante" },{ "id": "motion-graphics", "label": "Motion Graphics" },{ "id": "long-video-to-shorts", "label": "Longue vidéo en courtes" },{ "id": "app-promo", "label": "Promotion de produit / application" },{ "id": "ai-cinematic-short-film", "label": "Court métrage IA" },{ "id": "explainer", "label": "Vidéo explicative" },{ "id": "__other__", "label": "Autre chose" }.
Lacunes actuelles
ask_followup_questions est destiné uniquement aux réponses structurées. Il ne supporte pas le HTML personnalisé natif, les ponts de paramètres de timeline, la sélection d'éléments de l'éditeur ou les champs de téléchargement de fichiers. Pour les fichiers déjà détenus par l'environnement d'exécution de l'agent ou attachés directement au chat en dehors de cette carte, le workflow d'importation de médias est toujours valide : appelez import_media et exécutez le chemin d'assistance/téléchargement direct. Pour les fichiers que l'utilisateur souhaite placer directement dans un projet, demandez-lui d'utiliser l'UI de téléchargement de l'éditeur OpenChatCut.
Exemple
{
"title": "Votre idée vidéo",
"prompt": "Choisissez ou remplissez ce que vous avez en tête pour qu'OpenChatCut puisse choisir une bonne direction de départ.",
"submitLabel": "Envoyer l'idée",
"messagePrefix": "Continuer avec cette direction vidéo :",
"fields": [
{
"id": "goal",
"label": "Quel est l'objectif principal de cette vidéo ?",
"type": "single",
"options": [
{ "id": "product_intro", "label": "Présentation de produit" },
{ "id": "social_ad", "label": "Publicité sociale" },
{ "id": "__other__", "label": "Autre chose" }
]
},
{
"id": "elements",
"label": "Que devrait-elle inclure ? (Sélectionnez tout ce qui s'applique)",
"type": "multi",
"options": [
{ "id": "broll", "label": "B-roll" },
{ "id": "logo", "label": "Logo de la marque" },
{ "id": "__other__", "label": "Autre chose" }
]
}
]
}