작동 원리

하나의 에이전트, 모든 채널

웹 위젯, Telegram, WhatsApp이 동일한 메모리로 동일한 에이전트에 도달하는 방식 — 신원 해석, 공유 제어 흐름, 그리고 무엇이 채널별로 남는지.

고객이 당신의 웹사이트에서 무언가를 묻고, 2주 뒤 WhatsApp에서 후속 질문을 합니다. 그것이 하나의 관계인지 두 명의 낯선 사람인지는 채팅 UI가 아니라 신원이 어떻게 해석되는지에 달려 있습니다.

그 모양

채널은 진입점이지 사일로가 아닙니다. 각 채널은 그 아래의 같은 세 가지로 해석됩니다:

에이전트는 채널마다 복제되지 않습니다. 검색, 메모리, 후속 조치는 모두 스페이스에 달려 있으므로, 다른 앱을 통해 도착하는 것은 전송 수단만 바꿀 뿐 그 외에는 아무것도 바꾸지 않습니다.

신원 해석

각 채널은 외부 식별자를 제공합니다 — 위젯 토큰의 엔드유저 id, Telegram 사용자 id, WhatsApp 번호. 해석은 **(tenant, external_user_id)**로 이뤄집니다: 조회, 그리고 처음 볼 때 생성.

알아둘 만한 두 가지 세부 사항:

  • 첫 접촉은 경합적이며, 처리됩니다. 두 메시지가 동시에 도착하면 둘 다 사용자를 찾지 못하고 둘 다 하나를 만들려 합니다. 유니크 제약이 결정하고, 진 쪽은 실패하는 대신 다시 읽습니다 — 그래서 동시에 밀려드는 첫 메시지들이 오류가 아니라 하나의 사용자를 만듭니다.
  • 스페이스는 해석되거나 생성됩니다. 모든 사용자는 기본 스페이스를 가지며, 명시적으로 요청된 스페이스는 그 사용자의 것이어야 하고, 그렇지 않으면 요청이 거부됩니다. 그 검사가 조작된 요청이 다른 사람의 대화를 읽는 것을 막습니다.

한 사람을 채널 간에 연결하는 것은 추측이 아니라 테넌트의 결정입니다. 플랫폼은 웹사이트 방문자와 WhatsApp 번호가 비슷해 보인다는 이유로 병합하지 않습니다 — 그런 추론이 시스템이 한 고객의 이력을 다른 고객에게 유출하는 방식입니다. 같은 사람을 식별할 수 있는 곳(로그인한 사용자, 엔드유저 id가 있는 링크)에서는 같은 식별자를 전달하면 이력이 그들을 따르고, 할 수 없는 곳에서는 그들은 분리된 채로 남습니다.

어댑터가 공유하는 것과 하지 않는 것

Telegram과 WhatsApp은 달라 보이지만 같은 일을 합니다. 어댑터 레이어는 갈라져서는 안 되는 모든 것을 담습니다:

어댑터에서 공유됨각 채널에 맡겨짐
신원 해석과 스페이스 조회메시지 렌더링과 전송 호출
현재 세션 읽기/쓰기Telegram 인라인 키보드와 양식 프롬프트
명령 — new, list, switch, history, rename, delete, location, helpWhatsApp 목록과 인터랙티브 답장
이력 재생과 서식플랫폼별 첨부 처리
느린 응답 힌트
턴 실행

규칙은 대화 의미론이 한 곳에 산다는 것입니다. 세션 전환이 WhatsApp에서 Telegram과 조금 다르게 동작한다면, 그 차이는 고객이 부딪힐 때까지 보이지 않을 것입니다.

실질적 결과: 이들은 개인 채팅 통합입니다. Telegram 개인 채팅에서 채팅 id와 발신자 id는 같으므로, 전송 대상과 신원 키가 하나의 값으로 붕괴됩니다 — 그래서 어댑터가 "이게 누구인가"와 "어디로 답하나"를 하나의 개념으로 다룰 수 있습니다.

오래 걸리는 답변

일부 답변은 한 턴 안에서 생성될 수 없습니다. 에이전트는 그 작업을 예약하고 답이 나중에 도착하게 할 수 있으며, 요청이 온 채널로 밀어 보냅니다 — 웹 위젯의 버블, Telegram이나 WhatsApp의 메시지. 예약된 후속 조치를 참조하세요.

실제로 의미하는 것

  • 한 고객, 하나의 이력 — 어디서 메시지를 보내든.
  • 채널을 추가해도 대화 로직이 갈라지지 않습니다.
  • 검색과 메모리가 어디서든 동일하게 동작합니다 — 채널이 아니라 스페이스에 붙어 있기 때문입니다.

채널 설정은 Telegram 및 WhatsApp위젯 임베드에서 다룹니다.