package main
import (
"encoding/json"
"fmt"
"io"
"net/http"
"strings"
"time"
)
type StartResponse struct {
WorkflowID string `json:"workflow_id"`
Status string `json:"status"`
}
type StatusResponse struct {
WorkflowID string `json:"workflow_id"`
Status string `json:"status"`
Logs []interface{} `json:"logs"`
Response interface{} `json:"response"`
}
func main() {
// Start the flow
startURL := "https://app.phinite.ai/api/v1/ai/trigger/start/{workspace_id}/{trigger_id}/{environment}"
payload := strings.NewReader(`{
"message": "start the task",
"user_variables": {
"key1": "value1",
"key2": "value2"
}
}`)
client := &http.Client{}
req, _ := http.NewRequest("POST", startURL, payload)
req.Header.Add("Authorization", "Bearer workspace_api_key")
req.Header.Add("Content-Type", "application/json")
res, _ := client.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
var startResp StartResponse
json.Unmarshal(body, &startResp)
fmt.Printf("Workflow started: %s\n", startResp.WorkflowID)
// Poll for status
statusURL := fmt.Sprintf("https://app.phinite.ai/api/v1/ai/trigger/status/{workspace_id}/%s", startResp.WorkflowID)
for {
statusReq, _ := http.NewRequest("GET", statusURL, nil)
statusReq.Header.Add("Authorization", "Bearer workspace_api_key")
statusRes, _ := client.Do(statusReq)
statusBody, _ := io.ReadAll(statusRes.Body)
statusRes.Body.Close()
var statusResp StatusResponse
json.Unmarshal(statusBody, &statusResp)
fmt.Printf("Status: %s, Logs: %d\n", statusResp.Status, len(statusResp.Logs))
if statusResp.Status == "completed" || statusResp.Status == "failed" {
fmt.Printf("Final result: %s\n", string(statusBody))
break
}
time.Sleep(5 * time.Second)
}
}