# 기록이 저장되는 앱 내 채팅용 Chat API

> 메시지 저장소를 직접 만들지 않고도 앱에 1:1 채팅과 그룹 채팅을 추가하세요. 대화 기록, 읽음 확인, 안 읽은 수, 오프라인 사용자 푸시, 모더레이션까지 갖췄으며 월간 활성 사용자 500명까지 무료, 그 이상은 월 49달러부터입니다.

Source: https://hibira.io/ko/chat

## 채팅 기능에 필요한 모든 것

### 저장된 기록, 항상 순서대로

모든 메시지는 누구에게 알리기 전에 대화의 다음 번호를 받습니다. 오프라인이었던 휴대폰은 마지막으로 가진 번호 이후만 가져오면 되므로 빠지거나 두 번 보이는 메시지가 없습니다.

### 읽음 확인과 안 읽은 수

멤버가 어디까지 읽었는지 표시하면 대화의 모두가 볼 수 있고, 각 사용자의 받은편지함에는 대화 목록과 안 읽은 메시지 수가 표시됩니다.

### 입력 중, 수정, 삭제, 반응

누가 입력 중인지 보여 주고, 메시지를 고치거나 취소하고 이모지로 반응할 수 있습니다. 변경 사항은 모든 멤버에게 실시간으로 전달되고 메시지와 함께 저장됩니다.

### 자리를 비운 사람에게는 푸시

새 메시지는 연결되어 있지 않은 멤버에게 Hibira Push로 전달됩니다. 웹, iOS, Android를 지원하며 보낸 사람 이름과 본문 첫 줄을 보여 줍니다.

### 파일과 이미지

첨부 파일은 하나당 최대 25MB입니다. 짧은 유효기간의 링크로 저장소에 바로 업로드하므로 큰 파일이 서버를 거치지 않습니다.

### 기본 제공 모더레이션

중국어와 일본어에도 동작하는 금칙어 필터, 기한이 되면 저절로 풀리는 차단과 음소거, 멤버의 신고를 팀이 한 목록에서 확인합니다.

### 한중일을 이해하는 검색

단어의 일부로도 대화의 메시지를 검색할 수 있고 대소문자와 전각·반각 차이를 무시하므로 한국어, 중국어, 일본어, 영어 모두에서 동작합니다.

### 역할과 내부 메모

멤버에게 상담원이나 운영자 같은 역할을 줄 수 있습니다. 메모를 특정 역할에만 보이게 하면 그 멤버에게만 전달되고 다른 사람에게는 안 읽은 메시지로 세지지 않습니다.

## 작동 방식

1. **서버가 대화**와 멤버를 만듭니다. 서명된 요청으로, 서명 방식은 Hibira HTTP API의 다른 부분과 같습니다.
2. **각 사용자가 로그인**합니다. 앱이 원래 여는 실시간 연결을 쓰며, 채팅 이벤트는 사용자 자신의 채널로 오므로 대화마다 채널을 인증할 필요가 없습니다.
3. **메시지는 실시간으로 전달되고 저장됩니다.** 서버가 사용자 대신 보낼 수도 있고, 페이지에 짧은 유효기간의 사용자 토큰을 줘서 Chat API를 직접 호출하게 할 수도 있습니다.

