# @callimacus/thamyr-react-native 中文文档

规范地址：https://npmcn.com/package/%40callimacus/thamyr-react-native/

版本：4\.23\.5
npm 元数据更新时间：2026-11-08T20:36:18.040Z
中文译文更新时间：2026-11-09T00:09:51.617Z
软件包许可：SEE LICENSE IN LICENSE\.md

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40callimacus/thamyr-react-native
原文对照：https://npmcn.com/package/%40callimacus/thamyr-react-native/?lang=original
项目主页：https://docs.callimacus.ai/thamyr-sdk/react-native/1-overview

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：172 kB，12 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- 运行依赖：1 个
- peer 依赖：react \>=18，react-native \>=0\.72，@tanstack/react-query ^5
- 首次发布：2026-09-29T08:50:34.784Z
- 最新版本发布：2026-11-08T20:36:17.786Z
- 近 30 天下载量：5569（2026-10-09 至 2026-11-07，npm 官方下载统计）
- 已发布版本数：39（近 12 个月 39 个）

## 中文简介

Thamyr 本地软件包

## 安装

```sh
npm install @callimacus/thamyr-react-native
```

也可以使用：`pnpm add @callimacus/thamyr-react-native`、`yarn add @callimacus/thamyr-react-native`、`bun add @callimacus/thamyr-react-native`

## README

# @callimacus/thamyr-反应-内在

反应原生(出品和裸出品)的Thamyr SDK. 包起来 `@callimacus/thamyr-react`,所以钩,存储,和反应类型是一样的 网络SDK所暴露的——这个软件包将它们缩小到在本地和本地 增加了本地语音录音机.

```bash
npm install @callimacus/thamyr-react-native
```

同伴依赖性 : `react >=18`, (中文(简体) ), `react-native >=0.72`。 。 。 .

## 开始

```tsx
import {useInitThamyr, useThamyr, useConnection} from '@callimacus/thamyr-react-native';

function App() {
  useInitThamyr({clientId: 'cal-pk-…'});
  return <Chat />;
}

function Chat() {
  const {history, sendEvent} = useThamyr();
  const {status} = useConnection();
  // …
}
```

## 和网络SDK有什么不同

这里没有列出的一切 行为都一样,因为它是完全相同的 代码.

### 语音记录返回字节

网络录音员给你一个 `Blob`这个给你 `Uint8Array`音频 以 `inputEvent.data.file` 超过 socket.io, 只有输入的数组存活 原生之行:反应原生 `Blob` 是进入本地的把手 BlobModule的字节在JS从不存在,所以插座。 iO不能读它,和 `new File([...])` ——网络路径使用的东西——没有有用的本土等同物. 服务器将文件名降下, MIME 则以两种方式( socket. io 二进制 陷害他们,所以没有损失.

录音机需要一个适配器,您从 `expo-audio`数字 :

```tsx
import {useMemo} from 'react';
import * as ExpoAudio from 'expo-audio';
import {
  createExpoAudioAdapter,
  useVoiceRecorder,
  useThamyr,
  SLInputEventType,
  UserInteractionType,
} from '@callimacus/thamyr-react-native';

function VoiceButton() {
  const {sendEvent} = useThamyr();
  const adapter = useMemo(() => createExpoAudioAdapter(ExpoAudio), []);

  const {state, audioLevels, startRecording, stopRecording, error} = useVoiceRecorder({
    adapter,
    onRecordingComplete(audio) {
      sendEvent(UserInteractionType.CREATE_ROUND, {
        inputEvent: {type: SLInputEventType.question, data: {value: '', file: audio}},
      });
    },
  });
  // …
}
```

适配器是故意通过而不是默认的. 如果这个软件包 进口 `expo-audio` metro会静态地解决 消费者,所以一个从不记录音频的应用程序 将无法捆绑仅仅因为没有 安装了它。 将模块移交保存 `expo-audio` 从这里 软件包的依赖性图表,所以它输入检查和测试时没有本地的 工具链。 对于录音机之外 `expo-audio`,执行 `VoiceRecorderAdapter` 自己来.. `start`编号 :`stop`编号 :`cancel` 在任何原生模块之上.

后记录自动停止 `silenceDuration` (默认值1800毫秒) `silenceThreshold` (默认 - 45 dBFS),和硬站 `maxDuration` (默认) 联合国.

### 未再出口的钩子

| 不详 | 为什么 | 相反 |
| --- | --- | --- |
| `useTtsAudio` | 构造一个 `HTMLAudioElement` (单位:千美元)`new Audio(url)`(中文(简体) ) | 播放来自 `extractTtsAudio(block.data)` 带有 `expo-audio` 播放器 |
| `uiObserver` 配置 | 快照意味着 `querySelectorAll` + 键 `getBoundingClientRect` | 尚未提供当地资料(SOL-1084) |
| `setConsent`, (中文(简体) ), `setGeo`, (中文(简体) ), `initIntent`,, , , , , , , , | `@callimacus/intent`浏览器 API | `@callimacus/intent/native` - 见下文 |

`extractTtsAudio` 编辑 `TtsAudio` 类型 _为:_ 导出后,您可以获取 音频 URL 出自回复, 随你喜欢播放; 只有网络播放 钩子不见了.

### 有意追踪

意向网页的构建完全不能在本地导入: 它读取 `localStorage` 财务报告和审定财务报表 `document` 在模块范围中, 它在赫尔墨斯之前投出 您的应用程序使。 因此,SDK在“原生反应”中解决 `@callimacus/thamyr-core`是因为 `react-native` (a) 在没有意图的情况下 函数作为警告- 即时出现, 所以共享代码不会崩溃, 但它们 什么都别做.

意取自自有出土入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入出入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入 直接拨接:

```ts
import * as RN from 'react-native';
import {MMKV} from 'react-native-mmkv';
import {createNativeAdapters, initIntentNative, mmkvStorage} from '@callimacus/intent/native';

initIntentNative({
  clientId: 'cal-pk-…',
  consent: true,
  adapters: createNativeAdapters(RN, {storage: mmkvStorage(new MMKV())}),
});
```

## 运输, 和为什么声音还没有发挥作用

文本聊天有用 . **发送音频不**,原因也不是这个软件包 也不是你的应用 —— 是TLS 不匹配将连接强制到传输上 无法在 React Industrial 上携带二进制。 细节很重要 因为症状 这是误导.

**本地反应无法打开 WebSocket 到 `api.callimacus.ai`。 。 。 .** 主持人是 TLS 1. 3 - 仅 - 它拒绝用 TLS 1.2 握手 `protocol_version` 警报( 已核实) `openssl s_client -no_tls1_3`) (中文(简体) ). 反应 本地的WebSocket以近代号1006和 `OSStatus -9836`,这是苹果 `errSSLPeerProtocolVersion` ("不良协议") (原始内容存档于2018-09-29). version". 反应土著 _HTTP 密码_ 堆栈与同一主机是好的,因为 穿过 `NSURLSession`,它的确谈判 TLS 1.3 ——符合 使用旧的安全运输路线的 WebSocket 路径没有.

