메시지 수신

Business Messages에 등록하면 테스트 에이전트를 대신하여 메시지를 수신할 수 있습니다. 해당 브랜드의 에이전트를 만들고, 확인하고, 실행한 후에 관리하는 브랜드의 메시지를 받을 수 있습니다.

고객이 내가 관리하는 에이전트에게 메시지를 보내면 Business Messages가 웹훅에 다양한 ID, 메시지 콘텐츠, 위치 정보가 포함된 JSON 페이로드를 전송합니다.

비즈니스 커뮤니케이션 개발자 콘솔 로그 페이지를 사용하여 메시지 전송 문제를 디버그하세요.

수신 메일 처리

에이전트가 사용자의 메시지를 처리하고 응답하는 방법은 비즈니스 로직에 따라 크게 달라집니다. 일반적으로 사용자 메시지에 응답하는 단계는 일관적입니다.

메시지 확인

웹훅에서 수신한 메시지를 확인하려면 웹훅으로 전송된 메시지에 유효한 HTTP 응답을 반환합니다.

전송 시간 초과, 웹훅 연결 가능성, 리디렉션 또는 권한 문제로 인해 메시지가 전송되지 않으면 Google에서 7일 동안 또는 웹훅이 메시지를 수신할 때까지 여러 번의 재시도와 함께 메시지를 저장하고 전달합니다.

Google에서 보낸 메시지인지 확인

메시지 콘텐츠를 처리하기 전에 Google에서 메시지를 보냈는지 확인해야 합니다.

수신한 메시지를 Google에서 보냈는지 확인하려면 다음 단계를 따르세요.

  1. 메시지의 X-Goog-Signature 헤더를 파싱합니다. 메시지 본문 페이로드의 해싱된 base64로 인코딩된 사본입니다.
  2. 클라이언트 토큰 (웹훅을 구성할 때 표시됨)을 키로 사용하여 메시지 페이로드의 바이트의 SHA512 HMAC를 만들고 결과를 base64로 인코딩합니다.

  3. X-Goog-Signature 해시를 직접 만든 해시와 비교합니다.

    • 해시가 일치하면 Google에서 메시지를 보낸 것입니다.
    • 해시가 일치하지 않으면 알려진 정상 메시지의 해싱 프로세스를 확인합니다. 해싱 프로세스가 올바르게 작동하고 허위로 전송되었다고 생각하는 메시지를 받는 경우 Google에 문의하세요 (Business Messages Google 계정으로 로그인해야 함).

자바, Node.js, Python의 Echo Bots GitHub 저장소에서 메시지 확인 예시를 참조하세요.

언어 식별

사용자는 여러 위치에서 다양한 언어로 통신합니다. Business Messages는 기기의 언어 설정을 기반으로 하는 resolvedLocaleuserDeviceLocale 필드를 사용하여 사용자의 언어 환경설정을 나타냅니다. 현지화 및 언어를 참고하세요.

가능한 경우 사용자의 언어 환경설정에 따라 메시지를 라우팅하고 응답을 작성합니다.

컨텍스트에 따라 메시지 라우팅

메시지 컨텍스트는 사용자가 찾고 있는 정보의 종류를 알려줍니다. 예를 들어 사용자가 placeId 값이 포함된 메시지를 보내는 경우 특정 위치 (placeId로 식별됨)에 메시지를 전송했으며 위치별 질문을 할 가능성이 높습니다. 마찬가지로 메시지에 사용자 근처의 위치를 식별하는 nearPlaceId 값이 있는 경우 사용자는 위치별 정보를 알고 싶어 하지만 상담사는 대화를 시작하기 전에 사용자가 채팅하려는 위치를 확인해야 합니다.

