ウィジェットフォーム
フォームツールを使用して、マークアップを手書きする代わりにフォームを作成します。エディタのチャットはフォームをインタラクティブなカードとしてレンダリングし、ユーザーの構造化された回答を返します。
ランタイムルール
ask_followup_questions を呼び出します。これにより、フィールドがエディタのネイティブフォームカードにシリアル化されます。ユーザーの送信は、次のメッセージとして戻ってきます。
ツールを呼び出す前に、アンケート全体を計画してください。試行フォームを送信してから修正フォームを送信するのではなく、1つの最終フォームを送信してください。このツールは最大12フィールドをサポートしています。ユーザーがさらに質問を求めてきた場合は、最初の呼び出しの前に関連するプロンプトを結合フィールドに統合してください。
ask_followup_questions を呼び出した後は、ターンを停止し、送信された回答がチャットに表示されるのを待ちます。ユーザーの選択が会話に現れるまで、選択を適用したり、アセットを作成したり、レコメンデーションから計画を続行したりしないでください。
サポートされているフィールドマッピング
fields 配列を作成します。すべての表示文字列は、ユーザーの会話言語で記述してください。
- ネイティブ
<form-single>->{ type: "single", variant: "default" } - ネイティブ
<form-multi>->{ type: "multi", variant: "default" } - ネイティブ
<form-text>/<form-textarea>->{ type: "text" } - ネイティブ
<form-visual>->{ type: "single", variant: "visual" } - 音声オーディションカード ->
{ type: "single", variant: "voice" } - ネイティブスタートシナリオカード ->
{ type: "single", variant: "scenario" }
フォームコピーのトーン
フォームレベルのテキスト(title、prompt、fields[].label、submitLabel、および messagePrefix)については、OpenChatCut がユーザーに何を望むかを説明するよう促す、有能な動画制作パートナーであるかのように記述し、堅苦しいアンケートのようにしないでください。
目標:
- 温かく、開放的で、行動を促す。コピーは、「最も近い動画ニーズを選択するか、アイデアを教えてください。一緒に解決できます」という意味を含んでいる必要があります。
- 短く、スキャンしやすい。
promptには自然な文章を1つ、質問ラベルは簡潔にしてください。 - 正直な能力の枠組み。OpenChatCut は多くの動画ワークフローを支援できますが、サポートされていない能力を主張したり、入力が確定する前に結果を保証したりしないでください。
- ユーザーの言語とローカルな製品用語。「OpenChatCut」、「B-roll」、「モーション グラフィックス」、「MG 动画」、モデル/製品名、プラットフォーム名は、確立された形式で保持してください。
- ユーザー向けのクリエイティブな言い回し。初期計画やクリエイティブな情報収集フォームでは、内部の制作ドキュメント言語ではなく、アイデア、方向性、計画、ストーリー、ショットリスト、オーディエンス、ムード、動画ニーズなどの自然な用語を推奨します。
シナリオ情報収集フォームでは、「ビデオタイプを選択してください」、「このプロジェクトのビデオタイプを選択してください」、または「どのようなビデオを作成したいですか?」のような堅苦しいラベルは、ホストにより温かいコピーを入れる余地がない場合を除き、避けてください。
シナリオ情報収集フォームでは、次のようなコピーを推奨します:
{
"title": "何を作りたいですか?",
"prompt": "最も近い動画シナリオを選ぶか、「その他」を選んでアイデアを説明してください。",
"submitLabel": "作成を開始",
"messagePrefix": "この動画の方向性で始めたいです:",
"fields": [
{
"id": "scenario",
"label": "どのシナリオがあなたの動画に最も適していますか?",
"type": "single",
"variant": "scenario",
"otherPlaceholder": "例: 旅行の映像を雰囲気のあるvlogにしたい / 新製品のローンチ動画を作りたい"
}
]
}
フォームにファイルアップロードの質問を含めないでください。タスクに実際にソースメディアが必要で、プロジェクト/チャットにまだない場合は、エディタでユーザーに別途ファイルをアップロードするよう依頼してください(ドラッグ&ドロップ、アップロードボタン、またはチャットコンポーザーへの貼り付け)。ファイルアップロードはすべてのアンケートのデフォルトの前提条件ではありません。次の編集ステップが不足しているメディアに依存する場合にのみ依頼してください。
選択フィールドについて:
- 次のツール呼び出しで必要な内部値には
idを使用します。 - ユーザーが表示するものには
labelを使用します。 - 通常の単一選択および複数選択カード(
variant: "default")では、オプションはラベルのみにしてください。ラベルだけでは選択肢を区別できない場合を除き、オプションごとにdescriptionを追加しないでください。 descriptionは主に音声カードに使用します。ビジュアルスタイルカードは通常、previewとlabelのみを使用する必要があります。- リスト外の回答が許容される場合は、
id: "__other__"と、フォームの他の部分と同じ言語のlabelを持つ明示的なオプションを追加し、ユーザーがリスト外の回答に期待する単語を使用してください。このオプションが選択されると、ウィジェットはこれをテキスト入力に変換します。テキスト入力にプレースホルダーが必要な場合は、otherPlaceholderを使用します。
ビジュアルカードについて:
previewに実際の画像URLまたはデータ画像URLを使用します。- デザインスタイルカタログの選択肢については、最初に
action: "list"を指定してmanage_design_styleを呼び出し、返された各プリセットを{ id: preset.presetId, label: preset.name }にマッピングします(このビルドではサムネイルなし)。 - ユーザーが既に選択していない限り、カタログのプリセットIDをハードコードしないでください。
音声カードについて:
- サンプルファイルには
audioUrlを使用します。 /voice-samples/doubao-liuchang.mp3のような文書化されたサンプルパス、またはパブリックなHTTPS URLを推奨します。ローカルホストのサンプルURLを渡さないでください。MCPホストのiframeは、エディタローカルメディアを確実に解決できません。- ユーザーから見える説明は、プロバイダーに依存しないものにしてください。ネイティブの OpenChatCut オーディションUIと同じように声を説明します: 性別/年齢層/トーン/ユースケース。例:
女性/若年/フレンドリー、汎用または男 / 中年 / 低沉知識解説。オプションの説明に ElevenLabs や Doubao などのプロバイダー名を表示しないでください。 - オプションの
idは、submit_voiceで必要なプロバイダーの音声IDと同じにしてください。
ネイティブスタートシナリオカードについて:
- ユーザーが開始する OpenChatCut 動画ワークフローを選択する場合に使用します。例: トーキングヘッド編集、MGアニメーション、長編動画からショートへの変換、製品/アプリプロモーション、AI短編映画、解説動画。
- これらは一般的な動画ニーズ/シナリオとして提示し、唯一可能な動画ワークフローとしてではありません。フォームでは、ユーザーが別の動画ニーズを説明できるようにする必要があります。
variant: "scenario"の単一選択フィールドを1つだけ使用します。- 以下の正規IDと、ユーザーの言語でローカライズされたラベルを使用してオプションを提供します。オフリストのラベルをカスタマイズする必要がある場合にのみ、
id: "__other__"を含めてください。それ以外の場合は、バックエンドがローカライズされた「その他」オプションを追加します。 - 英語、中国語、スペイン語のシナリオラベル/説明/スタータープロンプトは組み込まれています。他の言語の場合は、各シナリオの英語の
label、description、およびスタータープロンプトをユーザーの言語に忠実に翻訳し、それらのローカライズされた値をオプションオブジェクトで渡します。OpenChatCut の製品用語とワークフローの意味を保持し、新しい要件を追加しないでください。翻訳されたスタータープロンプトにはsubmitPromptを使用します。このオーバーライドはvariant: "scenario"に固有です。通常のオプションカード、音声カード、ビジュアルスタイルカードは、渡す値から表示テキストを取得します。 - カスタムの
previewまたはaudioUrlを提供しないでください。バックエンドがネイティブの最初の画面プレビュー画像を入力します。 - 正規ID:
talking-head、motion-graphics、long-video-to-shorts、app-promo、ai-cinematic-short-film、explainer、および自由形式の動画ニーズ用の__other__。 - オプションの例:
{ "id": "talking-head", "label": "トーキングヘッド編集" },{ "id": "motion-graphics", "label": "モーション グラフィックス" },{ "id": "long-video-to-shorts", "label": "長編動画からショートへ" },{ "id": "app-promo", "label": "製品/アプリプロモーション" },{ "id": "ai-cinematic-short-film", "label": "AI短編映画" },{ "id": "explainer", "label": "解説動画" },{ "id": "__other__", "label": "その他" }.
現在のギャップ
ask_followup_questions は構造化された回答のみを対象としています。ネイティブのカスタムHTML、タイムラインパラメータブリッジ、エディタアイテムの選択、ファイルアップロードフィールドはサポートしていません。エージェントランタイムが既に保持しているファイル、またはこのカードの外でチャットに直接添付されたファイルについては、メディアインポートワークフローは引き続き有効です。import_media を呼び出して、ヘルパー/直接アップロードパスを実行してください。ユーザーがプロジェクトに直接配置したいファイルについては、OpenChatCut エディタのアップロードUIを使用するように依頼してください。
例
{
"title": "あなたの動画アイデア",
"prompt": "OpenChatCut が適切な開始方向を選択できるように、頭の中にあるものを選択または入力してください。",
"submitLabel": "アイデアを送信",
"messagePrefix": "この動画の方向性で続行します:",
"fields": [
{
"id": "goal",
"label": "この動画の主な目的は何ですか?",
"type": "single",
"options": [
{ "id": "product_intro", "label": "製品紹介" },
{ "id": "social_ad", "label": "ソーシャル広告" },
{ "id": "__other__", "label": "その他" }
]
},
{
"id": "elements",
"label": "含めるべきものは?(すべて選択)",
"type": "multi",
"options": [
{ "id": "broll", "label": "B-roll" },
{ "id": "logo", "label": "ブランドロゴ" },
{ "id": "__other__", "label": "その他" }
]
}
]
}