웹훅

웹훅은 파트너가 만든 HTTPS 콜백으로, 에이전트가 메시지 및 이벤트에 응답하는 방법을 지정합니다. 웹훅을 구성한 후에는 메시지 수신이벤트를 시작할 수 있습니다.

파트너 웹훅 및 에이전트 웹훅

파트너 수준 또는 에이전트 수준에서 웹훅을 구성할 수 있습니다.

  • 파트너 웹훅은 관리하는 모든 상담사에게 적용됩니다. 에이전트의 동작이 비슷하거나 에이전트가 하나뿐이면 파트너 웹훅을 사용합니다.
  • 에이전트 웹훅은 개별 상담사에게 적용됩니다. 고유한 동작으로 여러 에이전트를 운영하는 경우 에이전트마다 서로 다른 웹훅을 설정할 수 있습니다.

파트너 웹훅과 에이전트 웹훅을 모두 구성한 경우 에이전트 웹훅은 특정 에이전트에서 우선 적용되지만 파트너 웹훅은 자체 웹훅이 없는 모든 에이전트에 적용됩니다.

에이전트 웹훅 구성

파트너 웹훅에서 에이전트로 전송된 메시지를 수신합니다. 특정 에이전트의 메시지가 다른 웹훅에 도착하도록 하려면 에이전트 웹훅을 설정하세요.

  1. 비즈니스 커뮤니케이션 개발자 콘솔을 열고 RBM 파트너 Google 계정으로 로그인합니다.
  2. 에이전트를 클릭합니다.
  3. 통합을 클릭합니다.
  4. 웹훅에서 구성을 클릭합니다.
  5. 웹훅 엔드포인트 URL에 'https://'로 시작하는 웹훅 URL을 입력합니다.
  6. clientToken 값을 기록해 둡니다. 수신되는 메시지가 Google에서 보낸 것인지 확인하는 데 필요합니다.
  7. 지정된 clientToken 매개변수가 있는 POST 요청을 수락하도록 웹훅을 구성하고 secret 매개변수의 일반 텍스트 값을 응답 본문으로 사용하여 200 OK 응답을 전송합니다.

    예를 들어 웹훅이 다음 본문 콘텐츠가 포함된 POST 요청을 수신하는 경우

    {
      "clientToken":"SJENCPGJESMGUFPY",
      "secret":"1234567890"
    }
    

    그러면 웹훅에서 clientToken 값을 확인하고, clientToken가 올바르면 응답 본문으로 1234567890를 사용하여 200 OK 응답을 반환합니다.

    // clientToken from Configure
    const myClientToken = "SJENCPGJESMGUFPY";
    
    // Example endpoint
    app.post("/rbm-webhook", (req, res) => {
      const msg = req.body;
      if (msg.clientToken === myClientToken) {
          res.status(200).send(msg.secret);
          return;
      }
      res.send(400);
    });
    
  8. Play Console에서 확인을 클릭합니다. RBM에서 웹훅을 확인하면 대화상자가 닫힙니다.

수신 메일 확인

웹훅은 모든 발신자로부터 메시지를 수신할 수 있으므로 메시지 콘텐츠를 처리하기 전에 Google이 수신 메시지를 보냈는지 확인해야 합니다.

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

  1. 메일의 X-Goog-Signature 헤더를 추출합니다. 메시지 본문 페이로드의 해시 및 base64 인코딩 사본입니다.
  2. 요청의 message.body 요소에서 RBM 페이로드를 Base-64로 디코딩합니다.
  3. 웹훅의 클라이언트 토큰 (웹훅을 설정할 때 지정함)을 키로 사용하여 base-64 디코딩된 메시지 페이로드 바이트의 SHA512 HMAC를 만들고 결과를 base64로 인코딩합니다.
  4. X-Goog-Signature 해시를 직접 만든 해시와 비교합니다.
    • 해시가 일치하면 Google에서 메시지를 보낸 것입니다.
    • 해시가 일치하지 않으면 정상으로 알려진 메시지의 해싱 프로세스를 확인합니다.

      해싱 프로세스가 올바르게 작동하고 있고 허위로 메시지가 전송되었다고 확신하는 메시지를 받으면 Google에 문의하세요.

Node.js

  if ((requestBody.hasOwnProperty('message')) && (requestBody.message.hasOwnProperty('data'))) {
    // Validate the received hash to ensure the message came from Google RBM
    let userEventString = Buffer.from(requestBody.message.data, 'base64');
    let hmac = crypto.createHmac('sha512', CLIENT_TOKEN);
    let data = hmac.update(userEventString);
    let genHash = data.digest('base64');
    let headerHash = req.header('X-Goog-Signature');

    if (headerHash === genHash) {
      let userEvent = JSON.parse(userEventString);

      console.log('userEventString: ' + userEventString);
      handleMessage(userEvent);
    } else {
      console.log('hash mismatch - ignoring message');
    }
  }

  res.sendStatus(200);
  

다음 단계

웹훅을 구성하면 에이전트가 테스트 기기에서 메시지를 수신할 수 있습니다. 설정을 검증하는 메시지를 전송합니다.