Dialogflow로 자동화 추가

Dialogflow는 사용자 입력을 처리하고 이를 알려진 인텐트에 매핑하며 적절한 응답으로 응답하는 자연어 이해 (NLU) 도구입니다. Dialogflow는 두 가지 버전이 있습니다. Business Messages 에이전트를 Dialogflow ES와 통합하면 간단한 자동화를 쉽게 만들어 에이전트 개발을 빠르게 시작할 수 있습니다. Dialogflow CX와 통합하면 더 복잡한 대화를 위한 고급 자동화를 만들 수 있습니다.

Business Messages 에이전트는 고객과의 직접 통합을 지원합니다.

Business Messages 에이전트를 Dialogflow ES 또는 Dialogflow CX의 다른 기능과 통합하려면 각 제품의 문서를 참조하세요.

사용자가 Dialogflow 통합이 있는 에이전트에 메시지를 보내면 Business Messages가 사용자 메시지를 Dialogflow로 전달하고 Dialogflow의 응답을 메시지의 dialogflowResponse 객체로 에이전트에 보냅니다. 별도의 조치를 취하지 않아도 Dialogflow의 응답을 사용자에게 자동으로 전송하도록 구성할 수 있습니다. 자세한 내용은 자동 응답을 참조하세요.

Dialogflow 통합

Business Messages를 통해 Dialogflow 기반 자동화를 사용하려면 먼저 Dialogflow 통합을 사용 설정해야 합니다.

기본 요건

시작하려면 다음이 필요합니다.

  • Business Messages 에이전트
  • 루트 언어가 영어(en)인 전역 리전의 Dialogflow 에이전트

Dialogflow 에이전트가 없는 경우 에이전트를 만듭니다.

Dialogflow ES

Dialogflow ES 통합을 사용 설정하려면 Dialogflow 에이전트의 프로젝트 ID가 필요합니다. 프로젝트 ID를 찾으려면

  1. Dialogflow 콘솔로 이동합니다.
  2. Business Messages에 연결할 Dialogflow 에이전트를 선택한 다음 에이전트 이름 옆에 있는 톱니바퀴 아이콘 을 클릭합니다.
  3. Google 프로젝트에서 프로젝트 ID 값을 확인합니다.

Dialogflow CX

Dialogflow CX 통합을 사용 설정하려면 Dialogflow 에이전트의 프로젝트 ID와 에이전트 ID가 필요합니다. 이러한 ID를 찾으려면

  1. Dialogflow CX 콘솔로 이동합니다.
  2. Dialogflow 프로젝트를 선택합니다.
  3. 에이전트 선택기에서 Dialogflow 에이전트 옆에 있는 더보기 메뉴 를 클릭합니다.
  4. 이름 복사를 클릭합니다. 에이전트의 전체 이름이 projects/PROJECT_ID/locations/REGION_ID/agents/AGENT_ID 형식으로 복사됩니다.
  5. 프로젝트 ID와 에이전트 ID 값을 기록해 둡니다.

통합 사용 설정

  1. 비즈니스 커뮤니케이션 개발자 콘솔에서 통합으로 이동합니다.
  2. Dialogflow에서 통합 사용 설정을 클릭합니다.
  3. 기존 모델 연결을 클릭합니다.
  4. Dialogflow 버전에서 사용 설정할 버전을 선택합니다.
  5. Dialogflow 에이전트의 프로젝트 ID를 입력하세요.
  6. Dialogflow CX를 사용 설정하려면 Dialogflow 에이전트의 에이전트 ID도 입력하세요.
  7. Business Messages가 Dialogflow 응답으로 사용자에게 자동으로 응답하도록 하려면 자동 응답 사용 설정을 선택합니다.
  8. 다음을 클릭합니다.
  9. 서비스 계정 이메일을 복사합니다. 이 계정은 Business Messages와 Dialogflow 에이전트를 연결합니다.
  10. Google Cloud Console에서 Dialogflow 프로젝트를 선택합니다.
  11. IAM 권한으로 이동합니다.
  12. 추가를 클릭하고 새 주 구성원의 서비스 계정 이메일을 입력합니다.
  13. 역할 선택에서 Dialogflow 콘솔 에이전트 편집자를 선택합니다.
  14. 다른 역할 추가를 클릭하고 Dialogflow API 클라이언트를 선택합니다.
  15. 저장을 클릭합니다.
  16. 비즈니스 커뮤니케이션 개발자 콘솔에서 다음을 클릭합니다.
  17. 통합 시작을 클릭합니다.

