シナリオ(事前準備された会話フロー)
Scenarios (Pre-Prepared Conversation Flows)
AIチャットボットおよび自動化システムにおけるシナリオ(チャットボットスクリプト)について解説します。その定義、構造(ブロック、イベント、アクション)、作成プロセス、およびビジネスにおけるメリットを学びましょう。
シナリオとは何か?
シナリオ(チャットボットスクリプト、ボットストーリー、会話フローとも呼ばれる)は、ユーザーとAI駆動の自動化システムとの間で事前に準備された構造化された一連のインタラクションです。シナリオは、チャットボットがユーザー入力にどのように応答し、特定の成果を達成するために操作を実行するかを導くロジック、分岐、データ収集、アクションを含む、会話の完全なパスを定義します。
シナリオは、現代のチャットボットおよび自動化プラットフォームの運用バックボーンであり、ビジネス要件を実行可能な会話フローに変換します。これらは、イベント、アクション、条件、出口を表すモジュラーブロックが接続されて、Webチャット、モバイルアプリ、メッセージングプラットフォーム、音声インターフェースを含むデジタルチャネル全体で動的でコンテキストを認識したエクスペリエンスを作成する、ビジュアルまたはコードベースのワークフロービルダーを使用して構築されます。
シナリオ vs. ユーザーストーリー vs. ユースケース
効果的なシナリオ設計には、これらの関連概念間の関係を理解することが不可欠です:
| 側面 | シナリオ | ユーザーストーリー | ユースケース |
|---|---|---|---|
| 定義 | 特定のステップ、ロジック、アクションを持つ実行可能な会話フロー | ユーザーの視点からの簡潔な機能説明(アジャイル形式) | すべてのシステムインタラクションの包括的な仕様 |
| 形式 | ブロック、分岐、条件を持つビジュアルワークフローまたはフローチャート | テキストカード:「[ユーザー]として、[目標]したい、そうすれば[利益]」 | メイン/代替フローとエラー処理を含む詳細なテキスト |
| 詳細レベル | 特定のアクションと応答を含むステップバイステップの実装 | 高レベル、抽象的 | すべてのバリエーションをカバーする包括的 |
| 目的 | 実際の自動化された会話またはプロセス実行をガイド | 実装する要件または機能をキャプチャ | 完全なシステム要件を指定 |
| 焦点 | 実践におけるユーザー行動とシステム自動化 | ユーザーのニーズと望ましい結果 | システムの動作と応答 |
| 対象者 | チャットボットビルダー、自動化エンジニア | プロダクトオーナー、開発チーム | システムアナリスト、開発者、QA |
| 粒度 | 運用的(実際に何が起こるか) | 戦略的(何を構築すべきか) | 戦術的(システムがどのように動作すべきか) |
比較例:
ユーザーストーリー:
新規訪問者として、製品サポートを受けたい
そうすれば問題を迅速に解決できる。
ユースケース:
タイトル: 製品サポートを受ける
アクター: 新規訪問者
メインフロー:
1. ユーザーがサポートをリクエスト
2. システムが問題カテゴリを識別
3. システムがソリューションを提供
4. ユーザーが解決を確認
代替フロー:
- 2a. カテゴリが不明 → 明確化の質問をする
- 3a. ソリューションが利用できない → エージェントにエスカレーション
シナリオ:
[エントリーゲート]
→ [イベント: 新規ユーザーメッセージ]
→ [メッセージ送信: "今日はどのようにお手伝いできますか?"]
→ [イベント: ボタン/入力アクション]
→ [条件: インテント = "製品サポート"]
→ Trueの場合: [AIアクション: ナレッジベース検索]
→ [メッセージ送信: ソリューション + "これは役に立ちましたか?"]
→ [イベント: ボタンクリック]
→ "はい"の場合: [メッセージ送信: "素晴らしい!他に何かありますか?"]
→ "いいえ"の場合: [アクション: エージェントに割り当て]
シナリオ構造: ビルディングブロック
シナリオは、それぞれが個別の機能を表す相互接続されたブロックで構成されています:
ブロックタイプの概要
| ブロックタイプ | 目的 | 主な特徴 |
|---|---|---|
| エントリーゲート | シナリオの開始点をマーク | シナリオのアクティベーションに必須 |
| イベントブロック | フローを一時停止/再開するトリガーをリッスン | ユーザーメッセージ、ボタンクリック、データ更新 |
| アクションブロック | 操作を実行 | メッセージ送信、データ更新、API呼び出し |
| 条件ブロック | データを評価してフローを分岐 | If-thenロジック、データ比較 |
| 出口ブロック | シナリオを終了または引き継ぎ | 停止または別のシナリオを起動 |
エントリーゲート
機能: シナリオフローの開始を定義します。
重要なルール: すべての実行可能なシナリオは、エントリーゲートで始まる必要があります。これがないと、シナリオをアクティブ化または実行できません。
ビジュアル表現: 通常、ワークフローキャンバスの上部に特徴的なアイコンまたは形状として表示されます。
イベントブロック: トリガーとリスナー
イベントブロックはシナリオの実行を一時停止し、特定のトリガーを待ちます:
| イベントタイプ | トリガー | 一般的な用途 |
|---|---|---|
| 新規ユーザーメッセージ | 任意の受信メッセージ(テキスト、画像、ファイル) | ユニバーサルメッセージハンドラー |
| ユーザーメッセージマッチ | キーワード/フレーズ/インテントパターン | トピック固有のフロー |
| ボタン/入力アクション | ユーザーがボタンをクリックまたは入力を送信 | フォーム送信、選択 |
| 会話状態変更 | ステータス更新(保留中、解決済みなど) | ワークフロー状態管理 |
| ユーザープロファイル更新 | ユーザーデータフィールドの変更 | パーソナライゼーショントリガー |
| カスタムデータ更新 | 特定のバックエンドフィールドの変更 | データ駆動型自動化 |
| セグメント更新 | ユーザー/会話セグメントの変更 | オーディエンスターゲティング |
| URL変更検出 | 特定のページへのナビゲーション | コンテキストアシスタンス |
| 新規Crispイベント | SDK/API経由のプログラマティックトリガー | 統合イベント |
| オペレーター待機中 | 未読メッセージタイムアウト | エスカレーションシナリオ |
パターンマッチング:
- 完全一致: “reset password”(正確なフレーズ)
- ワイルドカード: “refund"(どこかに単語を含む)
- 複数パターン: “help|assist|support”(任意のバリアント)
重要な注意: ユーザー入力を収集した後(フィールド入力、ボタンピッカー)、応答をキャプチャして値を保存するために、常にイベントブロックを配置してください。これがないと、シナリオは適切に一時停止、再開、およびユーザー入力を処理できません。
アクションブロック: 操作の実行
アクションブロックは、シナリオ内で特定の操作を実行します:
| アクションカテゴリ | ブロックタイプ | 目的 |
|---|---|---|
| メッセージ送信 | テキスト、ボタンピッカー、フィールド入力、ファイル、アニメーション、カルーセル、ノート | ユーザーにコンテンツを表示 |
| ユーザー更新 | メール、名前、電話、カスタムフィールド、セグメント | ユーザープロファイルデータを変更 |
| 会話コントロール | 状態変更、オペレーター割り当て、ユーザーブロック | 会話ライフサイクルを管理 |
| 統合 | Webhook実行、HTTPリクエスト、カスタムAPI | 外部システムに接続 |
| AI操作 | インテント分析、ナレッジベース検索、動的返信 | AI機能を活用 |
| フロー制御 | 遅延、待機、変数設定 | タイミングとデータを管理 |
メッセージ送信タイプ:
テキストメッセージ:
変数を含むプレーンテキストまたはフォーマットされたコンテンツ:
"こんにちは{{user_name}}さん、ご注文#{{order_id}}が発送されました!"
ボタンピッカー:
メッセージ: "どのように進めますか?"
ボタン:
- "注文状況を確認"
- "エージェントと話す"
- "FAQを閲覧"
フィールド入力:
タイプ: メール
ラベル: "メールアドレスを入力してください"
必須: はい
検証: メール形式
保存先: user.email
カルーセル:
画像、テキスト、ボタンを含む複数のカードを表示
使用例: 製品ショーケース、機能比較
条件ブロック: 分岐ロジック
条件ブロックは、データまたはコンテキストを評価してフローを誘導します:
| 条件タイプ | 評価 | 分岐ロジック |
|---|---|---|
| 会話ステータス | 新規、保留中、解決済み | 状態によるルーティング |
| 時間ベース | イベントからの経過時間 | 遅延トリガーアクション |
| ユーザーデータ | メール設定、名前存在、セグメントメンバーシップ | パーソナライゼーションパス |
| カスタムデータ | 任意のカスタムフィールド値 | ビジネスロジック分岐 |
| メッセージインテント | AI検出されたユーザーインテント | インテントベースルーティング |
| APIレスポンス | HTTPステータス、レスポンス値 | 統合駆動フロー |
| ユーザーメタデータ | 場所、言語、デバイス、時刻 | コンテキスト認識分岐 |
条件構造の例:
[条件: ユーザーメールが設定されている]
→ TRUEの場合:
[メッセージ送信: "ありがとうございます{{user_name}}さん、{{user_email}}にフォローアップします"]
→ FALSEの場合:
[メッセージ送信: "メールアドレスを入力してください"]
[フィールド入力: メール]
出口ブロック: 終了または遷移
出口ブロックは、シナリオの終了方法を制御します:
シナリオ停止:
- 現在のフローを完全に終了
- メインチャットシステムに制御を返す
- 目的が達成されたか、エラーが発生した場合に使用
シナリオ実行:
- 別のシナリオを起動
- モジュラーで再利用可能なフローを可能にする
- 複雑なワークフローのためのシナリオチェーンをサポート
モジュラー設計の例:
シナリオA: リード資格認定
→ [出口: シナリオB "メール収集"を実行]
シナリオB: メール収集
→ [メール収集、検証、保存]
→ [出口: シナリオC "ミーティングスケジューラー"を実行]
シナリオ作成プロセス
ステップバイステップの方法論
| フェーズ | アクティビティ | 成果物 |
|---|---|---|
| 1. 目的の定義 | 目標、対象者、成功基準を明確化 | 目的ステートメント、要件 |
| 2. ユーザージャーニーのマッピング | ステップ、決定ポイント、エッジケースを文書化 | フロー図、ユーザーペルソナ |
| 3. 構造の構築 | エントリーゲート、イベント、アクション、条件、出口を追加 | ビジュアルワークフロー |
| 4. ブロックの設定 | パラメータ、パターン、変数、条件を設定 | 詳細なブロック設定 |
| 5. 徹底的なテスト | すべてのパス、エッジケース、エラー処理をシミュレート | テスト結果、バグレポート |
| 6. 反復と改善 | フィードバックを収集、パフォーマンスを最適化 | 更新されたシナリオ |
設定のベストプラクティス
イベント設定:
- 適切なメッセージ起点(チャネル)を設定
- より良いマッチングのために特定のパターンを使用
- 収集したデータを保存するためにメモライゼーションを有効化
- 多言語要件を考慮
アクション設定:
- パーソナライゼーションのために変数を使用:
{{user_name}} - 明確なボタンラベルとアクションを設定
- 入力フィールドを検証(メール形式、電話番号)
- 役立つエラーメッセージを提供
条件設定:
- ロジックをシンプルで読みやすく保つ
- すべての可能な結果を計画
- エッジケースを処理(データ欠落、無効な入力)
- 複雑な条件の理由を文書化
統合設定:
- API認証情報を安全に保存
- タイムアウトとエラーを適切に処理
- デバッグのために統合呼び出しをログ
- 実際のデータとエンドポイントでテスト
実用例とユースケース
例1: メール収集シナリオ
目的: 会話中にユーザーのメールをキャプチャ
フロー:
[エントリーゲート]
↓
[メッセージ送信: "ようこそ!フォローアップのためにメールアドレスをいただけますか?"]
↓
[フィールド入力: メール(必須、検証済み)]
↓
[イベント: ボタン/入力アクション] ← 重要: 入力をキャプチャ
↓
[ユーザー更新: メールフィールドを設定]
↓
[条件: ユーザーメールが設定されている]
→ TRUEの場合:
[メッセージ送信: "ありがとうございます!どのようにお手伝いできますか?"]
→ FALSEの場合:
[メッセージ送信: "無効なメールです。もう一度お試しください。"]
[フィールド入力にループバック]
主な機能:
- 入力検証
- データ保存
- 確認フィードバック
- エラー処理
例2: FAQ解決シナリオ
目的: よくある質問に自動的に回答
フロー:
[エントリーゲート]
↓
[イベント: ユーザーメッセージマッチ "*返金*|*返品*"]
↓
[AIアクション: ナレッジベース検索 query="返金ポリシー"]
↓
[条件: ナレッジベース結果が見つかった]
→ TRUEの場合:
[メッセージ送信: {{kb_answer}}]
[ボタンピッカー: "これは役に立ちましたか?" オプション: はい/いいえ]
[イベント: ボタンクリック]
→ "はい"の場合: [送信: "素晴らしい!他に何かありますか?"]
→ "いいえ"の場合: [アクション: エージェントに割り当て]
→ FALSEの場合:
[メッセージ送信: "専門家におつなぎします。"]
[アクション: エージェントに割り当て queue="カスタマーサービス"]
主な機能:
- ワイルドカードを使用したパターンマッチング
- AI駆動のナレッジ検索
- ユーザー満足度チェック
- エスカレーションパス
例3: マルチチャネルウェルカムシナリオ
目的: チャネルに基づいてユーザーを異なる方法で挨拶
フロー:
[エントリーゲート]
↓
[イベント: 新規ユーザーメッセージ]
↓
[条件: 会話が新規]
→ TRUEの場合:
[条件: 現在のチャネル]
→ "WhatsApp"の場合:
[送信: "👋 WhatsAppサポートへようこそ!"]
→ "Facebook"の場合:
[送信: "こんにちは!Facebookでメッセージをいただきありがとうございます!"]
→ "ウェブサイトチャット"の場合:
[送信: "こんにちは!今日はどのようにお手伝いできますか?"]
→ デフォルト:
[送信: "ようこそ!お手伝いします。"]
↓
[イベント: ユーザーメッセージ]
↓
[メイン会話フローに続く...]
主な機能:
- チャネル検出
- パーソナライズされた挨拶
- プラットフォーム全体で一貫したユーザーエクスペリエンス
例4: リード資格認定とルーティング
目的: リードを資格認定し、適切な営業チームにルーティング
フロー:
[エントリーゲート]
↓
[送信: "会社の規模は?"]
[ボタンピッカー: "1-10", "11-50", "51-200", "201+"]
[イベント: ボタンクリック]
[ユーザー更新: カスタムフィールド "company_size"]
↓
[送信: "主なニーズは何ですか?"]
[ボタンピッカー: "営業CRM", "マーケティング自動化", "カスタマーサポート"]
[イベント: ボタンクリック]
[ユーザー更新: カスタムフィールド "primary_need"]
↓
[条件: company_size AND primary_need]
→ company_size IN ["51-200", "201+"] AND primary_need = "営業CRM"の場合:
[ユーザー更新: セグメント"エンタープライズ-営業-資格認定"に追加]
[アクション: オペレーターに割り当て group="エンタープライズ営業"]
→ company_size IN ["1-10", "11-50"]の場合:
[ユーザー更新: セグメント"SMB-資格認定"に追加]
[アクション: オペレーターに割り当て group="SMB営業"]
→ デフォルト:
[送信: "ありがとうございます!専門家が24時間以内にご連絡します。"]
主な機能:
- プログレッシブプロファイリング
- セグメント割り当て
- インテリジェントルーティング
- フォールバック処理
シナリオ設計のベストプラクティス
ユーザー中心の設計
| 原則 | 実装 | 例 |
|---|---|---|
| 明確な言語 | シンプルで会話的なトーンを使用 | “今日はどうされましたか?” vs. “お問い合わせの目的を述べてください” |
| 最小限の摩擦 | ステップを減らし、可能な限り事前入力 | 場所を自動検出 vs. 国/都道府県/市区町村を尋ねる |
| エラー防止 | 入力を検証し、例を提供 | “メール形式: name@company.com” |
| グレースフルデグラデーション | 予期しない入力を処理 | キャッチオールフォールバック: “理解できませんでした。言い換えていただけますか?” |
| アクセシビリティ | スクリーンリーダー、キーボードナビゲーションをサポート | 画像の代替テキスト、ボタンラベル |
技術的ベストプラクティス
モジュール性:
- 再利用可能なシナリオコンポーネントを作成
- 共通フロー(メール収集、認証)に"シナリオ実行"を使用
- 迅速な展開のためのシナリオライブラリを維持
データ管理:
- 入力収集後は常にイベントブロックを使用
- 適切なフィールド(ユーザープロファイル、カスタムフィールド)にデータを保存
- 保存前にデータを検証
- 不要になった一時データをクリア
エラー処理:
- 無効な入力を計画
- API障害を適切に処理
- 明確なエラーメッセージを提供
- デバッグのためにエラーをログ
パフォーマンス:
- 不要なAPI呼び出しを避ける
- 頻繁にアクセスされるデータをキャッシュ
- シナリオの深さを制限(過度なチェーンを避ける)
- 実行時間を監視
避けるべき一般的な落とし穴
| 落とし穴 | 問題 | 解決策 |
|---|---|---|
| イベントブロックの欠落 | 入力がキャプチャまたは処理されない | フィールド入力またはボタンピッカーの後に常にイベントブロックを追加 |
| 分岐の無視 | 行き止まり、未処理の応答 | すべての可能なユーザー応答を計画 |
| 過度の複雑化 | 混乱するフロー、維持が困難 | シナリオを焦点を絞って保ち、モジュラー設計を使用 |
| エラー処理なし | 予期しない入力で壊れる | キャッチオール条件とエラーメッセージを追加 |
| コンテキストの無視 | 一般的で役に立たない応答 | ユーザーデータと会話履歴を使用 |
| ドキュメント不足 | チームが理解または変更できない | ノート、明確な命名、ドキュメントを追加 |
シナリオの利点
エンドユーザーにとって
一貫したエクスペリエンス:
- 予測可能な会話フロー
- 信頼できる情報提供
- プロフェッショナルなインタラクション品質
- ユーザーデータに適応した応答
- コンテキストを認識した推奨事項
- 関連するコンテンツとオファー
効率性:
- 一般的な問題の迅速な解決
- 人間のエージェントを待つ必要がない
- 24時間365日の可用性
組織にとって
スケーラビリティ:
- 無制限の同時会話を処理
- 比例した人員なしでグローバルオーディエンスにサービス
- 高ボリュームを一貫して処理
データ収集:
- 構造化された情報キャプチャ
- 完全なインタラクション履歴
- 実用的なインサイトと分析
品質保証:
- 標準化されたプロセス
- コンプライアンス遵守
- すべてのインタラクションの監査証跡
俊敏性:
- 更新の迅速な展開
- フローのA/Bテスト
- ビジネス変更への迅速な対応
コスト効率:
- サポートコストの削減(典型的には30-70%)
- エラー率の低下
- 最適化されたリソース配分
AIと自動化との統合
現代のシナリオはAI機能を活用します:
| AI機能 | シナリオアプリケーション | 利点 |
|---|---|---|
| 自然言語理解 | インテント検出、エンティティ抽出 | より良い会話ルーティング |
| ナレッジベース検索 | 自動回答検索 | 手動ルールなしで正確な応答 |
| 感情分析 | フラストレーション、満足度を検出 | プロアクティブなエスカレーションまたは満足度調査 |
| 生成AI | 動的な応答作成 | 柔軟で自然な会話 |
| 予測分析 | 次善のアクション推奨 | 最適化されたユーザージャーニー |
AI強化シナリオの例:
[イベント: ユーザーメッセージ]
↓
[AIアクション: インテント検出とエンティティ抽出]
→ インテント: "cancel_subscription"
→ エンティティ: subscription_tier = "premium"
↓
[条件: インテント = "cancel_subscription"]
→ [AIアクション: 感情分析]
→ sentiment = "frustrated"の場合:
[優先度: 高]
[アクション: シニアエージェントに割り当て]
→ sentiment = "neutral"の場合:
[送信: "{{subscription_tier}}プランのキャンセルをお手伝いします。"]
[ボタンピッカー: "キャンセル確認" | "リテンションと話す"]
シナリオの成功を測定する
主要業績評価指標
| KPI | 説明 | 目標 |
|---|---|---|
| 完了率 | シナリオを完了したユーザーの% | >80% |
| ドロップオフポイント | ユーザーがフローを放棄する場所 | 最小化 |
| 平均期間 | シナリオを完了するまでの時間 | 品質を維持しながら最小化 |
| ユーザー満足度 | インタラクション後の評価 | >4/5 |
| 封じ込め率 | エスカレーションなしで解決された問題の% | >70% |
| エラー率 | 無効な入力、失敗したアクション | <5% |
最適化戦略
ログの分析:
- 一般的なドロップオフポイントを特定
- 誤解された入力をレビュー
- 技術的エラーを発見
A/Bテスト:
- 異なるメッセージの言い回しをテスト
- ボタンの配置を比較
- 入力フィールドの配置を最適化
ユーザーフィードバック:
- 満足度を調査
- 改善提案を収集
- ソーシャルメディアの言及を監視
主要用語の用語集
| 用語 | 定義 |
|---|---|
| シナリオ | モジュラーブロックから構築された事前準備された会話フロー |
| ブロック | ロジックまたは機能の個別単位(イベント、アクション、条件、出口) |
| エントリーゲート | シナリオフローの開始点 |
| イベントブロック | ユーザーまたはシステムイベントに基づいてシナリオを一時停止/再開するトリガー |
| アクションブロック | シナリオ内で実行される操作(メッセージ送信、データ更新、API呼び出し) |
| 条件ブロック | 評価された基準に基づいてシナリオフローを分岐する決定ポイント |
| 出口ブロック | シナリオを終了または別のシナリオに遷移 |
| パターンマッチング | ユーザーメッセージ内のキーワードまたはフレーズの検出 |
| メモライゼーション | シナリオで後で使用するために収集されたユーザーデータを保存 |
| チェーン | 複数のシナリオを順番に接続 |
| フォールバック | 条件が一致しない場合のデフォルトアクション |
| エスカレーション | ボットから人間のエージェントへの会話の転送 |
参考文献
- Chatbot.com: How to Write a Chatbot Script – Examples Included
- Marutitech: How do Chatbots Work? A Guide to Chatbot Architecture
- Interaction Design Foundation: What are User Scenarios?
- Interaction Design Foundation: Design Scenarios – Communicating the Small Steps
- Make.com: Scenarios for AI Agents – Help Center
- Zendesk: Was ist ein Chatbot? Funktionen & Vorteile
- OpenAI: Chatbot Best Practices
- Chatbot.com: Documentation and Help Center
- Google Dialogflow: Conversation Design Best Practices
関連用語
コードブロック(Python/JS)
コードブロックは、統一された実行のためにプログラミング文をグループ化したもので、Pythonではインデント、JavaScriptでは中括弧によって定義されます。自動化やチャットボットにおいて、カスタム...
セルフヒーリング・ナレッジ
セルフヒーリング・ナレッジは、AI、機械学習、自動化を活用して、ナレッジマネジメントシステム内の古くなった情報や誤った情報を自律的に検出、診断、修正し、正確性を確保します。...