- 営業チームが、承認済みの提案書やRFPへの回答を厳選します。
- アプリケーションがHubs APIを使用してSales Hubをセットアップし、そのコンテンツにインデックスを作成して、HubポータルをCRMに埋め込みます。
- 営業担当者はBox AIを使用して自然言語でHubにクエリを実行し、権限が管理された承認済みコンテンツに基づく正確な回答を得ることができます。
構築する内容
このチュートリアルの最後には、次の機能を備えた実用的な統合ソリューションが完成します。- Box Hubs APIを使用して、Sales Hubをプログラムからプロビジョニングする。
- 承認済みRFPコンテンツを含む厳選されたフォルダをHubに追加する。
- HubのAIチャットインターフェースをCRMに埋め込む。
- Box AIを使用してHubに対してクエリを実行し、承認済みのコンテンツに基づいて営業に関する質問に回答する。
前提条件
始める前に、以下が揃っていることを確認してください。- で、Box Hubsが有効になっていること。c2>Box Hubsの構成</c2>を参照してください。
- Boxアプリケーションで、クライアント資格情報許可認証が構成され、[ユーザーアクセストークンを生成する] が有効になっていること。
- Python 3.11以上。
- アプリで以下のスコープが有効になっていること。
- Boxに格納されているすべてのファイルとフォルダの読み取りと書き込み
- AIを管理する
- BoxユーザーID (管理コンソールの [ユーザー] で確認できます)。
手順
このソリューションでは、以下に示す3つのBox Platform機能を組み合わせます。BoxでのRFPコンテンツの整理
Sales Contentフォルダおよび各サブフォルダのフォルダIDをメモしておいてください。これらは、Hubに項目を追加する際に使用します。開発環境のセットアップ
- ターミナルを開き、新しいプロジェクトディレクトリを作成します。
- Pythonの仮想環境を作成してアクティブ化します。
(.venv)と表示されます。これにより、仮想環境内で作業していることがわかります。source .venv/bin/activateを実行して、仮想環境を再アクティブ化する必要があります。コマンドの実行中にModuleNotFoundErrorが表示される場合、通常、venvがアクティブ化されていないことを意味します。- 必要なパッケージをインストールします。
- 資格情報を保存するための
.envファイルを作成し、以下の内容を追加します。プレースホルダの値を、Box開発者コンソールで確認した実際の資格情報で置き換えます。
.envファイルには機密情報 (実際の資格情報) が保存されています。Pythonコードは、os.getenv("VARIABLE_NAME")を使用してこれらの名前を参照することで、その値を読み取ります。たとえばos.getenv("BOX_CLIENT_ID")を実行すると、.envファイル内のBOX_CLIENT_ID=の隣に保存されている値を検索します。以下の手順でコードをコピーする際は、引用符で囲まれた変数名をそのまま正確に保持してください。実際の資格情報に置き換えないでください。Boxクライアントの認証
box_client.pyという名前の新しいファイルを作成します。そのファイルを開き、以下のコードを貼り付けます。enterprise_idではなく) user_idを使用して、特定のBoxユーザーとして認証を受けます。これにより、クライアントはそのユーザーが持つ権限を使用して動作し、そのユーザーが招待されているコンテンツにアクセスできるようになります。ユーザーIDは、管理コンソールの [ユーザー] で確認するか、Boxウェブアプリで自分のアバターをクリックしてURLを確認してください。Sales Hubのプロビジョニング
create_hub.pyという名前のファイルを作成します。このスクリプトにより、新しいHubが作成され、その中に営業コンテンツのフォルダが配置されます。Hubへのアクセス管理
manage_access.pyという名前のファイルを作成します。Box AIを使用したHubへのクエリ実行
query_hub.pyという名前のファイルを作成します。統合のテスト
sales-rfp-hubディレクトリを開いていること、また、仮想環境がアクティブ化されていることを確認します。invalid_clientと表示されている場合は、.envの資格情報を確認してください。2. Hubを作成し、コンテンツを追加します。query_hub.pyとmanage_access.pyを開き、YOUR_HUB_IDをこの値に置き換えます。3. Hubにクエリを実行します。- Hub IDが正しいこと。
- コンテンツフォルダに、サブフォルダだけでなくドキュメントも含まれていること。
- インデックス作成が完了するまで十分な時間が経過していること。
最新状態のHubの維持
トラブルシューティング
ModuleNotFoundError: 「...」という名前のモジュールが見つからない
ModuleNotFoundError: 「...」という名前のモジュールが見つからない
pythonコマンドを実行する前に、プロジェクトディレクトリからsource .venv/bin/activateを実行してください。新しく開いたターミナルタブは、すべて個別にアクティブ化する必要があります。invalid_client: クライアント資格情報が無効である
invalid_client: クライアント資格情報が無効である
.envファイルを確認します。BOX_CLIENT_IDおよびBOX_CLIENT_SECRETが、開発者コンソール > [Platformアプリ] > [アプリ] > [構成] の値と一致していることを確認します。BOX_USER_IDが有効なBoxユーザーID (数字で構成され、管理コンソールの [ユーザー] で確認可能) であることを確認します。- 開発者コンソールでアプリが承認されていることを確認します。
- アプリの種類がクライアント資格情報許可であり、[ユーザーアクセストークンを生成] が有効になっていることを確認します。
403 Forbiddenエラーまたは「access_denied_insufficient_permissions」
403 Forbiddenエラーまたは「access_denied_insufficient_permissions」
- アプリで、[すべてのファイルとフォルダの読み取り] スコープと [すべてのファイルとフォルダへの書き込み] スコープが有効になっていることを確認します。
- [AIを管理する] スコープが有効になっていることを確認します (Box AIクエリを利用するには必須)。
- サービスアカウントを使用してる場合は、そのアカウントがコンテンツフォルダにコラボレータとして招待されていることを確認します。
Hubの作成または項目の追加時に、404 Not Foundエラーが発生する
Hubの作成または項目の追加時に、404 Not Foundエラーが発生する
.envファイル内のフォルダIDが、BoxのURLと一致している (https://app.box.com/folder/123456789であれば、フォルダIDは123456789となります)。BOX_USER_IDで指定されたユーザーは、そのフォルダに対してビューアー以上の権限を持っている。
Box AIが空の回答や無関係な回答を返す
Box AIが空の回答や無関係な回答を返す
- コンテンツを追加してから、クエリを実行するまで数分待ちます。インデックス作成はすぐには完了しません。
- Boxウェブアプリで [Hubs] を確認し、Hub内に空のフォルダではなく、ファイルが含まれていることを確認します。
- ドキュメントにテキストが含まれていることを確認します (OCR処理されていないスキャン画像のPDFでは検索できません)。
- そのHubに存在することがわかっているコンテンツに直接関連する質問をしてみます。
BoxウェブアプリにHubが表示されない
BoxウェブアプリにHubが表示されない
manage_access.pyを実行して自身を追加するか、Hubの所有者を確認してください。または、Box管理者に確認し、企業でBox Hubsが有効になっていることを確認してください。CRMへのHubの埋め込み
HubのAIチャットインターフェースをCRM (Salesforce、HubSpot、または社内のカスタムツールなど) に直接埋め込むことで、営業担当者はHubのコンテンツを活用した専用のチャットボット機能を利用できるようになります。Boxでは、HubのAIチャットについて、チャットボタンとチャットウィジェットという2つの埋め込みモードをサポートしています。 埋め込みパラメータとオプションの詳細なリストについては、を参照してください。本番環境へのスケーリング
複数のチームに対するHubのプロビジョニングの自動化
複数のチームに対するHubのプロビジョニングの自動化
create_hub.pyのcreate_sales_hubを更新し、ハードコートされた値ではなくオプションのtitleパラメータを受け入れるようにします。次に、各チームに対してループ処理を行います。対話型RFPアシスタントの構築
対話型RFPアシスタントの構築
POST /2.0/ai/askエンドポイントは、以前のQ&Aのやり取りを格納したdialogue_historyパラメータを受け付けます。やり取りのリストを管理し、リクエストごとにそれを渡すことにより、担当者はコンテキストを失うことなく、「データ保管場所について詳しく説明してもらえますか?」といったフォローアップの質問を行うことができます。query_hub.pyに以下を追加するか、同じimportとクライアント設定を含む新しいスクリプトを作成します。利用状況の追跡と効果の測定
利用状況の追跡と効果の測定
コンテンツガバナンスの適用
コンテンツガバナンスの適用