Business Messages와 Dialogflow를 연결하는 데는 약 2분이 소요됩니다.

통합 업데이트

  1. 비즈니스 커뮤니케이션 개발자 콘솔에서 통합으로 이동합니다.
  2. Dialogflow 옆에 있는 톱니바퀴 아이콘 을 클릭합니다.
  3. Business Messages가 Dialogflow 응답으로 사용자에게 자동으로 응답할지 여부에 따라 자동 응답 사용 설정을 전환합니다.

Dialogflow 버전 간 전환하기

Business Messages 에이전트는 한 번에 Dialogflow 통합 하나만 지원할 수 있습니다. Dialogflow 버전에서 다른 버전으로 전환하려면 새 통합을 사용 설정하기 전에 현재 통합을 사용 중지해야 합니다.

통합 사용 중지

  1. 비즈니스 커뮤니케이션 개발자 콘솔에서 통합으로 이동합니다.
  2. Dialogflow 옆에 있는 톱니바퀴 아이콘 을 클릭합니다.
  3. 통합 사용 중지를 클릭합니다.
  4. 사용 중지를 클릭합니다.

기존 Dialogflow 통합을 사용 중지하는 데 1분 정도 걸립니다.

이 단계에 따라 새로운 Dialogflow 통합을 사용 설정합니다.

인텐트 매칭

Business Messages 에이전트에 Dialogflow 통합을 사용 설정하면 에이전트는 코드를 작성할 필요 없이 Dialogflow 프로젝트의 구성된 인텐트를 사용하여 사용자 질문을 이해하고 응답할 수 있습니다. 인텐트에 대한 자세한 내용은 Dialogflow ESDialogflow CX 문서를 참조하세요.

자동화를 통해 지원하려는 모든 대화 옵션에 Dialogflow 인텐트를 구성합니다. Business Messages 에이전트는 사용자 메시지를 이해하기 위해 Dialogflow를 사용합니다.

Dialogflow API를 호출할 때 Business Messages는 사용자 메시지 페이로드를 인텐트 및 fulfillment 웹훅에 전달합니다. 사용자 메시지가 인텐트와 일치하면 QueryParametersbusiness_messages_payload 필드에서 Struct 형식으로 이 페이로드에 액세스할 수 있습니다.

페이로드에는 DialogflowResponse를 제외한 사용자 메시지의 모든 필드가 포함되어 있습니다.

Dialogflow CX의 경우 Business Messages는 google_business_messages라는 값이 포함된 channel라는 세션 매개변수를 인텐트에 전달하고 에이전트에서 $session.params.channel 형식으로 참조할 수 있습니다.

이 매개변수는 동일한 Dialogflow 에이전트에서 여러 채널을 지원하기 위해 Dialogflow fulfillment조건부를 추가하는 데 사용할 수 있습니다.

쿼리 매개변수에 대한 자세한 내용은 Dialogflow ESDialogflow CX 참조를 확인하세요.

기본 요건

Dialogflow 내에서 NLU 모델을 만들 때 인텐트에 다양한 응답 유형을 구성할 수 있습니다. Business Messages는 기본 응답을 지원하며 여기에는 다음이 포함될 수 있습니다.

  • 텍스트
  • 커스텀 페이로드
  • 실시간 상담사 연결 (Dialogflow CX만 해당)

커스텀 페이로드는 유효한 Business Messages JSON 메시지 응답 객체와 일치해야 합니다. 인텐트에 커스텀 페이로드 응답을 구성할 때 Business Messages는 다음 필드를 무시합니다.

  • name
  • messageId
  • representative