메시지의 컨텍스트 정보를 사용하여 메시지를 보내기에 가장 적합한 위치로 메시지를 라우팅합니다.

  • 메시지가 새 대화에 있고 일반적인 질문인 경우 자동화로 답변할 수 있습니다.
  • 자동화가 질문을 처리할 수 없는 경우 실제 상담사에게 라우트합니다.
  • 메시지 언어가 에이전트의 기본 언어와 일치하지 않으면 해당 언어를 지원할 수 있는 실제 에이전트로 메시지를 라우팅합니다.
  • 특정 위치와 관련된 질문인 경우 해당 위치에 관한 정보가 있는 사용자에게 라우트합니다.
  • 메시지가 진행 중인 대화의 경우 대화에 참여하는 실시간 상담사에게 라우팅합니다.

사용자가 전송한 메시지 유형 식별

사용자는 다음 세 가지 유형의 메시지를 보낼 수 있습니다.

  • 문자 메시지는 자유 형식의 응답입니다.
  • 이미지 메시지에는 사용자가 업로드한 이미지의 서명된 URL이 포함됩니다.
  • 제안 메시지에는 사용자가 탭한 추천 제안 또는 제안 응답의 포스트백 데이터와 텍스트가 포함됩니다.

메시지 콘텐츠 처리

에이전트가 자동화를 사용하는 경우 사용자 메시지의 콘텐츠는 에이전트의 로직과 대화의 다음 응답을 안내해야 합니다.

사용자 의도를 식별하는 가장 쉬운 방법은 추천된 답장이나 추천 작업의 포스트백 데이터를 사용하는 것입니다. 추천 텍스트와 관련된 텍스트와 관계없이 포스트백 데이터는 컴퓨터가 읽을 수 있습니다.

사용자가 문자 메시지를 보내면 에이전트가 지원되는 키워드에 대한 응답을 파싱하거나 자연어 이해 (예: Dialogflow 통합)를 사용하여 사용자의 메시지를 처리하고 경로를 파악할 수 있습니다.

에이전트가 사용자의 메시지에 응답하는 방법을 모르는 경우 오류 상태로 응답하고 사용자에게 추가 정보를 요청하거나 다른 방식으로 입력을 요청하거나 대화를 실제 상담사에게 넘겨 대화를 계속 진행해야 합니다.

사용자에게 응답하기

에이전트가 자동화 또는 실시간 에이전트를 통해 올바른 응답을 식별하면 메시지를 전송하고 사용자와 대화를 계속 진행합니다.

응답을 작성할 때 사용자의 언어를 고려하세요. 수신하는 각 메시지의 userInfo 객체에서 값을 검색하여 응답을 추가로 맞춤설정할 수 있습니다.

메시지 유형

다음 코드는 에이전트가 메시지를 수신하는 방법을 보여줍니다.

형식 지정 및 값 정보는 UserMessage을 참조하세요.

텍스트

사용자가 응답하는 가장 일반적인 방법은 일반 텍스트입니다. 문자 메시지의 형식은 다음과 같습니다.

{
  "agent": "brands/BRAND_ID/agents/AGENT_ID",
  "conversationId": "CONVERSATION_ID",
  "customAgentId": "CUSTOM_AGENT_ID",
  "requestId": "REQUEST_ID",
  "message": {
    "messageId": "MESSAGE_ID",
    "name": "conversations/CONVERSATION_ID/messages/MESSAGE_ID",
    "text": "MESSAGE_TEXT",
    "createTime": "MESSAGE_CREATE_TIME",
  },
  "dialogflowResponse": {
    "autoResponded": "BOOLEAN",
    "faqResponse": {
      "userQuestion": "USER_QUESTION",
      "answers": [{
        "faqQuestion": "FAQ_QUESTION",
        "faqAnswer": "FAQ_ANSWER",
        "matchConfidenceLevel": "CONFIDENCE_LEVEL",
        "matchConfidence": "CONFIDENCE_NUMERIC",
      }],
    },
  },
  "context": {
    "entryPoint": "CONVERSATION_ENTRYPOINT",
    "placeId": "LOCATION_PLACE_ID",
    "resolvedLocale": "MATCH_OF_USER_AND_AGENT_LOCALES",
    "userInfo": {
      "displayName": "USER_NAME",
      "userDeviceLocale": "USER_LOCALE",
    },
  },
  "sendTime": "SEND_TIME",
}

