본문 바로가기

채널톡 스크립트 boot 401 오류

by 식 2023. 1. 5.

글로벌 기업답게 영어로만 개발 문서로 해놓으신 채널톡

 

회원정보를 연동해서 붙이려는데 401에러로 문구가 계속 떴다

 

errors: [{message: "인증 정보가 올바르지 않습니다. 재로그인 해주세요🙏"}],
language: "ko",
status: 401,
type: "unauthenticatedError"

 

묘하게 열받는다 🙏🙏🙏

 

상담원분에게 개발 관련해서 물어봐도 동문서답을 계속 하셔서 그냥 문서를 첨부터 정독하고 값을 넣고 빼다 삽질해서 성공

 

 

1. 암호화를 안하는 경우

고객 정보 암호화를 킨 상태에서 memberId에 값을 넣어서 오류가 생길 수 있으니 고객 정보 암호화 옵션을 끄면 된다

 

공식 문서에는 이메일 주소나 회원명처럼 예측 가능한 회원 아이디를 사용는걸 추천하지 않는다(Do not recommend to use a predictable value for memberId)라고 되어 있음

 

관리자 패널에서 보면 이렇게 호출한 사용자는 회원이 아니라고 나오고 같은 아이디로 호출해도 또다시 상담창이 뜨고 클라이언트에서 변조할 수 있으니어차피 회원 연동을 할거면 암호화를 쓰는 방향으로 가는게 좋다

 

 

2. 암호화를 하는 경우

고객 정보 암호화를 키고 시크릿 키와 회원 고유값을 해시(아이디 혹은 이메일)

참고로 회원 번호로 하니 자바스크립트에서는 에러났는데 다른데서는 해시가 잘 되었다

 

const crypto = require('crypto');

const memberId = 'lucas';
const secretKey = '4629de5def93d6a2abea6afa9bd5476d9c6cbc04223f9a2f7e517b535dde3e25';
const expectedHash = "99427c7bba36a6902c5fd6383f2fb0214d19b81023296b4bd6b9e024836afea2";

const hash = crypto.createHmac('sha256', Buffer.from(secretKey, 'hex'))
                .update(memberId)
                .digest('hex');

로그인시 서버에서 생성하여 클라이언트에 반환

 

해시한 값은 관리자 패널의 고객 정보 암호화 칸에서 '해시 검증 테스트하기'기능으로 값이 맞게 해시 되었는지 크로스 체크 가능하다

 

 

var settings = {
    "pluginKey": "YOUR_PLUGIN_KEY",
    "memberId": "YOUR_USER_ID",
    "customLauncherSelector": ".custom-button-1, #custom-button-2",
    "hideChannelButtonOnBoot": true,
    "trackDefaultEvent": false,
    "trackUtmSource": false,
    "openChatDirectlyAsPossible": true,
    "mobileMessengerMode": "newTab",
    "zIndex": 1,
    "language": "en",
    "profile": {
      "name": "YOUR_USER_NAME",
      "mobileNumber": "YOUR_USER_MOBILE_NUMBER",
      "email": "your@email.com",
      "avatarUrl": "http://IMAGE_URL",
      "CUSTOM_VALUE_1": "VALUE_1",
      "CUSTOM_VALUE_2": "VALUE_2"
    },
    "unsubscribed": false,
    "memberHash": <generated_hash>,
    "hidePopup": false,
    "appearance": "dark",
};

ChannelIO('boot', settings);

클라이언트에서 스크립트 호출

 

결론은 회원 정보를 연동하려면 memberIdmemberHash에 둘다 값을 넣어줘야 했다

 

memberId에는 해시되지 않은 회원 고유값, memberHash는 memberId를 해시한 고유값

 

이걸 둘다 optional로 해버리면 둘다 넣으라고 설명을 해줘야 할거 아니야..

 

중요하다는 memberHash 설명도 SDK 페이지 하단에 넣어놓고  installation 화면에 한줄만 더 넣어주거나 문서라도 좀 친절하게 적어줬으면 삽질할 일도 없었는데..

 

갖다 쓰는 입장에서 투덜대도 소용은 없겠지.. 이래서 솔루션 사업을 해야된다..

 

 

출처: https://developers.channel.io/docs/web-boot-option

 

반응형