다음 샘플 응답을 참고하세요.

제안사항이 있는 텍스트

{
  "text": "Hello World!",
  "fallback": "Hello World!\n\nReply with \"Hello\" or \"Hi!\"",
  "suggestions": [
    {
      "reply": {
        "text": "Hello",
        "postbackData": "hello-formal"
      }
    },
    {
      "reply": {
        "text": "Hi!",
        "postbackData": "hello-informal"
      }
    }
  ]
}

리치 카드

{
  "fallback": "Hello, world!\nSent with Business Messages\n\nReply with \"Suggestion #1\" or \"Suggestion #2\"",
  "richCard": {
    "standaloneCard": {
      "cardContent": {
        "title": "Hello, world!",
        "description": "Sent with Business Messages.",
        "media": {
          "height": "TALL",
          "contentInfo":{
            "altText": "Google logo",
            "fileUrl": "https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png",
            "forceRefresh": "false"
          }
        },
        "suggestions": [
          {
            "reply": {
              "text": "Suggestion #1",
              "postbackData": "suggestion_1"
            }
          },
          {
            "reply": {
              "text": "Suggestion #2",
              "postbackData": "suggestion_2"
            }
          }
        ]
      }
    }
  }
}
{
  "fallback": "Card #1\nThe description for card #1\n\nCard #2\nThe description for card #2\n\nReply with \"Card #1\" or \"Card #2\"",
  "richCard": {
    "carouselCard": {
      "cardWidth": "MEDIUM",
      "cardContents": [
        {
          "title": "Card #1",
          "description": "The description for card #1",
          "suggestions": [
            {
              "reply": {
                "text": "Card #1",
                "postbackData": "card_1"
              }
            }
          ],
          "media": {
            "height": "MEDIUM",
            "contentInfo": {
              "fileUrl": "https://my.files/cute-dog.jpg",
              "forceRefresh": false
            }
          }
        },
        {
          "title": "Card #2",
          "description": "The description for card #2",
          "suggestions": [
            {
              "reply": {
                "text": "Card #2",
                "postbackData": "card_2"
              }
            }
          ],
          "media": {
            "height": "MEDIUM",
            "contentInfo": {
              "fileUrl": "https://my.files/elephant.jpg",
              "forceRefresh": false
            }
          }
        }
      ]
    }
  }
}

실시간으로 상담사에게 전달

{
  "metadata": {}
}

FAQ 봇

Business Messages 에이전트에 Dialogflow ES 통합을 사용 설정한 후 FAQ 봇을 만들 수 있습니다. 질문과 답변을 지원되는 지식 문서로 제공하면 Business Messages 및 Dialogflow가 코드를 작성하지 않고도 사용자 질문을 이해하고 응답하는 데 필요한 인프라를 만듭니다.

FAQ 봇의 작동 방식을 확인하려면 Business Messages FAQ 봇과 채팅하세요.

기본 요건

FAQ 봇을 만들려면 공개적으로 사용 가능한 HTML 파일 또는 CSV 파일인 지식 문서 (최대 50MB)로 질문과 답변을 제공해야 합니다.

일반적으로 지식 문서

  • 서식 있는 텍스트에 지정된 대로 답변에 제한된 마크다운을 포함할 수 있습니다.
  • 최대 크기는 50MB입니다.
  • 질문/응답 쌍 2,000개 이하여야 합니다.
  • 다른 질문의 중복 질문은 지원하지 않습니다.

HTML 파일의 경우

  • 공개 URL의 파일은 검색 색인에 존재할 수 있도록 Google 검색 색인 생성기가 크롤링한 것이어야 합니다. Google Search Console을 사용하여 확인할 수 있습니다. 색인 생성자는 콘텐츠를 최신 상태로 유지하지 않는다는 점에 유의하세요. 소스 콘텐츠가 변경되면 문서를 명시적으로 업데이트해야 합니다.
  • Dialogflow는 응답을 생성할 때 콘텐츠에서 HTML 태그를 삭제합니다. 따라서 가능하면 HTML 태그를 사용하지 않고 일반 텍스트를 사용하는 것이 좋습니다.
  • 하나의 질문/응답 쌍이 있는 파일은 지원되지 않습니다.