형식 지정 및 값 옵션은 Message을 참고하세요.

이미지

사용자는 텍스트를 보내는 것 외에도 이미지를 메시지로 보낼 수 있습니다. Business Messages는 7일 동안 서명된 URL에 공유 이미지를 저장하며 해당 URL을 메시지 페이로드의 text 필드에 포함합니다.

에이전트에 자동화가 포함된 경우 사용자가 이미지를 공유하면 자동화에서 응답하는 방법을 알아야 합니다. 실시간 에이전트의 경우 이미지가 전달되거나 메시지의 URL을 클릭할 수 있는지 확인하세요.

...
"message": {
    "text": "https://storage.googleapis.com/business-messages-us/936640919331/jzsu6cdguNGsBhmGJGuLs1DS?x-goog-algorithm\u003dGOOG4-RSA-SHA256\u0026x-goog-credential\u003duranium%40rcs-uranium.iam.gserviceaccount.com%2F20190826%2Fauto%2Fstorage%2Fgoog4_request\u0026x-goog-date\u003d20190826T201038Z\u0026x-goog-expires\u003d604800\u0026x-goog-signedheaders\u003dhost\u0026x-goog-signature\u003d89dbf7a74d21ab42ad25be071b37840a544a43d68e67270382054e1442d375b0b53d15496dbba12896b9d88a6501cac03b5cfca45d789da3e0cae75b050a89d8f54c1ffb27e467bd6ba1d146b7d42e30504c295c5c372a46e44728f554ba74b7b99bd9c6d3ed45f18588ed1b04522af1a47330cff73a711a6a8c65bb15e3289f480486f6695127e1014727cac949e284a7f74afd8220840159c589d48dddef1cc97b248dfc34802570448242eac4d7190b1b10a008404a330b4ff6f9656fa84e87f9a18ab59dc9b91e54ad11ffdc0ad1dc9d1ccc7855c0d263d93fce6f999971ec79879f922b582cf3bb196a1fedc3eefa226bb412e49af7dfd91cc072608e98"
  }
...

형식 지정 및 값 옵션은 Message을 참고하세요.

제안사항

추천 답장 및 추천 작업을 통해 사용자는 탭 한 번으로 응답하거나 작업을 실행할 수 있습니다. 사용자가 추천을 탭하면 에이전트는 추천 텍스트와 포스트백 데이터가 포함된 페이로드를 수신합니다.

추천 메시지의 형식은 다음과 같습니다.

{
  "agent": "brands/BRAND_ID/agents/AGENT_ID",
  "conversationId": "CONVERSATION_ID",
  "customAgentId": "CUSTOM_AGENT_ID",
  "requestId": "REQUEST_ID",
  "suggestionResponse": {
    "message": "conversations/CONVERSATION_ID/messages/MESSAGE_ID",
    "postbackData": "POSTBACK_DATA",
    "createTime": "RESPONSE_CREATE_TIME",
    "text": "SUGGESTION_TEXT",
    "suggestionType": "SUGGESTION_TYPE",
  }
  "context": {
    "entryPoint": "CONVERSATION_ENTRYPOINT",
    "placeId": "LOCATION_PLACE_ID",
    "resolvedLocale": "MATCH_OF_USER_AND_AGENT_LOCALES",
    "userInfo": {
      "displayName": "USER_NAME",
      "userDeviceLocale": "USER_LOCALE",
    },
  },
  "sendTime": "SEND_TIME",
}

형식 지정 및 값 옵션은 SuggestionResponse을 참고하세요.

인증 요청

인증 요청 제안을 사용하면 사용자가 OAuth 제공업체로 로그인하여 에이전트에 ID 세부정보를 제공하거나 에이전트가 사용자를 대신하여 작업을 수행할 수 있습니다. OAuth로 인증을 참조하세요.

