본문으로 건너뛰기

수신함

사용자와의 대화가 머무는 곳: 한 탭에는 스레드, 다른 탭에는 캠페인. 모든 스레드는 누가 말했는지, 최종 사용자인지 상담원인지 모델인지 밝히며, 셋은 혼동되지 않습니다.

The inbox in the Live environment
The inbox, Live environment.
The inbox in the Live environment, dark theme
The inbox, Live environment.

Conversations

A conversation opened to its turns
A conversation open: every turn attributed.
A conversation opened to its turns, dark theme
A conversation open: every turn attributed.

A thread is a person's messages from the Messenger, answered from here. Every turn carries who wrote it: the end user, a named agent, or the model, and the attribution is a database rule rather than a convention, so an assistant turn can never wear a person's name. Threads are open, snoozed or resolved; replying reopens what needs reopening, snooze parks a thread until a date, assignment names whose it is, and new turns stream in live while the thread is on screen.

메시지가 쓰인 자리

그 사람이 보낸 메시지는 그것을 쓴 페이지를 함께 실어 옵니다. 본문 아래, 메시지의 시각과 같은 흐린 형태의 한 줄이 호스트와 경로 이름을 보여 주고, 페이지 제목은 그 줄의 툴팁에 들어가며, 줄을 누르면 그 페이지가 새 탭에서 열립니다. 이것을 가진 것은 들어온 메시지뿐입니다. 상담원과 모델은 둘 다 콘솔에서 답하므로, 어느 쪽에 페이지를 달아도 방문자가 아니라 콘솔을 가리키게 됩니다. 메신저가 페이지를 싣기 전에 보낸 메시지나, 아무것도 보내지 않는 화면에서 온 메시지에는 그저 줄이 없습니다. 보관되는 것은 경로 이름뿐이며 쿼리나 프래그먼트는 결코 아니므로, 재설정이나 결제 링크의 토큰이 받은편지함에 닿는 일은 없습니다.

Campaigns

The campaigns tab
The campaigns tab: every send with its status.
The campaigns tab, dark theme
The campaigns tab: every send with its status.

A campaign is one message to many people: in-app, email or webhook, targeted at everyone, a cohort or named people. A sent campaign reports its deliveries by outcome, delivered, read, failed and pending, so a send that half-landed reads as exactly that rather than as done.

Proposals

The model's suggestions review where they point rather than on a tab of their own: a reply drafted for a thread waits in that conversation, a suggestion raised by an anomaly sits under that anomaly on Home, and one about a cohort sits on the cohort itself. Each proposal states its action in a sentence with its fields editable in place, plus its rationale; a person approves, adjusts or rejects it, and the decision is recorded with who made it. Nothing a proposal suggests happens without that approval.

Where this meets the API

The concept is the Messaging pillar. On the wire: threads are conversations and conversationThread, answered through replyToConversation, setConversationStatus and assignConversation, with live turns on the conversationTurns subscription; campaigns are messages and composeMessage; proposals are aiProposals with approveProposal, editProposal and rejectProposal (GraphQL reference). The user side of every thread is the Messenger, configured on its settings screen.