Subscribe to stream
curl --request GET \
--url https://macaly.com/api/chat/{chatId}/subscribe \
--header 'Authorization: Bearer <token>'import requests
url = "https://macaly.com/api/chat/{chatId}/subscribe"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://macaly.com/api/chat/{chatId}/subscribe', 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://macaly.com/api/chat/{chatId}/subscribe",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://macaly.com/api/chat/{chatId}/subscribe"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://macaly.com/api/chat/{chatId}/subscribe")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://macaly.com/api/chat/{chatId}/subscribe")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_bodyVégpontok
Subscribe to stream
Feliratkozás egy aktív beszélgetés adatfolyamára az AI-válaszok valós idejű követéséhez
GET
/
api
/
chat
/
{chatId}
/
subscribe
Subscribe to stream
curl --request GET \
--url https://macaly.com/api/chat/{chatId}/subscribe \
--header 'Authorization: Bearer <token>'import requests
url = "https://macaly.com/api/chat/{chatId}/subscribe"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://macaly.com/api/chat/{chatId}/subscribe', 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://macaly.com/api/chat/{chatId}/subscribe",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://macaly.com/api/chat/{chatId}/subscribe"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://macaly.com/api/chat/{chatId}/subscribe")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://macaly.com/api/chat/{chatId}/subscribe")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_bodyFeliratkozik egy aktív beszélgetés adatfolyamára, hogy valós időben megkapd az AI válaszait. Ez a Get Status végpont lekérdezésének alternatívája.
Kérés
GET /api/chat/{chatId}/subscribe
Fejlécek
| Fejléc | Kötelező | Leírás |
|---|---|---|
Authorization | Igen | Bearer macaly_... |
Útvonalparaméterek
| Paraméter | Típus | Leírás |
|---|---|---|
chatId | string | A POST /api/chat által visszaadott beszélgetésazonosító |
Példa kérés
curl -N https://www.macaly.com/api/chat/abc123/subscribe \
-H "Authorization: Bearer macaly_abc123..."
const response = await fetch(
`https://www.macaly.com/api/chat/${chatId}/subscribe`,
{
headers: {
'Authorization': 'Bearer macaly_abc123...',
},
}
);
if (response.status === 204) {
console.log('No active stream');
return;
}
const reader = response.body.getReader();
const decoder = new TextDecoder();
while (true) {
const { done, value } = await reader.read();
if (done) break;
const chunk = decoder.decode(value);
for (const line of chunk.split('\n')) {
if (line.startsWith('0:')) {
// Text content
const text = JSON.parse(line.slice(2));
process.stdout.write(text);
}
}
}
import requests
response = requests.get(
f'https://www.macaly.com/api/chat/{chat_id}/subscribe',
headers={
'Authorization': 'Bearer macaly_abc123...',
},
stream=True,
)
if response.status_code == 204:
print('No active stream')
else:
for line in response.iter_lines():
if line:
line = line.decode('utf-8')
if line.startswith('0:'):
import json
text = json.loads(line[2:])
print(text, end='')
Válasz
Server-Sent Events (SSE) adatfolyamot ad vissza a munkafolyamat előrehaladásával és az AI válaszaival.Az adatfolyam formátuma
Az adatfolyam a Vercel AI SDK v4 adatfolyam-protokollját használja. Minden adatcsomag elején egy típusjelölő áll:| Előtag | Leírás |
|---|---|
0: | Szöveges tartalom |
2: | Adatobjektumok (például { chatId }) |
8: | Annotációk és metaadatok |
Példa adatfolyam
2:[{"chatId":"abc123"}]
0:"I'll create a landing page for you."
0:" Let me start by setting up the project structure."
8:{"type":"tool-call","toolName":"WriteFile",...}
0:" Done! Your landing page is ready."
Állapotkódok
| Állapot | Leírás |
|---|---|
| 200 | Sikeres (adatfolyam-válasz) |
| 204 | Nincs aktív adatfolyam (a munkafolyamat befejeződött vagy még nem indult el) |
| 401 | Érvénytelen vagy hiányzó API-kulcs |
| 403 | A beszélgetés nem a munkaterülethez tartozik |
| 404 | A beszélgetés nem található |
| 429 | Túllépted a kérési korlátot |
Megjegyzések
- Az adatfolyam a munkafolyamat befejezésekor véget ér
- Ha a munkafolyamat befejezése után hívod a végpontot,
204 No Contentválaszt kapsz - Egyszerűbb megvalósításhoz érdemes inkább a Get Status végpontot lekérdezni
Hasznos volt ez az oldal?