# Asosoft Kurdish ASR (Speech-to-Text) API Documentation & Integration Guidelines
# بەڵگەنامە و ڕێبەری تەواوی ئەیپی ئای وەرگێڕانی دەنگ بۆ دەقی کوردی (ASR / STT)

**Base URL:** `https://asosoft.gripe`  
**Direct Upstream Engine:** `https://asr.bla.iq`  
**Interactive Swagger UI:** `https://asosoft.gripe/docs`  
**Version:** 3.0 (Kurdish Asosoft AI Acoustic & Language Model)

---

## 1. پێشەکی و ناساندن (Overview)

خزمەتگوزاری **Asosoft ASR (Automatic Speech Recognition / Speech-to-Text)** سیستەمێکی تایبەتمەند و پێشکەوتووی ژیریی دەستکردە بۆ وەرگێڕانی قسە و دەنگی تۆمارکراو بۆ **دەقی نووسراوی کوردی (سۆرانی)**. 

ئەم سیستەمە لەسەر بنەمای مۆدێلی راهێنراوی **Asosoft AI** و تۆڕی دەماریی پێشکەوتوو کار دەکات کە بە تایبەتی لەسەر هەزاران کاتژمێر دەنگی کوردی، دیالێکتەکانی سۆرانی، دەنگی ئاخاوتنی ڕۆژانە، وتار، دەنگوباس و پەڕتووکی دەنگی ڕاهێنراوە.

