跳到正文

適用版本:Cowork 0.1.41 · 適用於所有 Cowork 使用者

檢視 Markdown

Connector ​

Connector 在一個外部渠道(聊天平台、直播間)和 Cowork 的 Gateway 之間傳遞訊息。用 api.registerConnector(definition) 註冊它。

ConnectorDefinition ​

欄位類型必填說明
idstring在 0.1.41 為是;否 尚未發布小寫字母、數字和連字元。dozin.connectors 列出 id 時,必須是其中之一;沒有這個清單時任何有效 id 都可以,最多 16 個 Connector。在 0.1.41 為必填且必須列出。從下一個版本起預設為套件名稱
systemPrompt 尚未發布string否這個 Connector 的每個對話都要遵守的規則,最多 4000 個字元;使用者無法編輯
chat 尚未發布{ title, roles?, maxLength?, maxPerMinute? }否訊息進入同一個對話,由它用 gateway_send 回覆。title 1–80 個字元;roles 最多 16 項,id 小寫(host、viewer、self)→ 1–24 個字元的標籤;maxLength 1–4000(預設 500);maxPerMinute 1–30(預設 6)。無效的 chat 會整個被拒絕
start(ctx)function是見下文
stop()function是見下文
send(reply)function是見下文

start(ctx) ​

Connector 啟動時呼叫。在這裡開啟連線、定時器和頁面監聽。

名稱類型說明
ctxConnectorContextemit、log,有該權限時還有 browser

回傳 void 或一個 promise。限時 5 秒。

stop() ​

Connector 停止時呼叫。關閉 start 開啟的一切。多次呼叫必須安全。限時 5 秒。

send(reply) ​

把 Cowork 的一則回覆送到渠道。

名稱類型說明
reply.textstring回覆內容
reply.channelKeystring送往哪裡,與 emit 給出的相同
reply.idempotencyKeystring相同的鍵最多只送出一次
reply.replyTo 尚未發布{ id, senderId, senderName, role }有 chat 時:這則回覆所回答的訊息

回傳 Promise<{ ok: boolean, error?: string, externalKey?: string, verified?: boolean }>。externalKey 是平台自己為這個對話給的鍵。verified 尚未發布 表示在對方那邊確實看到了這則回覆(預設等於 ok)。

結果 error時機
send_timeoutsend 花了超過 30 秒
unknown_connector沒有註冊這個 id 的 Connector
invalid_reply無法讀取 Cowork 傳入的回覆
invalid_send_resultsend 回傳的內容沒有布林值 ok
拋出的錯誤訊息send 拋出錯誤

ctx.emit(message) ​

把一則收到的訊息交給 Cowork。

欄位類型必填說明
textstring是對話裡顯示的內容
channelKeystring否<connectorId>/<kind>/<channelId>;預設 <connectorId>/group/default
senderIdstring否平台給發送者的固定 id
senderNamestring否顯示名稱
msgIdstring否用來去除重複
atnumber否平台時間,單位為毫秒
triggerboolean否false:只作為上下文,隨下一則會得到回覆的訊息一起送出
contextTextstring否模型讀取的內容,取代 text
role 尚未發布string否有 chat 時:誰說的(host、viewer、self);self 只作為上下文
modality 尚未發布'text' | 'voice'否voice:由語音轉寫而來

不回傳任何值。

ctx.log(text) ​

在 Extension 的日誌寫一行。不回傳任何值。

js
ctx.log('connected to room 42');

示例 ​

js
export function activate(api) {
  let timer;
  api.registerConnector({
    id: 'demo',
    start(ctx) { timer = setInterval(() => ctx.emit({ text: 'ping', senderId: 'bot' }), 60000); },
    stop() { clearInterval(timer); },
    async send(reply) { return { ok: true }; }
  });
}

相關 ​

適用於 Micromeet Cowork 0.1.41 · build 261111110020