메신저
회원 연동
이미 로그인한 회원에게 인증 코드를 다시 받을 필요는 없어요. 서버에서 계산한 memberHash를 함께 부팅하면 엔트로피가 회원을 확인하고 바로 대화를 열어요.
동작 방식
- 회원이 로그인하면 서버에서
memberHash = hex(HMAC_SHA256(memberHashSecret, memberId))를 계산해요. - 페이지를 렌더링할 때
memberId와memberHash를 부팅 옵션에 넣어요. - 엔트로피는 같은 값을 계산해 상수 시간 비교로 확인해요. 맞으면 연락처를
externalMemberId에 묶고 인증된 것으로 처리해요. - 연락처에 이름이 없으면 이름만 한 번 물어봐요. 이름은 대화를 시작하는 데 꼭 필요해요.
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로 나중에 회원과 이을 수 있어요.