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_bodyEndpointit
Subscribe to stream
Tilaa aktiivisen keskustelun virta ja saat tekoälyn vastaukset reaaliajassa
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_bodyTilaa aktiivisen keskustelun virta ja saat tekoälyn vastaukset reaaliajassa. Tämä on vaihtoehto sille, että kyselet tilaa Get status -päätepisteestä.
Pyyntö
GET /api/chat/{chatId}/subscribe
Otsakkeet
| Otsake | Pakollinen | Kuvaus |
|---|---|---|
Authorization | Kyllä | Bearer macaly_... |
Polun parametrit
| Parametri | Tyyppi | Kuvaus |
|---|---|---|
chatId | string | Päätepisteen POST /api/chat palauttama keskustelun tunniste |
Esimerkkipyyntö
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='')
Vastaus
Palauttaa Server-Sent Events (SSE) -virran, jossa on työnkulun eteneminen ja tekoälyn vastaukset.Virran muoto
Virta käyttää Vercel AI SDK v4 -tietovirtaprotokollaa. Jokaisen osan alussa on tyyppiä ilmaiseva etuliite:| Etuliite | Kuvaus |
|---|---|
0: | Tekstisisältö |
2: | Data-objektit (kuten { chatId }) |
8: | Huomautukset ja metatiedot |
Esimerkkivirta
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."
Tilakoodit
| Tila | Kuvaus |
|---|---|
| 200 | Onnistui (virtavastaus) |
| 204 | Ei aktiivista virtaa (työnkulku on valmistunut tai sitä ei ole aloitettu) |
| 401 | Virheellinen tai puuttuva API-avain |
| 403 | Keskustelu ei kuulu workspacellesi |
| 404 | Keskustelua ei löytynyt |
| 429 | Käyttöraja ylitetty |
Huomioitavaa
- Virta päättyy, kun työnkulku valmistuu
- Jos kutsut päätepistettä työnkulun päätyttyä, saat vastauksena
204 No Content - Yksinkertaisempaan toteutukseen kannattaa harkita tilan kyselyä Get status -päätepisteestä
Oliko tästä sivusta hyötyä?