コパイロットをモバイル および カスタム アプリに追加する

重要

Power Virtual Agents 機能は、生成 AI への多大な投資と Microsoft Copilot 全体の統合の強化により、現在 Microsoft Copilot Studio の一部となっています

ドキュメントやトレーニング コンテンツが更新される間、一部の記事やスクリーンショットで Power Virtual Agents が参照される場合があります。

コパイロットをカスタム アプリに接続して、アプリのユーザーがアプリ内から直接コパイロットと対話できるようにします。

ほとんどの場合、カスタム アプリは、Web ベースのアプリか、ネイティブ アプリ、またはビジネスに必要な他のサービスへのアダプターのいずれかであるモバイル デバイス アプリです。

モバイル アプリに接続するには異なる手順があり、アプリが Web ベースのアプリか、またはネイティブ アプリかによります。

コパイロットを Web ベースのアプリに接続するのは、コード スニペットをアプリにコピーすることになるため、比較的簡単です。 ただし、Web ベースのアプリおよびネイティブ、またはカスタム アプリのどちらも、コパイロットをアプリに完全に統合するための、かなりの開発者の専門知識が必要です。 この記事では、両方の手順について説明します。

前提条件

コパイロットを Web ベースのアプリに接続する

  1. Copilot Studio のナビゲーション メニューの 設定チャネル を選択します。

  2. モバイル アプリ タイルを選択して、構成ウィンドウを開きます。

  3. コードを Web ベースのアプリ セクションにコピーして、アプリの開発者に提供し、Web ベース アプリに追加します。

    コパイロットを Web ベースのアプリケーションに追加します。

コパイロットをネイティブまたはカスタム アプリに接続する

チップ

このセクションではモバイル アプリへの接続方法について説明しますが、IoT (モノのインターネット) などのカスタムまたはネイティブ アプリにも同じプロセスを適用することができます。

ここの手順に従う以外に、Azure Bot Service チャネルに接続することが目標である場合、開発者は詳細について、ボットを Azure Bot Service チャネルに接続 を参照することができます。

重要

このセクションの手順では、ユーザーまたは開発者によるソフトウェア開発が必要です。 これは、開発者ツール、ユーティリティ、および IDE を十分に理解している IT 管理者または開発者などの経験豊富な IT プロフェッショナルを対象としています。

コード サンプル

このドキュメントで使用されているコード スニペットは次のとおりです。

参照

このドキュメントの手順では、以下のソース資料を参照しています。

Copilot Studio コパイロット パラメーターを取得する

構築したコパイロットに接続するには、コパイロットの名前およびトークン エンドポイントを取得して特定する必要があります。

  1. Copilot Studio にコパイロットの名前をコピーします。

    コパイロット名を取得します。

  2. ナビゲーション メニューの 設定チャネル を選択します。

  3. モバイル アプリを選択します。

    モバイル アプリ チャネル。

  4. トークン エンドポイントの隣で、コピーを選択します。 Direct Line トークンを取得 手順では、このエンドポイントが必要です。

    コパイロット パラメーターを取得します。

Direct Line トークンを取得

使用しているコパイロットと会話を開始するには、Direct Line トークンが必要です。 このトークンは、Copilot Studio 画面内に示されているエンドポイントに GET 要求を送信することで取得できます。 このトークンは、その後の directline API 呼び出しのヘッダーとして使用する必要があります。

例:

GET <BOT TOKEN ENDPOINT>

要求が成功した場合、要求されたコパイロットに対して Direct Line トークン、有効期間、および conversationId が返されます。 例:

{
    "token": "RCurR_XV9ZA.cwA.BKA.iaJrC8xpy8qbOF5xnR2vtCX7CZj0LdjAPGfiCpg4Fv0y8qbOF5xPGfiCpg4Fv0y8qqbOF5x8qbOF5xn",
    "expires_in": 3600,
    "conversationId": "abc123"
}

サンプル コードの例

次の例では、 Copilot Studio コパイロットに対して Direct Line トークンを取得するために、コネクタ サンプル コード からサンプルを使用します。

/// <summary>
/// Get directline token for connecting bot
/// </summary>
/// <returns>directline token as string</returns>
public async Task<DirectLineToken> GetTokenAsync(string url)
{
    try
    {
        return await _httpClient.GetFromJsonAsync<DirectLineToken>(url);
    }
    catch (HttpRequestException ex)
    {
        throw ex;
    }        
}
/// <summary>
/// class for serialization/deserialization DirectLineToken
/// </summary>
public class DirectLineToken
{
  public string Token { get; set; }
  public int Expires_in { get; set; }
  public string ConversationId { get; set; }
}

応答オブジェクトは、先ほど見た GET 要求と同じです。

