채팅 자동응답 봇과 메신저봇 같은 봇 구동 앱들은 카카오톡의 알림을 기반으로 작동하기 때문에, 카카오톡의 알림에 변화가 생기면 정상적으로 작동하지 않곤 해요.
여기선 편의상 채팅이 수신된 방의 이름과 수신된 채팅 내용, 그 채팅을 보낸 사람을 각각 room, msg, sender로 표기할거에요.
채팅이 수신된 채팅방이 1:1 채팅방인지 아니면 단체 채팅방인지는 isGroupChat으로 표기할거구요.
봇 구동 앱 최초 공개 시점
카톡봇 최초버전이 공개된 시점 이야기에요. 원작자가 깃허브 탈퇴해서 포크 상태가 죰 요상해요.
1:1 채팅방인지 아니면 단체 채팅방인지에 따라 알림 구조 자체가 달랐던 시절이에요.
1:1 채팅방
알림에 room과 msg만 각각 따로따로 담겨있었어요.
어차피 1:1 채팅방이니, sender에다가는 room을 넣는 방식으로 처리하면 끝
단체 채팅방
room은 1:1 채팅방과 동일하게 넘어왔는데, msg과 sender이 한 곳에 함께 담겨서 왔어요.
따라서, msg와 sender를 분리시기는 과정에서 msg의 뒤에 실제로는 보낸 적이 없는 공백이 붙어서 나오는 경우가 종종 있었지요.
그래서 이 시절에 작성된 봇 소스들을 아래와 같은 부분들이 많이 보일거에요.
msg=msg.trim();
초록봇(현 채팅 자동응답 봇)이 출시되기 직전 시점
안드로이드 6.0 이상에서는 room, msg, sender가 각각 따로따로 담겨서 오기 시작했지만, 안드로이드 6.0 미만에서는 기존처럼 오던 시절이어요.
당시 주로 사용되던 젤브봇이나 수용봇 등은 전부 안드로이드 버전에 따라 다르게 알림을 파싱하도록 하는 대응 패치가 적용되었지만, 모든 키워드에 대한 응답입니다로 유명한 모 자동응답 앱의 경우, 개발자가 안드로이드 파편화 문제라 해결할 수 없다는 잘못된 정보를 퍼트리고 있었구요.
카카오톡 7.2.x
카카오톡 최신버전에서 또 알림 구조가 바뀌었다는 것을 2018년 7월에 확인하였으니, 아마 당시에 최신버전이였던 카카오톡 버전 7.2.x일거에요.
롤리팝(안드로이드 5)에서는 알림 구조가 또 달라져서, 기존 방식으로는 room을 가지고 오지 못하여 모든 채팅방이 1:1 채팅방으로 처리되었어요.
즉, 안드로이드 버전에 따라 나누고, 카톡 버전에 따라 또 나눠야 하는 아주 불-편한 상태가 되었어요.
킷켓(안드로이드 4.4) 이하에서는 애초부터 봇 구동 자체가 불가능하니 해당사항 없음
이후에 카카오톡 7.3.0 미만 버전이 지원 중단되면서 아무튼 해결.
언제인지는 모르겠지만 이 사이 구간
카카오톡 알림에는 Nofitication.Action의 인스턴스가 들어있어요.
대충 알림에서 할 수 있는 동작이 담겨있디고 보면 될거에요. 그 동작은 채팅이 수신된 채팅방으로 응답을 보내는 행위구요.
원래는 그 Action이 하나만 담겨있던걸로 추정되는데, 언제부턴가 Action이 2개 더 담겨서 총 3개가 되었어요.
원래부터 있던 Action으로는 채팅방에 응답을 보내는 것과, 채팅을 보내지 않고 읽음으로 처리하는 것이 가능하고,
새로 추가된 Action 1으로는 채팅방에 채팅을 보내지 않고 읽음으로 처리하는 것만 가능하며,
새로 추가된 Action 2로는 채팅방에 응답을 보내는 것만 가능해요.
카카오톡 9.7.0
알림 구조가 변경되었어요.
신기한 점은, 만능톡은 대응 패치가 없었음에도 알림을 잘 파싱하고 있어요.
안드로이드 11 이상
room이 담겨있던 곳이 다른 곳으로 바뀌었어요.
모든 채팅방이 1:1 채팅방으로 처리되면서 isGroupChat은 항상 false고, room에는 방 이름 대신 sender가 담겨있는 상황이 벌어졌어요.
알림의 아이콘도 기존에는 채팅을 보낸 사람의 프로필 사진이 들어가 있었지만, 방 아이콘이 대신 들어가기 시작했어요.
따라서, ImageDB.getProfileImage();와 같이, ImageDB를 통해 채팅을 보낸 사람의 프로필 사진과 관련된 정보를 가지고 오려고 하면 프로실 사진이 아니라 방 아이콘을 기준으로 처리되기 시작했구요.
안드로이드 11 미만
room이 기존에 담겨있던 곳에도 담겨서 오고, 새로 바뀐 곳에도 담겨서 오기 때문에, 딱히 변한건 없어요.
알림 아이콘도 그대로라 ImageDB와 관련된 것도 그대로구요.
애초에 카카오톡 업데이트 내역부터가 알림센터 내 미리보기 개선 (Android OS 11 이상)였어요.
해결 방법
채팅 자동응답 봇의 경우, 대응 패치가 적용된 버전 5.0 베타가 공개되었어요.
메신저봇의 경우, 아직 대응 패치가 적용된 버전이 공개되지는 않았으나, 앱 사용자가 직접 알림을 파싱하는게 가능하기 때문에, 사용자가 직접 알림을 파싱해서 해결할 수 있어요. 이 부분을 클릭해보세요.
카카오톡 9.7.5
아까 위애서 언급한 원래부터 있던 Action이 사라졌어요.
따라서, 카톡이 와도 카톡 알림을 파싱해서 채팅이 온 것을 인식하는 동작 자체가 작동하지 않기 시작했어요.
지금까지는 채팅 수신 인식 관련된 부분이 바뀐거였는데, 이번에는 응답 전송 부분이 바뀐거에요.
물론, 봇 구동 앱 개발자가 새로 추가된 Action 두 가지를 사용해서 어케어케 하면 해결할 수 있어요.
해결 방법
채팅 자동응답 봇의 경우, 대응 패치가 적용된 버전 5.0 베타 2가 공개되었어요.
메신저봇은 이 변동사항에 영향을 받지 않아요.
하지만, 카카오톡 9.7.0에서의 변동 사항을 고쳐주는 소스는 채팅 자동응답 봇의 소스를 기반으로 작성되었기 때문에 영향을 받으니, 이 부분을 클릭해보세요.