CSV 파일의 경우

  • 파일은 첫 번째 열에 질문을 포함하고 두 번째 열에는 헤더가 없어야 합니다.
  • 파일은 쉼표를 구분 기호로 사용해야 합니다.

FAQ 봇 만들기

  1. 비즈니스 커뮤니케이션 개발자 콘솔에서 통합으로 이동합니다.
  2. 기술 자료 (FAQ)에서 기술 자료 만들기를 클릭합니다.
  3. 기술 자료 이름을 입력한 후 다음을 클릭합니다.
  4. MIME 유형을 선택합니다.
  5. 기술 문서를 추가합니다.
    • MIME 유형으로 HTML을 선택한 경우 FAQ에 공개적으로 액세스할 수 있는 URL을 URL에 입력합니다.
    • MIME 유형으로 CSV를 선택한 경우 업로드를 클릭하고 CSV 파일을 선택합니다.
  6. 추가 및 완료를 클릭합니다.

FAQ 봇에 문서를 추가하려면 문서 추가 버튼을 클릭합니다.

이 단계를 수행하면 Business Messages가 에이전트로 전송하는 사용자 메시지에 dialogflowResponse 객체가 포함됩니다. 자동 응답을 사용 설정하면 Business Messages가 사용자의 메시지와 비교할 때 matchConfidence 점수가 가장 높은 질문/응답 쌍으로 사용자에게 응답합니다.

자동 응답

Dialogflow 통합 중에 자동 응답을 사용 설정하면 비즈니스 메시지가 Dialogflow를 통해 사용자에게 자동으로 응답합니다. Business Messages 에이전트가 신뢰도 수준이 가장 높은 값으로 응답합니다. Dialogflow ES 통합을 사용하면 FAQ 답변 및 커스텀 인텐트와 일치하는 항목이 있을 때 Business Messages가 신뢰도가 가장 높은 일치 항목으로 응답합니다.

Business Messages는 모든 자동 응답 메시지를 BOT 담당자가 보낸 것으로 표시합니다. 에이전트가 실시간 에이전트를 지원하는 경우 Business Messages는 REPRESENTATIVE_JOINED이벤트 후에 자동 응답을 정지하고 REPRESENTATIVE_LEFT 이벤트 후에 자동 응답을 재개합니다. 봇에서 실시간 에이전트로 전달을 참조하세요.

FAQ 답변으로 자동 응답

Dialogflow ES 통합을 사용하면 FAQ 답변의 신뢰도 수준이 가장 높은 경우 Business Messages가 이 답변을 SMS에 매핑합니다. 관련 있지만 다른 답변을 사용할 수 있는 경우 메시지에 '다른 답변 보기' 제안이 표시됩니다. 그렇지 않은 경우 메시지에 질문과 사용자의 요청이 충족되었는지 묻는 답장이 포함됩니다.

인텐트 응답으로 자동 응답

인텐트 응답에는 다음 응답이 하나 이상 포함될 수 있습니다.

인텐트 응답의 신뢰도 수준이 가장 높은 경우 다음이 적용됩니다.

  • 응답에 텍스트 값이 하나 이상 있으면 Business Messages가 이 값을 문자 메시지에 매핑합니다.
  • 응답에 유효한 Business Messages JSON 객체 구조가 있는 커스텀 페이로드가 하나 이상 있으면 Business Messages가 제공된 JSON 객체를 사용하여 메시지를 만듭니다.
  • 응답에 하나 이상의 실시간 에이전트 핸드오프 응답이 있으면 실시간 에이전트 요청으로 자동 응답을 참조하세요.

Dialogflow는 하나의 인텐트 일치 내에 여러 응답을 포함할 수 있으므로 Business Messages는 각 텍스트, 커스텀 페이로드 또는 실시간 에이전트 핸드오프 응답을 별도의 메시지로 보냅니다. 인텐트 일치에 여러 메시지가 있지만 그중 일부의 형식이 잘못된 경우 Business Messages는 유효한 메시지만 자동 응답으로 전송합니다.

