본문으로 건너뛰기
문서 메뉴회원 연동

메신저

회원 연동

이미 로그인한 회원에게 인증 코드를 다시 받을 필요는 없어요. 서버에서 계산한 memberHash를 함께 부팅하면 엔트로피가 회원을 확인하고 바로 대화를 열어요.

동작 방식

  1. 회원이 로그인하면 서버에서 memberHash = hex(HMAC_SHA256(memberHashSecret, memberId))를 계산해요.
  2. 페이지를 렌더링할 때 memberId와 memberHash를 부팅 옵션에 넣어요.
  3. 엔트로피는 같은 값을 계산해 상수 시간 비교로 확인해요. 맞으면 연락처를 externalMemberId에 묶고 인증된 것으로 처리해요.
  4. 연락처에 이름이 없으면 이름만 한 번 물어봐요. 이름은 대화를 시작하는 데 꼭 필요해요.

memberHash 계산하기

import { createHmac } from 'node:crypto';

/** memberHash = hex(HMAC_SHA256(memberHashSecret, memberId)) */
export function memberHash(memberId, secret = process.env.ENTROPY_MEMBER_HASH_SECRET) {
  return createHmac('sha256', secret).update(String(memberId)).digest('hex');
}

부팅 요청

위젯이 보내는 요청과 응답은 아래와 같아요. 직접 부팅을 구현할 때 참고하세요.

요청
POST /v1/messenger/boot
Content-Type: application/json

{
  "pluginKey": "pk_live_xxxxxxxxxxxx",
  "memberId": "user_2041",
  "memberHash": "9f2c…e81a",
  "profile": {
    "name": "고객"
  }
}
응답
{
  "sessionToken": "mst_…",
  "expiresAt": "2026-10-27T09:30:00Z",
  "channel": {
    "id": "ch_01J…",
    "name": "엔트로피",
    "brandColor": "#4F46E5",
    "welcomeMessage": "무엇을 도와드릴까요?"
  },
  "contact": {
    "id": "ct_01J…",
    "externalMemberId": "user_2041",
    "name": "고객"
  },
  "verified": true
}

해시가 틀리면 회원 정보 없이 부팅돼요(verified: false). 이때 고객은 일반 본인인증 흐름을 거쳐요.

로그아웃

회원이 로그아웃하면 EntropyMessenger('shutdown')을 호출해 세션을 지우세요. 같은 브라우저를 쓰는 다음 사람이 이전 대화를 보지 못하게 해요.

비회원으로 인증한 연락처는 웹훅의 contact.verified에 { externalMemberId }로 응답하거나, 서버 API PATCH /v1/channels/:channelId/contacts/:id로 나중에 회원과 이을 수 있어요.