사용자가 지정된 OAuth 제공업체로 로그인하면 에이전트는 승인 코드가 포함된 페이로드를 수신합니다. 사용자가 로그인에 실패하면 에이전트가 오류 세부정보가 포함된 페이로드를 수신합니다.

인증 요청 메시지의 형식은 다음과 같습니다.

{
  "agent": "brands/BRAND_ID/agents/AGENT_ID",
  "conversationId": "CONVERSATION_ID",
  "customAgentId": "CUSTOM_AGENT_ID",
  "requestId": "REQUEST_ID",
  "authenticationResponse": {
    "code": "AUTHORIZATION_CODE",
    "redirect_uri": "REDIRECT_URI",
    "errorDetails": {
      "error": "ERROR",
      "errorDescription": "ERROR_DESCRIPTION",
    },
  }
  "context": {
    "entryPoint": "CONVERSATION_ENTRYPOINT",
    "placeId": "LOCATION_PLACE_ID",
    "resolvedLocale": "MATCH_OF_USER_AND_AGENT_LOCALES",
    "userInfo": {
      "displayName": "USER_NAME",
      "userDeviceLocale": "USER_LOCALE",
    },
  },
  "sendTime": "SEND_TIME",
}

형식 지정 및 값 옵션은 AuthenticationResponse을 참고하세요.

메시지 컨텍스트

각 메시지에는 메시지가 시작된 위치에 대한 컨텍스트 정보가 포함되어 있습니다.

...
  "context": {
    "customContext": "CUSTOM_CONTEXT",
    "entryPoint": "CONVERSATION_ENTRYPOINT",
    "placeId": "LOCATION_PLACE_ID",
    "nearPlaceId": "NEARBY_LOCATION_PLACE_ID",
    "deflectedPhoneNumber": "DEFLECTED_PHONE_NUMBER",
    "resolvedLocale": "MATCH_OF_USER_AND_AGENT_LOCALES",
    "userInfo": {
      "displayName": "USER_NAME",
      "userDeviceLocale": "USER_LOCALE",
    },
    "widget": {
      "url": "WEBSITE_URL",
      "widgetContext": "WIDGET_CONTEXT",
    },
  },
...
필드 설명
customContext 파트너가 지정한 컨텍스트 데이터입니다.
entryPoint EntryPoint에 정의된 대로 사용자가 대화를 시작한 메시지 노출 영역입니다.
placeId 사용자가 메시지를 보낸 위치의 Google 지역 정보 데이터베이스의 고유 식별자입니다. 위치별 진입점의 메시지에만 표시됩니다.
nearPlaceId 로컬 팩의 첫 번째 위치에 대한 Google 지역 정보 데이터베이스의 고유 식별자입니다. nearPlaceId 값을 받으면 사용자가 채팅하려는 위치를 확인합니다.
deflectedPhoneNumber Business Messages가 대화를 시작할 때 사용자의 통화에서 벗어나는 전화번호입니다.
resolvedLocale

가장 잘 계산된 사용자 언어 (userDeviceLocale에서 보고됨)와 에이전트에서 지원되는 언어(지정된 대화 설정에 따라 결정됨)입니다. 현지화대화 시작을 참고하세요.

언어 값은 올바른 형식의 IETF BCP 47 언어 태그입니다.

userInfo.displayName 메시지를 보낸 사용자의 이름입니다. 사용자가 ID 공유를 선택 해제하면 이 필드는 비어 있습니다.
userInfo.userDeviceLocale 기기에서 보고한 사용자의 언어로, 올바른 형식의 IETF BCP 47 언어 태그입니다.
widget.url 대화형 노출 영역이 시작된 웹사이트의 URL입니다.
widget.widgetContext 대화를 시작하는 데 사용되는 위젯의 data-bm-widget-context 속성 값입니다.

대화 기록

Google에서는 대화 기록을 제공하지 않습니다. 개인정보처리방침 및 권장사항을 준수하는 방식으로 이전 대화를 유지하여 사용자의 향후 메시지에 친절한 응답을 보낼 수 있습니다.