실제 상담사의 요청에 자동 응답하기

Dialogflow CX는 실시간 에이전트 핸드오프 응답을 지원합니다. 대화를 담당자에게 전달해야 함을 나타내며, 이를 통해 핸드오프 절차의 커스텀 메타데이터를 전달할 수 있습니다. 인텐트 응답의 신뢰도 수준이 가장 높고 실시간 에이전트 핸드오프가 포함된 경우 Business Messages가 웹훅에 실시간 에이전트 요청 이벤트를 전송합니다. 이 이벤트를 처리하려면 봇에서 실시간 에이전트로 전달을 참조하세요.

대체 메시지로 자동 응답

Dialogflow가 높은 신뢰도 수준을 가져오지 못하면 Business Messages가 대체 응답을 보냅니다. Dialogflow ES 및 Dialogflow CX에서 대체는 다르게 처리됩니다.

Dialogflow ES

FAQ 봇의 경우 FAQ 답변과 일치하는 값이 없으면 Business Messages는 답변을 찾을 수 없는 대체 메시지를 전송합니다.

구성된 인텐트의 경우 인텐트 응답과 일치하지 않는 경우 Business Messages는 대체 인텐트 응답을 전송합니다. Dialogflow에서 제공하는 대체 텍스트를 사용하거나 추가 텍스트와 커스텀 페이로드로 대체를 구성할 수 있습니다.

웹훅이 수신할 수 있는 대체 인텐트 응답의 예는 다음과 같습니다.

{
  "intentResponses": [
    {
      "intentName": "projects/df-integration/agent/intents/12345",
      "intentDisplayName": "Default Fallback Intent",
      "intentDetectionConfidence": "1.0",
      "fulfillmentMessages": [
        {
          "text": "One more time?"
        }
      ]
    }
  ]
}

Dialogflow에 intent_nameintent_display_name가 자동으로 입력됩니다.

Dialogflow CX

Dialogflow CX는 대체 인텐트 응답을 기본 제공 이벤트로 처리합니다. 인텐트 응답과 일치하는 항목이 없으면 Business Messages는 Dialogflow의 일치 항목 없음 기본 이벤트에서 대체 메시지를 보냅니다. Dialogflow에서 제공하는 대체 텍스트를 사용하거나 추가 텍스트, 커스텀 페이로드, 실시간 에이전트 핸드오프 옵션으로 대체를 구성할 수 있습니다.

웹훅이 수신할 수 있는 대체 인텐트 응답의 예는 다음과 같습니다.

{
  "intentResponses": [
    {
      "intentName": "sys.no-match-default",
      "intentDisplayName": "Default Fallback Intent",
      "intentDetectionConfidence": "0.3",
      "fulfillmentMessages": [
        {
          "text": "I missed that, say that again?"
        }
      ]
    }
  ]
}

Business Messages는 하드 코딩된 intent_nameintent_display_name입니다.

Dialogflow 관련 필드

Dialogflow 통합을 사용 설정하면 에이전트가 수신하는 사용자 메시지에 dialogflowResponse 객체가 포함됩니다. 웹훅은 Business Messages가 사용자를 대신하여 메시지에 자동으로 응답했는지와 관계없이 모든 사용자 메시지의 페이로드를 수신합니다. 자동 응답을 확인하려면 autoResponded 필드의 값을 확인하고 사용자에게 응답해야 하는지 결정합니다.

Dialogflow ES