![Chat API로 만든 관리자 화면의 채팅 페이지: 대화 목록, 메시지, 온라인 상태.](https://hibira.io/portal/articles/filament-chat-ko-light.webp)

화면은 [@hibira-io/chat-ui](https://hibira.io/ko/guides/chat-ui)로 바로 만들 수 있습니다. 읽음 표시, 반응, 파일, 내부 메모를 지원하는 대화 화면을 제공합니다:

```js
import { createChatClient } from '@hibira-io/chat-ui/hibira';
import { Chat, useChatConversation } from '@hibira-io/chat-ui/react';

const client = createChatClient({ appId: 'your-app-id', tokenUrl: '/hibira/token' });
const conversation = useChatConversation(client, 'trip-1', { pusher, me: userId });
return <Chat conversation={conversation} me={userId} />;
```

API는 `/apps/{app_id}/chat`에 있습니다: 대화와 멤버, `after`로 따라잡는 메시지 조회, 읽음 표시, 안 읽은 수가 포함된 사용자 받은편지함, 검색, 첨부, 사용자 토큰, 모더레이션, 이번 달 사용량. 새 메시지마다 `chat_message` 웹훅을 호출할 수도 있습니다. 모든 요청, 이벤트, 한도는 [레퍼런스](https://hibira.io/ko/chat-api)에 있습니다.

## 요금제

| 요금제 | 가격 | 월간 활성 사용자 | 파일 저장 공간 | 이런 경우에 |
| --- | --- | --- | --- | --- |
| 무료 | 0달러 | 500 | 1 GB | 채팅 기능 개발과 출시 |
| Chat 1K | 월 49달러 | 1,000 | 5 GB | 성장 중인 커뮤니티나 마켓플레이스 |
| Chat 5K | 월 149달러 | 5,000 | 25 GB | 매일 채팅을 쓰는 앱 |
| Chat 20K | 월 349달러 | 20,000 | 100 GB | 대규모 커뮤니티와 상담 팀 |
| Chat 60K | 월 799달러 | 60,000 | 300 GB | 대규모 채팅 |

모든 계정에는 실시간 요금제와 관계없이 월간 활성 사용자 500명이 포함되며, Chat 애드온은 요금제와 별도로 청구됩니다. 연간 결제 시 2개월 무료입니다. 한 달 동안 메시지를 보내거나 대화를 읽음으로 표시한 사용자를 활성 사용자로 보며, 모든 앱을 합쳐 셉니다. 메시지를 받기만 하는 사람은 세지 않습니다. [전체 요금](https://hibira.io/ko/pricing#chat-api)을 확인하세요. 메시지 수에는 고정 한도가 없습니다. 요금제는 활성 사용자 1명당 월평균 약 500개 메시지를 기준으로 하며, 사용량이 이를 크게 넘으면 무엇이든 바꾸기 전에 먼저 연락드립니다. 파일 저장 공간이 가득 차면 오래된 대화를 삭제하거나 더 큰 요금제를 선택할 때까지 새 첨부 파일은 거부됩니다.

## 사용하는 스택에서

- **React와 순수 JavaScript**: pusher-js 위에서 동작하는 [@hibira-io/chat-ui](https://hibira.io/ko/guides/chat-ui)의 대화 화면과 클라이언트.
- **Laravel과 Filament**: [Filament 플러그인](https://hibira.io/ko/use-cases/filament)에 온라인 상태가 있는 채팅 페이지가 포함되어 있습니다.
- **어떤 백엔드든**: 요청 서명이 Hibira HTTP API의 다른 부분과 같으므로 Pusher 서버 라이브러리의 서명 코드를 그대로 쓸 수 있습니다.
- **iOS, Android, Flutter**: 이벤트는 실시간 SDK로, 앱이 닫혀 있을 때의 메시지는 Hibira Push로.

## 자주 묻는 질문

### 월간 활성 사용자는 무엇인가요?

한 달(UTC) 동안 메시지를 보내거나 대화를 읽음으로 표시한 사용자로, 모든 앱을 합쳐 한 번만 셉니다. 메시지를 받기만 하거나 앱을 열고 읽지 않은 사람은 세지 않습니다.

### 요금제의 사용자 수에 도달하면 어떻게 되나요?

이번 달 이미 집계된 사용자는 그대로 이용합니다. 요금제를 넘게 되는 새 사용자는 다음 달이 되거나 더 큰 애드온을 고를 때까지 보내기와 읽기에서 오류를 받습니다. 애드온 변경은 바로 적용됩니다.

### 메시지는 얼마나 보관되나요?

최근 30일은 항상 보관됩니다. 유료 요금제나 Chat 애드온이 있으면 더 오래된 메시지는 보관 처리되어 API에서 그대로 읽을 수 있고, 애드온 없는 무료 요금제에서는 30일 후 삭제됩니다.

### Hibira 실시간 요금제가 필요한가요?

아니요. 무료 요금제를 포함한 모든 계정에 월간 활성 사용자 500명이 제공됩니다. Chat API는 실시간 기능과 같은 계정, 앱, 연결을 씁니다.

### 직접 만든 채팅 화면을 쓸 수 있나요?

네. API는 일반 JSON을 돌려주고 일반 이벤트를 보내므로 어떤 화면이든 쓸 수 있습니다. 바로 쓸 화면이 필요하면 [@hibira-io/chat-ui](https://hibira.io/ko/guides/chat-ui)가 있습니다.

### 데이터는 어디에 저장되나요?

메시지는 아시아에 저장되고, 30일이 지난 보관본은 홍콩에 저장됩니다. 대화를 삭제하면 그 메시지와 보관본도 함께 삭제됩니다.
