# App 内聊天的 Chat API，消息自动保存

> 不用自己做消息存储，就能在 App 里加上一对一和群聊。历史消息、已读回执、未读数、离线推送和内容审核一应俱全，每月 500 位活跃用户免费，之后每月 49 美元起。

Source: https://hibira.io/zh-cn/chat

## 聊天功能需要的都在这里

### 消息保存，始终有序

每条消息在通知任何人之前，都会先拿到会话里的下一个序号。离线的手机回来时，只需拉取它最后一个序号之后的消息，不会漏，也不会重复。

### 已读回执和未读数

成员标记读到哪里，会话里的每个人都能看到；每个用户的收件箱会列出他的会话和未读数。

### 正在输入、编辑、撤回和表情回应

显示谁正在输入，让用户修改或撤回消息，也能用表情回应。变更会实时送到每位成员，并随消息保存。

### 离开时也能收到推送

新消息会通过 Hibira Push 推送给没有连接的成员，支持网页、iOS 和 Android，内容是发送者名称和消息的第一行。

### 文件和图片

每个附件最大 25 MB，通过短时效链接直接上传到存储，大文件不会经过你的服务器。

### 内置内容审核

对中文和日文也有效的关键词过滤、会自动到期的封禁和禁言，以及成员举报，全部汇总到同一个列表给你的团队处理。

### 懂中日韩文的搜索

可以用词的任意一部分搜索会话里的消息，不区分大小写和全角半角，中文、日文、韩文和英文都适用。

### 角色和内部备注

可以给成员设置角色，比如客服或管理员。备注可以只给某个角色看：只有这些成员收得到，对其他人也不会算作未读。

## 工作方式

1. **你的服务器创建会话**和成员，使用签名请求，签名方式和 Hibira HTTP API 其他部分相同。
2. **每个用户登录** App 本来就会打开的实时连接。聊天事件发到用户自己的频道，不需要为每个会话授权频道。
3. **消息实时发出并保存。** 你的服务器可以代用户发送，也可以给页面发短时效的用户 Token，让页面直接调用 Chat API。

![用 Chat API 做的后台聊天页：会话列表、消息和在线状态。](https://hibira.io/portal/articles/filament-chat-zh-CN-light.webp)

前端可以用 [@hibira-io/chat-ui](https://hibira.io/zh-cn/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` 补齐的消息、已读标记、带未读数的用户收件箱、搜索、附件、用户 Token、内容审核和本月用量。每条新消息也可以触发你的 `chat_message` Webhook。所有请求、事件和限制见[参考文档](https://hibira.io/zh-cn/chat-api)。

## 套餐

| 套餐 | 价格 | 每月活跃用户 | 文件空间 | 适合 |
| --- | --- | --- | --- | --- |
| 免费 | 0 美元 | 500 | 1 GB | 开发并上线聊天功能 |
| Chat 1K | 每月 49 美元 | 1,000 | 5 GB | 成长中的社区或交易平台 |
| Chat 5K | 每月 149 美元 | 5,000 | 25 GB | 每天都在聊天的 App |
| Chat 20K | 每月 349 美元 | 20,000 | 100 GB | 大型社区和客服团队 |
| Chat 60K | 每月 799 美元 | 60,000 | 300 GB | 大规模聊天 |

每个账号不论实时套餐都含每月 500 位活跃用户，Chat 附加包与套餐分开计费。按年付费可免 2 个月。用户在一个月内发送消息或标记已读就算活跃，跨你所有 App 合计；只接收消息的人不计入。查看[全部价格](https://hibira.io/zh-cn/pricing#chat-api)。消息数量没有硬性上限：套餐按平均每位活跃用户每月约 500 条消息规划，若用量远高于此，我们会先与你联系再做任何调整。文件空间用满后，新附件会被拒绝，直到删除旧会话或改选更大的套餐。

## 适配你的技术栈

- **React 和原生 JavaScript**：[@hibira-io/chat-ui](https://hibira.io/zh-cn/guides/chat-ui) 的会话界面和客户端，基于 pusher-js。
- **Laravel 和 Filament**：[Filament 插件](https://hibira.io/zh-cn/use-cases/filament)提供现成的聊天页和在线状态。
- **任何后端**：请求的签名方式和 Hibira HTTP API 其他部分相同，任何 Pusher 服务端库的签名代码都能用。
- **iOS、Android 和 Flutter**：用实时 SDK 接收事件，App 关闭时的消息由 Hibira Push 送达。

## 常见问题

### 什么算每月活跃用户？

在一个自然月（UTC）内发送消息或标记会话已读的用户，跨你所有 App 只算一次。只接收消息、或打开 App 但没有读的人不计入。

### 用到套餐的用户上限会怎样？

本月已计入的用户照常使用。会超出套餐的新用户，在发送和读取时会收到错误，直到下个月，或你改选更大的附加包，改选后立即生效。

### 消息保存多久？

最近 30 天一定保留。有付费套餐或 Chat 附加包时，更早的消息会归档，API 照样能读到；免费套餐且没有附加包时，30 天后删除。

### 一定要有 Hibira 实时套餐吗？

不用。每个账号都有每月 500 位活跃用户，免费套餐也一样。Chat API 和你的实时功能共用同一个账号、App 和连接。

### 可以用自己的聊天界面吗？

可以。API 返回普通的 JSON、发送普通的事件，任何界面都能用。想要现成的，可以用 [@hibira-io/chat-ui](https://hibira.io/zh-cn/guides/chat-ui)。

### 数据存在哪里？

消息存放在亚洲，超过 30 天的归档存放在香港。删除会话会一并删除它的消息和归档。