SDK因此倒回了HTTP长波,而文本在它之上起作用.

**但二进制无法在回放原生投票中通过.** 引擎.io的民调 有效载荷是文本,所以 `encodePayload` 编码每个数据包 `supportsBinary: false` (“二进制包的强制基数64编码”),和 engine.io-parser 浏览器构建路径 `encodeBlobAsBase64(new Blob([data]))` – 虽然React Industrial拒绝构建 a 来自 a `ArrayBuffer` 完全 (“ 创建来自“ ArrayBuffer” 和 'ArrayBufferView' 不支持'). 因此,音频字节被丢入 控制台出错 . `forceBase64` 无法帮助:投票已经逼迫 正是建立Blob的分支.

**通过启用 TLS 1.2 使 React Industrial 使用 WebSocket 迁移 在 API 主机上** (nginx: 保留) `TLSv1.3` 添加 `TLSv1.2` 带有匹配的密码 套间). 在韦伯索克特, `encodePacket` 运行与 `supportsBinary: true` 手和双手 输入的数组直接到 `WebSocket.send()` 没有Blob,没有基础64,所以有声 工作时没有进一步的 SDK 更改,文本作为奖金会得到更低的延迟.

在此之前,录音工作 `onRecordingComplete` 给您正确的字节; 只有发送失败 .

## 值得我们知道的事

-   **UUIDs (英语).** 赫尔墨斯船没有全球 `crypto`核心回归到 `crypto.getRandomValues` 接下来 `Math.random()`,所以没有扔,但 安装 [`react-native-get-random-values`](https://github.com/LinusU/react-native-get-random-values) 在条目文件的顶端,您可以得到加密的随机交互标识.
-   **`gatherClientInfo()`** 返回空字符串 `userAgent`, (中文(简体) ), `language`,以及 `screenResolution` 当地人——没有 `navigator.userAgent` 或者说 `window.screen`屏幕大小 `Dimensions` 如果你需要的话.
-   **微机权限.** 添加 `NSMicrophoneUsageDescription` (iOS)和 `RECORD_AUDIO` (Android) (英语). 在博览会下, `expo-audio`配置插件这样做 .
-   **套接字认证** 穿过socket.io's `auth` 有效载荷,不是 `Authorization` 页眉 — React Industrial's WebSocket transport 忽略 `extraHeaders`,服务器读取 `handshake.auth.token`无需采取行动; 人们注意到,因为被丢掉的头像木头一样令人吃惊.

## 常见问题

### @callimacus/thamyr-react-native 是什么？

Thamyr 本地软件包

### 如何安装 @callimacus/thamyr-react-native？

在项目目录运行 npm install @callimacus/thamyr-react-native，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：react（\>=18）、react-native（\>=0\.72）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。

### @callimacus/thamyr-react-native 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @callimacus/thamyr-react-native 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @callimacus/thamyr-react-native 可以商用吗？

@callimacus/thamyr-react-native 使用 SEE LICENSE IN LICENSE\.md 许可。许可条款写在包内的独立文件中，请阅读该文件确认可否商用。以上为概括，不构成法律意见，请以许可原文为准。

### @callimacus/thamyr-react-native 的下载量有多少？

根据 npm 官方下载统计，@callimacus/thamyr-react-native 在 2026/10/09 – 2026/11/07 这 30 天内被下载 5,569 次，日均约 186 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @callimacus/thamyr-react-native 还在维护吗？

最新版本 4\.23\.5 发布于 2026/11/09（今天）；至今共发布 39 个版本，其中过去 12 个月发布了 39 个；首次发布于 2026/09/29。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

