Perslis 无障碍
02 / 接口

五次调用,这就是一整场对话。

只要你会发 HTTP 请求,今天下午就能把一个可用的 AAC 对话放进你的应用。下面就是全部接口——底下没有第二套更难的 API。

第 1 步

开启一个会话。

每场对话一个会话。它承载语言、阅读水平与记忆;只要还在交谈,就保留它的 id。

# $TINKYSPEAK_API_URL is the endpoint we issue with your key.
curl $TINKYSPEAK_API_URL/v1/sessions \
  -H "Authorization: Bearer $TINKYSPEAK_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"language":"en","partnerLanguage":"en","profile":{"level":"sentence","choices":6}}'

{ "id": "sess_8f2c…", "choices": [], "history": [] }
第 2 步

发送对方说的话。

这是你唯一必须发送的内容。你不需要发送使用者自己的话、历史或符号——线索我们已经持有。

curl $TINKYSPEAK_API_URL/v1/sessions/sess_8f2c…/hear \
  -H "Authorization: Bearer $TINKYSPEAK_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"text":"Would you like tea or coffee?"}'

返回的内容可以直接绘制。每个选项都是完整句子,附磁贴用的短标签、作为兜底的表情符号,以及用于选择的 id:

{ "choices": [
    { "id": "ch_1", "label": "Tea",    "sentence": "I'd like tea, please.",    "emoji": "🍵" },
    { "id": "ch_2", "label": "Coffee", "sentence": "I'd like coffee, please.", "emoji": "☕" },
    { "id": "ch_3", "label": "Water",  "sentence": "Water, please.",           "emoji": "💧" }
  ] }
第 3 步

随你怎么画。

这是你的应用。三列、九列、照片、你自己的符号集、开关扫描、眼动——都与我们无关。我们绝不获取或绘制任何素材。用 choice.id 告诉我们选了哪一个。

第 4 步

送出,然后回报已发生。

我们给你确切的文字与语言。你的语音引擎把它说出来、你的屏幕显示它、你的设备做它该做的事——然后回报结果,因为只有已送出的话才会进入记忆。

// the person taps a tile in YOUR interface
POST /v1/sessions/ID/select        {"choiceId":"ch_1"}   → a draft
POST /v1/sessions/ID/speak         {"draftId":"…"}      → the exact words + language

// YOUR voice engine says them, then you report what happened
POST /v1/sessions/ID/confirm-speech {"speechId":"…","outcome":"spoken"}
第 5 步

继续。

把对方的下一句发过来,对话就会从真正说出口的话继续。此外无需管理任何东西——不用拼装提示词,也不用来回传送历史。

你的符号

无需上传。指向你已有的资源即可。

这里没有符号上传功能,而且这是刻意的:你的素材留在你自己的服务器或应用包里,那里本就有你的版本管理与授权。你什么都不必交给我们——只需在渲染时把选项映射到你自己的符号库。

// Your library, your rules. Called for every choice before you draw it.
function artworkFor(choice) {
  const hit = myLibrary.find(choice.label, choice.sentence);
  return hit ? { kind: 'symbol', library: 'my-set', id: hit.id, alt: hit.alt }
             : null;            // null → the emoji stays as a fallback
}

选项携带的是词语与身份;它长什么样由你决定。你的符号集未覆盖的内容返回 null,表情符号就会保留,因此库里的空缺绝不会变成一块空白磁贴。更换素材绝不会改变被说出的词语。

全部路由

完整接口。

路由作用
POST /v1/sessions开始一场对话。设置双方语言与使用者设置。
POST …/hear对方说的话。返回候选选项。
POST …/select使用者点选的磁贴。返回草稿。
POST …/compose使用者自己的话,替代候选。
POST …/speak把草稿变成要送出的确切文字与语言。
POST …/confirm-speechspoken、displayed、failed 或 cancelled。
POST …/scan来自你摄像头的照片。返回关于画面内容的磁贴。
POST …/more · /reject再要一组候选,或全部放弃。
POST …/profile · /languages对话中途修改阅读水平、磁贴数量或任一语言。
POST …/reset · DELETE …清空记忆,或结束会话。

错误以 {"error":{"code","message"}} 返回。选择、草稿与送出 id 均为一次性,因此过期的点击不会送出错误的句子。两个操作同时进行会返回 409 session_busy。

申请 API 密钥先试试沟通板
继续阅读试一试

Perslis 全站