Hooks
創建 Hook
安裝一個自主 Hook,當匹配的事件發生時觸發技能執行。
POST
/
api
/
v1
/
hooks
創建 Hook
curl --request POST \
--url https://api.example.com/api/v1/hooks \
--header 'Content-Type: application/json' \
--data '
{
"hook_preset_id": "<string>",
"event_pattern": "<string>",
"skill_slug": "<string>",
"cooldown_minutes": 123
}
'import requests
url = "https://api.example.com/api/v1/hooks"
payload = {
"hook_preset_id": "<string>",
"event_pattern": "<string>",
"skill_slug": "<string>",
"cooldown_minutes": 123
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
hook_preset_id: '<string>',
event_pattern: '<string>',
skill_slug: '<string>',
cooldown_minutes: 123
})
};
fetch('https://api.example.com/api/v1/hooks', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/api/v1/hooks",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'hook_preset_id' => '<string>',
'event_pattern' => '<string>',
'skill_slug' => '<string>',
'cooldown_minutes' => 123
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/api/v1/hooks"
payload := strings.NewReader("{\n \"hook_preset_id\": \"<string>\",\n \"event_pattern\": \"<string>\",\n \"skill_slug\": \"<string>\",\n \"cooldown_minutes\": 123\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.example.com/api/v1/hooks")
.header("Content-Type", "application/json")
.body("{\n \"hook_preset_id\": \"<string>\",\n \"event_pattern\": \"<string>\",\n \"skill_slug\": \"<string>\",\n \"cooldown_minutes\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/v1/hooks")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"hook_preset_id\": \"<string>\",\n \"event_pattern\": \"<string>\",\n \"skill_slug\": \"<string>\",\n \"cooldown_minutes\": 123\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"event_pattern": "<string>",
"skill_slug": "<string>",
"enabled": true,
"cooldown_minutes": 123
}請求
string
內置 Hook 預設的 ID(例如
share.accepted.welcome、task.overdue.summary)。與 event_pattern 互斥。string
要匹配的自定義事件模式。支持精確匹配(
share.accepted)、通配符(order.*.completed)、前綴匹配(share)或全匹配(*)。與 hook_preset_id 互斥。string
必填
Hook 觸發時要執行的技能 slug。
number
兩次觸發之間的最短間隔時間(分鐘,1–1440)。省略時將應用服務端默認值。
響應
string
該 Hook 的唯一 UUID。
string
解析後的事件模式(來自預設或自定義)。
string
目標技能 slug。
boolean
創建時始終為
true。number
兩次觸發之間的冷卻週期。
身份驗證
需要具有completions 權限範圍的 API 密鑰。
示例
curl -X POST https://www.hitheo.ai/api/v1/hooks \
-H "Authorization: Bearer $THEO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"event_pattern": "order.*.completed",
"skill_slug": "order-processor",
"cooldown_minutes": 5
}'
const hook = await theo.createHook({
event_pattern: "order.*.completed",
skill_slug: "order-processor",
cooldown_minutes: 5,
});
護欄
- 每次自主執行前進行預檢信用額度檢查
- 自主操作單獨設有每日上限
- 對工具調用次數和總支出設有單次運行上限
- Hook 在連續失敗後會自動暫停
- 強制執行兩次觸發之間的冷卻時間
這個頁面有幫助嗎?
創建 Hook
curl --request POST \
--url https://api.example.com/api/v1/hooks \
--header 'Content-Type: application/json' \
--data '
{
"hook_preset_id": "<string>",
"event_pattern": "<string>",
"skill_slug": "<string>",
"cooldown_minutes": 123
}
'import requests
url = "https://api.example.com/api/v1/hooks"
payload = {
"hook_preset_id": "<string>",
"event_pattern": "<string>",
"skill_slug": "<string>",
"cooldown_minutes": 123
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
hook_preset_id: '<string>',
event_pattern: '<string>',
skill_slug: '<string>',
cooldown_minutes: 123
})
};
fetch('https://api.example.com/api/v1/hooks', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/api/v1/hooks",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'hook_preset_id' => '<string>',
'event_pattern' => '<string>',
'skill_slug' => '<string>',
'cooldown_minutes' => 123
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/api/v1/hooks"
payload := strings.NewReader("{\n \"hook_preset_id\": \"<string>\",\n \"event_pattern\": \"<string>\",\n \"skill_slug\": \"<string>\",\n \"cooldown_minutes\": 123\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.example.com/api/v1/hooks")
.header("Content-Type", "application/json")
.body("{\n \"hook_preset_id\": \"<string>\",\n \"event_pattern\": \"<string>\",\n \"skill_slug\": \"<string>\",\n \"cooldown_minutes\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/v1/hooks")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"hook_preset_id\": \"<string>\",\n \"event_pattern\": \"<string>\",\n \"skill_slug\": \"<string>\",\n \"cooldown_minutes\": 123\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"event_pattern": "<string>",
"skill_slug": "<string>",
"enabled": true,
"cooldown_minutes": 123
}