@forwardpath/js (英语)
FrontPath 摄取 API 的无框架客户端. 它流出摄入量
代理通过 AI SDK 软件,上传文件和收集
页面上下文. @forwardpath/react 财务报告和审定财务报表 @forwardpath/node 以它为基础.
安装
npm install @forwardpath/js ai
ai (v7)是同龄人依赖关系.
密钥
可公布的密钥( E)fppk_…)按设计公开. 在浏览器代码中是安全的
并且只有从源头 允许在钥匙上工作。 每个项目创建一个
在前卫门户.
您的密钥 API (fp_…)可以为任何用户提供薄荷会话. 留着吧
服务器。 这个包裹从不发送.
使用量
import { useChat } from "@ai-sdk/react";
import {
collectClientContext,
createBrowserSession,
createIntakeChatTransport,
getAnonymousId,
shouldSendAfterContact,
uploadAttachment,
type UploadedAttachment,
} from "@forwardpath/js";
const baseUrl = "https://app.forwardpath.ai";
const attachments: UploadedAttachment[] = [];
let session: { token: string; expiresAt: string } | null = null;
// Mints a session in the browser; mints again a minute before it expires.
async function getSessionToken() {
if (!session || Date.parse(session.expiresAt) - Date.now() < 60_000) {
session = await createBrowserSession({
baseUrl,
publishableKey: "fppk_…",
// For a signed-in user, send user: { id, email, name } instead.
anonymousId: getAnonymousId(),
clientContext: collectClientContext({ appName: "Acme" }),
});
}
return session.token;
}
const transport = createIntakeChatTransport({
baseUrl,
getSessionToken,
getClientContext: () =>
collectClientContext({ appName: "Acme", appVersion: "2.4.0" }),
getUploadedAttachments: () => attachments,
});
// In a React component:
const { messages, sendMessage, addToolOutput } = useChat({
transport,
sendAutomaticallyWhen: shouldSendAfterContact,
});
// Attach a file before the next message:
attachments.push(
await uploadAttachment({
baseUrl,
sessionToken: await getSessionToken(),
file,
}),
);
getSessionToken 在每次聊天请求之前运行,以便返回缓存
当旧的纸币过期时, 代币和薄荷新纸币.
createBrowserSession(options)
电话 POST /api/v1/intake/browser-sessions 并决心
{ token, expiresAt, projectSlug, contactCollection, reporter }。 。 。 .
| 选项 | 说明 |
|---|---|
baseUrl | FPOS来源. |
publishableKey | fppk_… 键. |
user | { id, email?, name? } 用于注册用户。 发送此或 anonymousId。 。 。 . |
userHash | createUserHash() 从 @forwardpath/node,计算在您的服务器上。 需求 user。 。 。 . |
anonymousId | 一个没有用户的访客的稳定身份证明,例如:. getAnonymousId()。 。 。 . |
clientContext | 页面上下文,例如来自 collectClientContext()。 。 。 . |
fetch | 自定义 fetch。 。 。 . |
reporter.identity 实值 verified 带有有效的 userHash, (中文(简体) ), claimed 与
user 单独(浏览器给用户取名,所以视其为未经核实)和
anonymous 与 anonymousId坏键或 userHash 拒绝与401,
一个来源,密钥不允许用 403 .
getAnonymousId() 返回保留在其中的随机编号 localStorage 下级
forwardpath:anonymous-id。当存储被屏蔽时,会持续页面
装入。 在服务器上,每个呼叫者都得到同样的ID,所以在浏览器中调用它.
电子邮件表
当代理商没有给记者的邮件,而密钥会收集电子邮件时,它就会
调用客户端工具 requestContact。聊天显示它是一个
tool-requestContact 页:1 input-available 状态。 显示窗体,然后
以 addToolOutput数字 :
addToolOutput({
tool: "requestContact",
toolCallId: part.toolCallId,
output: { email: "[email protected]", name: "Ada" }, // or { skipped: true }
});
- 检查电子邮件
isContactEmail(email)先说 API拒绝 如果电子邮件无效, 则整个聊天请求 . - 仅在助理消息出现时提供跳过
metadata.contactCollection实值optional这是required或者说off否则. - 过
shouldSendAfterContact作为sendAutomaticallyWhen所以,代理人 回答后继续 别用AI SDK的lastAssistantMessageIsCompleteWithToolCalls独活:它永远重传 一旦特工把报告归档. - 表格打开时不要发送新信息. API不能拿一个 与未回复的工具呼叫聊天 .
@forwardpath/react 做这一切为你.
来自服务器的会话
用您的 API 密钥在服务器上薄荷会话, 使用
@forwardpath/node 并且已经 getSessionToken 从自己取出信物
路线,例如:. POST /api/forwardpath/session。 。 。 .
错误
createBrowserSession 财务报告和审定财务报表 uploadAttachment 抛出和聊天传输
拒绝, ForwardPathApiError 在非-2xx响应。 它已经 status, (中文(简体) ),
code (例如:. unauthorized, (中文(简体) ), validation_error, (中文(简体) ), rate_limited, (中文(简体) ), title 财务报告和审定财务报表
选项 detail。 。 。 .
import { ForwardPathApiError } from "@forwardpath/js";
try {
await uploadAttachment({ baseUrl, sessionToken, file });
} catch (error) {
if (error instanceof ForwardPathApiError && error.status === 401) {
// Session expired: mint a new one and retry.
}
}
页面上下文
collectClientContext(extra?) 读取页面 URL, 主机,路径,标题,
参考器、用户代理、语言、时区和视图大小,然后合并到
appName, (中文(简体) ), appVersion, (中文(简体) ), environment 财务报告和审定财务报表 custom在浏览器外
仅返回 extra,因此在服务器渲染时可以安全拨打. 过去的数值
aPI的限制(例如:. custom 上限为30个密钥和4000个字符)
被剪辑或丢弃,所以它们不能失败聊天请求.