### تایبەتمەندییە سەرەکییەکان:
- **دەرهێنانی دەقی کوردی ستاندارد:** دەرکردنی دەق بە یونیکۆدی دروستی کوردی لەگەڵ خاڵبەندی و ڕێنووسی ستاندارد.
- **پشتگیری فایلەکانی دەنگ و ڤیدیۆ:** وەرگرتنی فۆرماتەکانی `.mp3`, `.wav`, `.m4a`, `.ogg`, `.flac`, `.mp4`, `.webm`.
- **هەژمارکردنی وردی باڵانس بە چرکە:** باڵانس بەپێی ماوەی دەقیقی دەنگەکە (Audio Duration) بە چرکە کەم دەکات نەک بە ژمارەی وشە یان فایل.
- **بەستنەوەی فرە-زمان:** بەردەست لە ڕێگەی REST API بۆ بەکارهێنان لە وێب، مۆبایل (Flutter / React Native / Swift / Kotlin)، و سێرڤەر (Python, Node.js, C#, Java, PHP).
- **ئەوپەڕی خێرایی و پارێزراوی:** خێرایی پرۆسێسکردنی چەند هێندەی کاتی ڕاستەقینە (Faster than real-time transcription).

---

## 2. سیستەمەکە چۆن کار دەکات؟ (Architecture & How It Works)

```
┌─────────────────┐       Multipart Form-Data       ┌────────────────────────┐
│  Client App     │ ──────────────────────────────> │  https://asosoft.gripe │
│ (Python/Web/App)│   (file + x-stt-token header)   │  (Asosoft API Gateway) │
└─────────────────┘                                 └───────────┬────────────┘
         ▲                                                      │
         │                                        1. پشکنینی تۆکن و ماوەی باڵانس
         │                                        2. ناردن بۆ مۆدێلی دەنگی کوردی
         │                                                      ▼
         │                                          ┌────────────────────────┐
         │                                          │   https://asr.bla.iq   │
         │                                          │ (Asosoft AI Engine)    │
         │                                          └───────────┬────────────┘
         │                                                      │
         │       JSON Response with Kurdish Text                ▼
         └───────────────────────────────────────── ┌────────────────────────┐
             {"text": "...", "audio_duration": ...} │  3. دەرهێنانی دەق     │
                                                    │  4. لێبڕینی باڵانس بە چرکە
                                                    │  5. تۆماری مێژوو و IP  │
                                                    └────────────────────────┘
```

### هەنگاوەکانی جێبەجێکردن:
1. **ناردنی داواکاری:** کڕیار فایلی دەنگ یان ڤیدیۆ دەنێرێت بۆ `/audio-files` یان `/stt/transcribe` لەگەڵ کلیلی تۆکن (`x-stt-token` یان فۆرمی `token`).
2. **پشکنینی باڵانس و ڕەوایی (Pre-flight Quota Check):**
   - سێرڤەر دڵنیادەبێتەوە لەوەی تۆکنەکە بەسەرنەچووە (`deadline`).
   - پشکنین دەکرێت کە باڵانسی ماوە گەورەتر بێت لە 0 چرکە (`seconds_left > 0`). ئەگەر باڵانس 0 بێت یان بەسەرچووبێت، کۆدی `403 Forbidden` دەگەڕێتەوە بەبێ خەرجکردنی دەنگ.
3. **پرۆسێسکردنی دەنگ لەلایەن بزوێنەری ASR:**
   - فایلەکە دەنێردرێت بۆ ئەڵقەی ناوەندیی بزوێنەری ASR.
   - سیستەم مۆدێلی دەنگی کوردی بەکاردەهێنێت بۆ ناسینەوەی فۆنیمەکان، وشەکان و خاڵبەندی.
   - ماوەی تەواوی دەنگەکە بە چرکە (`audio_duration`) هەژمار دەکرێت.
4. **لێبڕینی باڵانس و تۆمارکردنی مێژوو:**
   - بە ئەندازەی ماوەی فایلی دەنگەکە (`audio_duration`) لە باڵانسی کڕیار (`seconds_left`) دادەبەزێت.
   - ناونیشانی IP، ناوی فایل، کاتی ناردن، و چرکەی خەرجکراو لە مێژووی بەکارهێنانی ئەو تۆکنە تۆمار دەکرێت.
5. **وەڵامدانەوە:** کڕیار دەقی وەرگێڕدراو، ماوەی فایلی دەنگ، و باڵانسی ماوە وەردەگرێتەوە.

---

## 3. ڕێگاکانی سەلماندنی ناسنامە (Authentication)

بۆ پەیوەستبوون بە ASR API، دەتوانیت یەکێک لەم سێ شێوازە بەکاربهێنیت:

### شێوازی ١: Header تایبەت بە تۆکنی دەنگ (پێشنیازکراو)
```http
POST /audio-files HTTP/1.1
Host: asosoft.gripe
x-stt-token: YOUR_STT_TOKEN
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary
```

### شێوازی ٢: وەک Form Field لەگەڵ فایلی بارکراو
```http
POST /audio-files HTTP/1.1
Host: asosoft.gripe
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary

------WebKitFormBoundary
Content-Disposition: form-data; name="token"

YOUR_STT_TOKEN
------WebKitFormBoundary
Content-Disposition: form-data; name="file"; filename="audio.mp3"
Content-Type: audio/mpeg

<BINARY_DATA>
------WebKitFormBoundary--
```

### شێوازی ٣: تۆکنی بەکارهێنەری Asosoft (Bearer Token)
ئەگەر لە سیستەمی سەرەکیی Asosoft خاوەنی هەژمار بیت و ئەدمین تۆکنی دەنگی بۆ هەژمارەکەت بەستبێتەوە:
```http
POST /audio-files HTTP/1.1
Host: asosoft.gripe
Authorization: Bearer YOUR_ACCESS_TOKEN
Content-Type: multipart/form-data
```

---

## 4. فۆرمات و تایبەتمەندییە پێشنیازکراوەکانی دەنگ (Audio Format Specs)

| تایبەتمەندی | پێشنیازکراو (Recommended) | پشتگیریکراو (Supported) |
| :--- | :--- | :--- |
| **فۆرماتی فایل** | `.wav` (PCM 16-bit) یان `.mp3` | `.wav`, `.mp3`, `.m4a`, `.ogg`, `.flac`, `.mp4`, `.webm` |
| **ڕێژەی نموونە (Sample Rate)** | `16,000 Hz (16 kHz)` | `8,000 Hz` تا `48,000 Hz` |
| **کەناڵ (Channels)** | مۆنۆ (Mono / 1-channel) | Mono و Stereo |
| **بیتڕەیت (Bitrate)** | 64 kbps - 128 kbps (بۆ MP3/AAC) | 32 kbps تا 320 kbps |
| **قەبارەی پەسەندکراو** | کەمتر لە 50 مێگابایت بۆ هەر فایلێک | تا 100 مێگابایت |
| **ماوەی پارچە دەنگ** | 10 چرکە تا 15 خولەک بۆ هەر داواکارییەک | تا 60 خولەک بۆ هەر داواکارییەک |

> **ئامۆژگاری بۆ دەنگی درێژ (Long Audio Files):**  
> ئەگەر فایلی دەنگەکەت لە ٣٠ خولەک زیاترە (وەک کۆبوونەوە یان لێدوان)، پێشنیاز دەکرێت فایلەکە پارچە پارچە بکەیت بۆ پارچەی ٥ بۆ ١٠ خولەکی. ئەمە پرۆسێسکردن چەند هێندە خێراتر دەکات و کێشەی بڕانی هێڵی ئینتەرنێت کەم دەکاتەوە.

---

## 5. وردەکاری و فەرهەنگی ڕێڕەوەکان (Endpoints Reference)

### ٥.١. وەرگێڕانی فایلی دەنگ و ڤیدیۆ (Transcribe Audio/Video)

- **ڕێڕەو:** `POST /audio-files` یان `POST /stt/transcribe`
- **جۆری داتا:** `multipart/form-data`
- **تێچوو:** بە ئەندازەی ماوەی دەنگەکە بە چرکە لە باڵانسی تۆکن کەم دەکات.

#### پارامێتەرەکانی داواکاری:
| پارامێتەر | شوێن | جۆر | پێویستە؟ | ڕوونکردنەوە |
| :--- | :--- | :--- | :--- | :--- |
| `file` | Form-Data | File (Binary) | **بەڵێ** | فایلی دەنگ یان ڤیدیۆ (`.mp3`, `.wav`, `.m4a`, `.mp4`, هتد) |
| `token` | Form-Data | String | نائامادە | تۆکنی دەنگ ئەگەر لە Header نەنێردرابێت |
| `x-stt-token` | Header | String | نائامادە | تۆکنی دەنگ (پێشنیازکراو لە بەرامبەر Form-Data) |
| `Authorization` | Header | String | نائامادە | `Bearer <access_token>` ئەگەر وەک بەکارهێنەر لۆگین کرابێت |

#### نموونەی وەڵام (Response 200 OK):
```json
{
  "text": "سڵاو و ڕێز، ئەمە تاقیکردنەوەی خزمەتگوزاری وەرگێڕانی دەنگ بۆ دەقی ئاسۆسۆفتە بە زمانی کوردی.",
  "audio_duration": 5.48,
  "duration_formatted": "00:00:05",
  "seconds_left": 3594,
  "left_formatted": "00:59:54",
  "token": "stt_56f8f17a9412"
}
```

#### وەسفی خانەکانی وەڵام:
- `text` *(string)*: دەقی وەرگێڕدراوی کوردی سۆرانی بە تەواوی خاڵبەندی و پیتی ستاندارد.
- `audio_duration` *(float)*: ماوەی دەقیقی دەنگەکە بە چرکە.
- `duration_formatted` *(string)*: ماوەی خەرجکراو بە شێوازی کاتژمێر:خولەک:چرکە (`HH:MM:SS`).
- `seconds_left` *(integer)*: باڵانسی ماوەی تۆکنەکە بە چرکە لە دوای ئەم داواکارییە.
- `left_formatted` *(string)*: باڵانسی ماوە بە شێوازی کاتژمێر:خولەک:چرکە (`HH:MM:SS`).
- `token` *(string)*: تۆکنی بەکارهاتوو بۆ ئەم داواکارییە.

---

### ٥.٢. پشکنینی باڵانس و دۆخی تۆکن (Check Token Balance)

- **ڕێڕەو:** `GET /check/{token}`
- **دەسەڵات (Auth):** گشتی (پێویستی بە لۆگین نییە، تەنها ناسێنەری تۆکنەکە لە ناو URL بنووسە).
- **مەبەست:** پشکنینی ئەوەی چەند کاتی دەنگ لە تۆکنەکە ماوە و ئایا بەسەرچووە یان نا، پێش ئەوەی فایلی گەورە باربکرێت.

#### نموونەی داواکاری:
```http
GET https://asosoft.gripe/check/stt_56f8f17a9412
```

#### نموونەی وەڵام (Response 200 OK):
```json
{
  "token": "stt_56f8f17a9412",
  "valid": true,
  "original_balance": "01:00:00",
  "original_balance_seconds": 3600,
  "time_spent": "00:15:20",
  "time_spent_seconds": 920,
  "time_left": "00:44:40",
  "time_left_seconds": 2680,
  "total_requests": 14,
  "is_expired": false,
  "assigned_user": "kurdo_media",
  "deadline": "2026-12-31T23:59:59+00:00",
  "request_history": [
    {
      "filename": "interview_part1.mp3",
      "audio_duration": 182.4,
      "ip": "82.145.220.14",
      "timestamp": "2026-10-08T11:20:15+00:00"
    }
  ]
}
```

---

### ٥.٣. زانیاری دەنگی بەکارهێنەری لۆگینکراو (User STT Balance)

- **ڕێڕەو:** `GET /users/me/stt`
- **دەسەڵات (Auth):** پێویستی بە `Authorization: Bearer <access_token>` هەیە.
- **مەبەست:** وەرگرتنی زانیاری دەنگ و تۆکنەکەی بەستراوە بە هەژماری بەکارهێنەری ئێستاوە.

---

### ٥.٤. بەڕێوەبردنی تۆکنەکان لەلایەن ئەدمین (Admin Token Management)

ئەم فەرمانانە پێویستیان بە کلیلی ئەدمین هەیە (`x-admin-key: Admin45%^$AL`) یان هەژماری ئەدمین:

| فەرمان و ڕێڕەو | وەسف | نموونەی داواکاری (Payload) |
| :--- | :--- | :--- |
| `GET /tokens` | بینینی هەموو تۆکنەکان لەگەڵ ئاماری ماوە و خەرجکراو | فلتەر بە Query: `?search=kurdo&status=active` |
| `POST /tokens` | دروستکردنی تۆکنی نوێ | `{"duration": "10h", "assigned_user": "studio", "note": "Weekly podcast"}` |
| `POST /tokens/charge` | زیادکردنی کات بۆ تۆکنێکی دیاریکراو | `{"token": "stt_xxx", "duration": "2h30m"}` |
| `POST /tokens/{token}/renew` | ڕیسێتکردنەوەی بەکارهێنان و نوێکردنەوە | `{"window": "5h"}` |
| `POST /tokens/{token}/expire` | ناچالاککردن و بەسەرچوونی دەستبەجێی تۆکن | بێ ناردنی Payload |
| `DELETE /tokens/{token}` | سڕینەوەی یەکجاریی تۆکن | بێ ناردنی Payload |

---

## 6. کۆدی نموونەیی بە زمانە جیاوازەکان (Multi-Language Code Examples)

### Python (بەکارهێنانی کتێبخانەی `requests`)

```python
import requests

API_URL = "https://asosoft.gripe"
STT_TOKEN = "YOUR_STT_TOKEN"
AUDIO_FILE_PATH = "speech.mp3"

def transcribe_audio():
    # 1. پێشەکی: پشکنینی باڵانسی تۆکن
    chk_res = requests.get(f"{API_URL}/check/{STT_TOKEN}")
    if chk_res.status_code == 200:
        info = chk_res.json()
        print(f"باڵانسی ماوە: {info['time_left']} (کۆی داواکارییەکان: {info['total_requests']})")
        if info['time_left_seconds'] <= 0:
            print("باڵانسی تۆکنەکەت تەواو بووە!")
            return

    # 2. ناردنی فایلی دەنگ بۆ وەرگێڕان
    headers = {
        "x-stt-token": STT_TOKEN
    }
    
    with open(AUDIO_FILE_PATH, "rb") as f:
        files = {
            "file": (AUDIO_FILE_PATH, f, "audio/mpeg")
        }
        
        # دیاریکردنی Timeout گونجاو (١٨٠ چرکە بۆ دەنگی درێژ)
        response = requests.post(
            f"{API_URL}/audio-files",
            headers=headers,
            files=files,
            timeout=180
        )
    
    if response.status_code == 200:
        result = response.json()
        print("\n=== دەقی دەرهێنراوی کوردی ===")
        print(result["text"])
        print(f"\nماوەی دەنگ: {result['duration_formatted']} ({result['audio_duration']} چرکە)")
        print(f"باڵانسی ماوە: {result['left_formatted']}")
    elif response.status_code == 403:
        print("هەڵە 403: تۆکنەکەت بەسەرچووە یان باڵانسی ماوە 0 چرکەیە.")
    else:
        print(f"هەڵە ({response.status_code}): {response.text}")

if __name__ == "__main__":
    transcribe_audio()
```

---

### JavaScript / Node.js / React

```javascript
// بەکارهێنان لە فرۆنت-ئێند یان Node.js (Fetch API)
async function transcribeKurdishAudio(fileObject, sttToken) {
  const API_URL = "https://asosoft.gripe";

  // ١. ئامادەکردنی FormData
  const formData = new FormData();
  formData.append("file", fileObject);

  try {
    const response = await fetch(`${API_URL}/audio-files`, {
      method: "POST",
      headers: {
        "x-stt-token": sttToken,
      },
      body: formData,
    });

    if (!response.ok) {
      const errData = await response.json().catch(() => ({}));
      throw new Error(errData.detail || `Server error: ${response.status}`);
    }

    const data = await response.json();
    console.log("Transcribed Kurdish Text:", data.text);
    console.log("Audio Duration:", data.duration_formatted);
    console.log("Remaining Balance:", data.left_formatted);

    return data;
  } catch (error) {
    console.error("Transcription failed:", error.message);
    throw error;
  }
}
```

---

### cURL (تێرمیناڵ و شێڵ)

```bash
# ١. پشکنینی باڵانسی تۆکن
curl -X GET "https://asosoft.gripe/check/YOUR_STT_TOKEN"

# ٢. ناردنی فایلی دەنگ بۆ وەرگێڕان بە هەیدەری x-stt-token
curl -X POST "https://asosoft.gripe/audio-files" \
  -H "accept: application/json" \
  -H "x-stt-token: YOUR_STT_TOKEN" \
  -F "file=@speech.mp3;type=audio/mpeg"

# ٣. ناردنی فایلی ڤیدیۆی MP4 بە فۆرمی token
curl -X POST "https://asosoft.gripe/audio-files" \
  -F "token=YOUR_STT_TOKEN" \
  -F "file=@meeting.mp4;type=video/mp4"
```

---

### C# (.NET Core)

```csharp
using System;
using System.IO;
using System.Net.Http;
using System.Threading.Tasks;

class KurdishASRClient {
    static async Task Main() {
        string apiUrl = "https://asosoft.gripe/audio-files";
        string sttToken = "YOUR_STT_TOKEN";
        string filePath = "audio.wav";

        using var client = new HttpClient();
        client.Timeout = TimeSpan.FromMinutes(4);
        client.DefaultRequestHeaders.Add("x-stt-token", sttToken);

        using var form = new MultipartFormDataContent();
        using var fileStream = File.OpenRead(filePath);
        using var streamContent = new StreamContent(fileStream);
        
        form.Add(streamContent, "file", Path.GetFileName(filePath));

        var response = await client.PostAsync(apiUrl, form);
        string jsonResult = await response.Content.ReadAsStringAsync();

        if (response.IsSuccessStatusCode) {
            Console.WriteLine("سەرکەوتوو بوو:");
            Console.WriteLine(jsonResult);
        } else {
            Console.WriteLine($"هەڵە {response.StatusCode}: {jsonResult}");
        }
    }
}
```

---

### Java (Java 11+ `HttpClient`)

```java
import java.io.File;
import java.nio.file.Files;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;

public class AsosoftASR {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(30))
            .build();

        String token = "YOUR_STT_TOKEN";
        File file = new File("speech.mp3");
        byte[] fileBytes = Files.readAllBytes(file.toPath());

        String boundary = "Boundary-" + System.currentTimeMillis();
        
        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://asosoft.gripe/audio-files"))
            .timeout(Duration.ofMinutes(3))
            .header("x-stt-token", token)
            .header("Content-Type", "multipart/form-data; boundary=" + boundary)
            .POST(HttpRequest.BodyPublishers.ofByteArray(fileBytes))
            .build();

        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        System.out.println("Status: " + response.statusCode());
        System.out.println("Result: " + response.body());
    }
}
```

---

## 7. ڕێنماییە پراکتیکییەکان بۆ بەدەستهێنانی بەرزترین کوالێتی (Best Practices Guideline)

بۆ ئەوەی مۆدێلی ژیریی دەستکرد بە بەرزترین ڕێژەی سەرکەوتن (زۆر لەسەرووی 95%) دەنگەکە بۆ دەق وەربگێڕێت، تکایە ڕەچاوی ئەم ڕێنماییانە بکە:

### ١. پاکیی دەنگ و دەوروبەر (Acoustic Quality)
- دوورکەوتنەوە لە دەنگی ژاوەژاو، هاتوچۆی ئۆتۆمبێل، یان مۆسیقای باکگراوند کە لە قسەکە بەرزتر بێت.
- دووریی مایکرۆفۆن لە دەم با لە نێوان **١٥ بۆ ٣٠ سانتیمەتر** بێت تا دەنگەکە نەپچڕێت و شەپۆلی هەوا (Popping) دروست نەکات.

### ٢. یەکخستنی دەنگ لەگەڵ هەڵەچنی Asosoft (Chaining with `/spell`)
دەتوانیت دەقە دەرهێنراوەکەی ASR ڕاستەوخۆ بنێریت بۆ ئەندرۆپۆینتی هەڵەچنی کوردی:
```http
POST https://asosoft.gripe/spell
Content-Type: application/json

{"text": "<TRANSCRIPTION_RESULT>"}
```
ئەم کردارە خاڵبەندی، فەرهەنگی وشەسازی، و شێوازی فەرمی کتێب و نووسین ڕێکدەخات. هەڵەچن **بە تەواوی خۆڕاییە (0 کرێدیت)**.

### ٣. ڕێکخستنی Timeout لە نەرمەکاڵاکەتدا
لەبەر ئەوەی فایلی دەنگی درێژ (بۆ نموونە ١٠ خولەک) ڕەنگە ١٥ بۆ ٣٠ چرکەی پێ بچێت تا تەواو دەبێت، **هەمیشە Timeout ی نەرمەکاڵاکەت (Client-side Timeout) لەسەر ١٨٠ تا ٣٠٠ چرکە دانێ**، تا کێشەی Client Timeout ڕوونەدات.

### ٤. فلتەرکردنی فایلی بەتاڵ (Zero-byte Audio)
دڵنیابە فایلی دەنگەکە خاوەنی داتایە و سەرووی 1000 بایتە پێش ناردن، بۆ ڕێگریکردن لە هەڵەی `400 Bad Request`.

---

## 8. خشتەی کۆدەکانی وەڵامدانەوە و چارەسەری کێشەکان (Troubleshooting & Errors)

| کۆدی HTTP | مانا | هۆکار | چارەسەر |
| :--- | :--- | :--- | :--- |
| **`200 OK`** | سەرکەوتوو بوو | فایلی دەنگ وەرگیرا و بە سەرکەوتوویی وەرگێڕدرا. | دەتوانیت دەقی خانەی `text` وەربگریت و بەکاریبهێنیت. |
| **`400 Bad Request`** | داواکاری نادروست | فایلی دەنگ بەتاڵە (`0 bytes`)، یان جۆری فایلەکە تێکچووە. | دڵنیابە فایلەکە لەسەر ئامێرەکەت دەخوێندرێتەوە و پاشگری دروستی هەیە. |
| **`401 Unauthorized`** | ڕێپێنەدراو | کلیلی تۆکنی STT دیاری نەکراوە (نە لە Header و نە لە Form). | تۆکنەکەت لە هەیدەری `x-stt-token` دابنێ یان لۆگین بکە. |
| **`403 Forbidden`** | باڵانس نەماوە / بەسەرچووە | تۆکنەکە ماوەکەی بەسەرچووە (`expired`) یان باڵانسی چرکەی گەیشتووەتە 0. | بانگی `GET /check/{token}` بکە؛ پەیوەندی بە ئەدمین بکە بۆ بارگاوی کردنەوە. |
| **`502 Bad Gateway`** | بزوێنەری دەنگ وەڵام نادات | کێشەی کاتی لە پەیوەندی نێوان Asosoft Gateway و Upstream ASR Engine. | دوای چەند چرکەیەک داواکارییەکە دووبارە بکەرەوە (Retry). |
| **`504 Gateway Timeout`** | کاتی چاوەڕوانی بەسەرچوو | فایلی دەنگ زۆر گەورەیە و کاتی زیاتری ویستووە. | فایلی دەنگ بکە بە پارچەی بچووکتر (بۆ نموونە پارچەی ٥ بۆ ١٠ خولەکی). |

---

## 9. پەیوەندی و پشتگیری (Support)

- وێبسایت: [https://asosoft.gripe](https://asosoft.gripe)
- ڕووکاری کارلێککار: [https://asosoft.gripe/docs](https://asosoft.gripe/docs)
- تیمی پەرەپێدانی ئاسۆسۆفت (Asosoft AI Team)