{
  "token": "RCurR_XV9ZA.cwA.BKA.iaJrC8xpy8qbOF5xnR2vtCX7CZj0LdjAPGfiCpg4Fv0y8qbOF5xPGfiCpg4Fv0y8qqbOF5x8qbOF5xn",
  "expires_in": 3600,
  "conversationId": "abc123"
}

Direct Line を使用してコパイロットと通信

Direct Line トークン取得した後、Copilot Studio コパイロットと Direct Line との会話の準備ができます。 会話を開始して、メッセージを送受信するには、Bot Framework Direct Line API で指示に従います。

次の例では、コネクタ サンプル コード のサンプルを使用して、会話を開始し Copilot Studio コパイロットからメッセージを送受信します。

  1. DirectLineClient インスタンスを Direct Line トークンで初期化し、会話を開始します:

       // Use the retrieved token to create a DirectLineClient instance
       using (var directLineClient = new DirectLineClient(token))
       {
           var conversation = await directLineClient.Conversations.StartConversationAsync();
           string conversationtId = conversation.ConversationId;
       }
    
  2. 開始すると、各会話は token および conversationtId の組み合わせを使用して識別および接続できます。 既存の会話にユーザー メッセージを送信します。

       // Use the retrieved token to create a DirectLineClient instance
       // Use the conversationId from above step
       // endConversationMessage is your predefined message indicating that user wants to quit the chat
       while (!string.Equals(inputMessage = /*Get_User_Input()*/, endConversationMessage, StringComparison.OrdinalIgnoreCase))
       {
           using (var directLineClient = new DirectLineClient(token))
           {
               // Send user message using directlineClient
               // Payload is a Microsoft.Bot.Connector.DirectLine.Activity
               await directLineClient.Conversations.PostActivityAsync(conversationtId, new Activity()
               {
                   Type = ActivityTypes.Message,
                   From = new ChannelAccount { Id = "userId", Name = "userName" },
                   Text = inputMessage,
                   TextFormat = "plain",
                   Locale = "en-Us",
               });
           }
       }
    
  3. 同じ token および conversationId を使用してコパイロットの応答を取得します。 取得した Direct Line 応答アクティビティには、ユーザーとコパイロットの両方のメッセージが含まれます。 コパイロットの名前で応答活動をフィルター処理して、コパイロットの応答メッセージのみを取得できます。

       // Use the same token to create a directLineClient
       using (var directLineClient = new DirectLineClient(token))
       {
           // To get the first response set string watermark = null
           // More information about watermark is available at
           // https://learn.microsoft.com/azure/bot-service/rest-api/bot-framework-rest-direct-line-1-1-receive-messages?view=azure-bot-service-4.0
    
           // response from bot is of type Microsoft.Bot.Connector.DirectLine.ActivitySet
           ActivitySet response = await directLineClient.Conversations.GetActivitiesAsync(conversationtId, watermark);
    
           // update watermark from response
           watermark = response?.Watermark;
    
           // response contains set of Activity from both user and bot
           // To display bot response only, filter Activity.From.Name equals to your bot name
           List<Activity> botResponses = response?.Activities?.Where(x =>
                     x.Type == ActivityTypes.Message &&
                       string.Equals(x.From.Name, /*Bot_Name*/, StringComparison.Ordinal)).ToList();
    
           // Display botResponses
       }
    

Direct Line トークンを最新の情報に更新

アプリケーションがコパイロットと長い会話をしている場合、コードを追加し Direct Line トークンを最新の情報に更新する必要があるかもしれません。 トークンは期限切れになりますが、期限が切れる前に更新できます; 詳細は Direct Line 認証 で確認してください。

次の例では、コネクタ サンプル コード のサンプルと使用して、既存の Copilot Studio 会話のトークンを最新の情報に更新します。

  // DirectLine provides a token refresh method
  // Requires the currentToken valid when refreshing
  string refreshToken = new DirectLineClient(currentToken).Tokens.RefreshToken().Token;
  // create a new directline client with refreshToken
  directLineClient = new DirectLineClient(refreshToken);
  // use new directLineClient to communicate to your bot

コパイロットからの会話ペイロードを解析する

コパイロットとの会話を開始した後、会話 JSON ペイロードは、標準の Microsoft Bot Framework Direct Line アクティビティを使用します。 詳細は、Bot Framework Direct Line API で確認できます。

ハンドオフ活動を処理する

アプリケーションがライブ チャット オペレーター プロバイダーにハンドオフする必要がある場合は、ハンドオフ活動を処理する必要があります。 "エージェントに転送" ノードがヒットすると、ハンドオフ活動が送信されます。 詳細については、ハンドオフ活動のペイロードを参照 してください。

ウェルカム メッセージをトリガーする

ユーザーが会話を開始したときに、コパイロットにグリーティング システム トピックを自動的に送信させる場合は、Type=event および Name=startConversation を使用して活動を送信できます。