다음을 통해 공유


일반 참여 허브로의 핸드오프 구성

Copilot Studio에서 참여 허브를 통해 에이전트 대화를 휴먼 에이전트에게 완벽하고 상황에 맞게 전달할 수 있습니다.

일부 사용자 지정 개발을 통해 모든 참여 허브로 대화를 전달하도록 에이전트를 구성할 수 있습니다. 이 가이드는 이를 수행하는 방법을 설명합니다.

사전 요구 사항

중요

이 섹션의 일부 지침에는 사용자 또는 개발자의 소프트웨어 개발이 필요합니다. Copilot Studio와 타사 참여 허브를 통합하려는 개발자 도구, 유틸리티 및 통합 IDE에 대해 잘 알고 있는 IT 관리자나 개발자와 같은 숙련된 IT 전문가를 대상으로 합니다.

개요

일반 어댑터 데이터 흐름을 보여주는 그림.

참여 허브로의 전체 핸드오프는 다음 패턴을 따릅니다.

  1. 고객이 참여 허브의 채팅 캔버스와 상호 작용합니다.

  2. 참여 허브는 기본 제공 채팅 라우팅 기능을 통해 수신 채팅을 에이전트로 라우팅합니다.

  3. 사용자 지정 어댑터는 수신 채팅 메시지를 참여 허브에서 Copilot Studio 에이전트로 릴레이합니다.

  4. 고객이 핸드오프를 트리거하면 Copilot Studio는 전체 대화 컨텍스트를 사용하여 핸드오프를 시작합니다.

  5. 사용자 지정 어댑터는 핸드오프 메시지를 가로채고 전체 대화 컨텍스트를 구문 분석하며 에스컬레이션된 대화를 가용성에 따라 숙련된 휴먼 에이전트로 원활하게 라우팅합니다.

  6. 고객의 채팅은 대화를 재개할 수 있는 휴먼 에이전트에게 완벽하고 상황에 맞게 전달됩니다.

대화를 휴먼 에이전트에게 전달하려면 사용자 지정 핸드오프 어댑터를 빌드해야 합니다.

사용자 지정 핸드오프 어댑터 빌드

어댑터는 고객, 에이전트 및 인간 에이전트 간의 메시지를 릴레이하고 변환하여 에이전트 참여 허브와의 대화를 연결합니다.

가장 인기 있는 에이전트 참여 허브는 SDK(소프트웨어 개발 키트)를 제공하거나 API를 공개적으로 문서화하여 이러한 어댑터를 빌드할 수 있습니다.

사용자 지정 어댑터에 포함될 수 있는 내용을 다루는 것은 이 문서의 범위를 벗어납니다. 그러나 Copilot Studio에서 라이브 에이전트 환경에 대한 표준 핸드오프의 일부로 생성하는 내용을 기반으로 한 다음 샘플 핸드오프 메시지를 참고하면 시작하는 데 도움이 될 수 있습니다.

이 코드 조각 및 샘플을 사용하면 대화에서 컨텍스트를 추출하여 에이전트 대화를 일반 참여 허브로 원활하고 상황에 맞게 전달할 수 있습니다.

샘플 핸드오프 메시지 페이로드

핸드오프는 현재 Direct Line을 통해서만 지원됩니다. 에이전트와 상호 작용하는 방법에 대해 Direct Line자세히 알아보세요. 핸드오프 시 handoff.initiate라는 이벤트 활동이 발생하여 어댑터로 전송됩니다.

GitHub 사이트에서 전체 샘플 핸드오프 메시지 활동을 볼 수 있습니다.

핸드오프 메시지에서 컨텍스트 추출

대화 컨텍스트를 사용하려면 handoff.initiate 이벤트 활동을 구문 분석해야 합니다. 다음 코드 조각은 handoff.initiate 이벤트 활동을 구문 분석하여 대화 컨텍스트를 추출합니다. GitHub에서 전체 코드 샘플을 확인하십시오.

public void InitiateHandoff(string botresponseJson)
{
    BotResponse response = JsonConvert.DeserializeObject<BotResponse>(botresponseJson);

    // Look for Handoff Initiate Activity. This indicates that conversation needs to be handed off to agent
    Activity handoffInitiateActivity = response.Activities.ToList().FirstOrDefault(
        item => string.Equals(item.Type, ActivityTypes.Event, System.StringComparison.Ordinal)
        && string.Equals(item.Name, HandoffInitiateActivityName, System.StringComparison.Ordinal));

    if (handoffInitiateActivity != null)
    {
        // Read transcript from attachment
        if (handoffInitiateActivity.Attachments?.Any() == true)
        {
            Attachment transcriptAttachment = handoffInitiateActivity.Attachments.FirstOrDefault(a => string.Equals(a.Name.ToLowerInvariant(), TranscriptAttachmentName, System.StringComparison.Ordinal));
            if (transcriptAttachment != null)
            {
                Transcript transcript = JsonConvert.DeserializeObject<Transcript>(transcriptAttachment.Content.ToString());
            }
        }

        // Read handoff context
        HandoffContext context = JsonConvert.DeserializeObject<HandoffContext>(handoffInitiateActivity.Value.ToString());

        // Connect to Agent Hub
        // <YOUR CUSTOM ADAPTER CODE GOES HERE>
    }
}