...
"dialogflowResponse": {
  "queryText": "TEXT",
  "intentResponse": {
    "intentName": "INTENT_ID",
    "intentDisplayName": "INTENT_NAME",
    "intentDetectionConfidence": "CONFIDENCE_NUMERIC",
    "fulfillmentMessages": [{
      "text": "FULFILLMENT_TEXT",
      "jsonPayload": "JSON",
      "error": "ERROR_STATUS",
    }],
  "faqResponse": {
    "userQuestion": "USER_QUESTION",
    "answers": [{
      "faqQuestion": "FAQ_QUESTION",
      "faqAnswer": "FAQ_ANSWER",
      "matchConfidenceLevel": "CONFIDENCE_LEVEL",
      "matchConfidence": "CONFIDENCE_NUMERIC",
    }],
  },
  "autoResponded": "BOOLEAN",
  "autoRespondedMessages": [{
    "message": "MESSAGE_JSON",
    "responseSource": "SOURCE",
  }],
},
...
필드 설명
queryText 원래 대화형 쿼리 텍스트입니다. Dialogflow 모델에 자동 맞춤법 교정이 사용 설정된 경우 queryText에 수정된 사용자 입력이 포함됩니다.
intentName 일치된 인텐트의 고유 식별자입니다.
intentDisplayName 일치하는 인텐트의 이름입니다.
intentDetectionConfidence queryText에서 intentName 사이의 일치 항목의 숫자 신뢰도 등급입니다.
text 텍스트 응답입니다.
jsonPayload 커스텀 페이로드 응답입니다. 이 문자열은 Dialogflow에 정의된 커스텀 페이로드와 일치합니다. 페이로드에 유효한 Business Messages JSON 객체 구조가 없으면 error가 문제를 설명합니다.
error 인텐트 처리 메시지와 함께 오류 설명
userQuestion Dialogflow에서 파싱한 질문입니다.
faqQuestion Dialogflow의 질문이 사용자의 질문과 일치합니다.
faqAnswer Dialogflow의 답변이 사용자의 질문에 일치합니다.
matchConfidenceLevel userQuestionfaqQuestion의 일치 신뢰도입니다.
matchConfidence userQuestion에서 faqQuestion 사이의 일치 항목의 숫자 신뢰도 등급입니다.
autoResponded Business Messages가 Dialogflow의 답변을 통해 사용자에게 자동으로 응답했는지 여부입니다.
message 자동 응답의 페이로드입니다.
responseSource 자동 응답의 소스입니다. ResponseSource을 참고하세요.

Dialogflow CX

...
"dialogflowResponse": {
  "queryText": "TEXT",
  "intentResponse": {
    "intentName": "INTENT_ID",
    "intentDisplayName": "INTENT_NAME",
    "intentDetectionConfidence": "CONFIDENCE_NUMERIC",
    "fulfillmentMessages": [{
      "text": "FULFILLMENT_TEXT",
      "jsonPayload": "JSON",
      "error": "ERROR_STATUS",
      "liveAgentHandoff": {
        "metadata": {}
      }
    }],
  "autoResponded": "BOOLEAN",
  "autoRespondedMessages": [{
    "message": "MESSAGE_JSON",
    "responseSource": "SOURCE",
  }],
},
...
필드 설명
queryText 원래 대화형 쿼리 텍스트입니다. Dialogflow 모델에 자동 맞춤법 교정이 사용 설정된 경우 queryText에 수정된 사용자 입력이 포함됩니다.
intentName 일치된 인텐트의 고유 식별자입니다.
intentDisplayName 일치하는 인텐트의 이름입니다.
intentDetectionConfidence queryText에서 intentName 사이의 일치 항목의 숫자 신뢰도 등급입니다.
text 텍스트 응답입니다.
jsonPayload 커스텀 페이로드 응답입니다. 이 문자열은 Dialogflow에 정의된 커스텀 페이로드와 일치합니다. 페이로드에 유효한 Business Messages JSON 객체 구조가 없으면 error가 문제를 설명합니다.
error 인텐트 처리 메시지와 함께 오류 설명
liveAgentHandoff 실시간 에이전트 핸드오프 절차의 커스텀 메타데이터입니다.
autoResponded Business Messages가 Dialogflow의 답변을 통해 사용자에게 자동으로 응답했는지 여부입니다.
message 자동 응답의 페이로드입니다.
responseSource 자동 응답의 소스입니다. ResponseSource을 참고하세요.