Επιστροφή στον Πίνακα Ελέγχου

Τεκμηρίωση

Μάθετε πώς να χρησιμοποιείτε το Asyntai

Ξεκινώντας
Εγκατάσταση Βάση Γνώσεων Πώς η ΤΝ αποκτά πρόσβαση στο περιεχόμενό σας Συνδέστε τον ιστότοπό σας Δοκιμάστε το AI σας Διαχείριση Ιστότοπων Συμβουλές Οδηγιών AI Μετάβαση από άλλο chatbot Σύγκριση Πλάνων
Λειτουργίες
Μπάρα Ask AI Μπάρα Αναζήτησης AI Ανίχνευση Ιστότοπου Κενά Γνώσης Κάρτες Προϊόντων Δυναμικές Κάρτες Προϊόντων Δυναμικές εικόνες Πλαίσιο Χρήστη Προσαρμοσμένα εργαλεία Παράμετροι συνδέσμων Ζωντανή Παρακολούθηση Ανάληψη από Άνθρωπο Κλιμάκωση Ειδοποιήσεις AI Ημερήσια Αναφορά Ροή Δεδομένων Πραγματικού Χρόνου Μέγιστη Ροή Δεδομένων Πραγματικού Χρόνου Μέλη Ομάδας Ενιαία Σύνδεση Έλεγχος ταυτότητας δύο παραγόντων Συμπερίληψη Εικόνων Ανάλυση Εικόνας Widget Μετάφρασης Τοπικοποίηση Διαφάνεια AI Δυνητικοί Πελάτες Έξυπνη Καταγραφή Δυνητικών Πελατών Εισιτήρια Υποστήριξης Κατηγορίες συνομιλιών Κρατήσεις Φωνητικός πράκτορας Ενσωματώσεις Εξαίρεση Σελίδων Αποκλεισμένες IPs Πολιτική διατήρησης Λειτουργία μηδενικής διατήρησης Απόκρυψη PII Ταξινομητής απαντήσεων Access Tags Καρφίτσωμα Έκδοσης Widget Αρχείο ελέγχου Προτάσεις Απάντησης Μηνύματα Παρακολούθησης Ομιλία σε Κείμενο Λήψη Μεταγραφής Ενσωματωμένη Συνομιλία Ενσωμάτωση με iframe

Αναφορά API

Δημιουργήστε προσαρμοσμένες ενσωματώσεις με το Asyntai REST API

Λήψη Κλειδιού API

Απαιτείται Επί Πληρωμή Πλάνο: Η πρόσβαση στο API είναι διαθέσιμη στα πλάνα Starter, Standard και Pro. Προβολή τιμών

Επισκόπηση

The Asyntai API allows you to integrate AI-powered customer support into any application. Send messages and receive intelligent responses grounded in your website content and knowledge base.

Ταυτοποίηση

All API requests require authentication using your API key. You can get your API key from the API Settings page.

Συμπεριλάβετε το κλειδί API σας στα αιτήματα χρησιμοποιώντας μία από αυτές τις μεθόδους:

  • Κεφαλίδα Authorization (συνιστάται): Authorization: Bearer YOUR_API_KEY
  • Κεφαλίδα X-API-Key: X-API-Key: YOUR_API_KEY

Κρατήστε το κλειδί API σας μυστικό. Όποιος έχει το κλειδί σας μπορεί να αποκτήσει πρόσβαση στον λογαριασμό σας μέσω του API. Μην το εκθέτετε ποτέ σε κώδικα από την πλευρά του πελάτη.

Βασικό URL

https://asyntai.com/api/v1/

Τελικά Σημεία

POST /chat/

Στείλτε ένα μήνυμα και λάβετε μια απάντηση που δημιουργήθηκε από AI.

Σώμα Αιτήματος

{
  "message": "What are your business hours?",
  "session_id": "user_123",      // optional
  "website_id": 1                 // optional
}
Παράμετρος Τύπος Απαιτούμενο Περιγραφή
message string Ναι Το μήνυμα του χρήστη για αποστολή στην τεχνητή νοημοσύνη
session_id string Όχι Μοναδικό αναγνωριστικό για τη συνομιλία. Χρησιμοποιήστε το ίδιο session_id για τη διατήρηση του ιστορικού συνομιλίας.
website_id integer Όχι Συγκεκριμένο ID ιστότοπου ή αφήστε κενό για χρήση του κύριου ιστότοπου

Απόκριση

{
  "success": true,
  "response": "Our business hours are Monday-Friday, 9 AM to 5 PM EST.",
  "session_id": "user_123"
}

Παράδειγμα (cURL)

curl -X POST https://asyntai.com/api/v1/chat/ \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"message": "What are your business hours?", "session_id": "user_123"}'

Παράδειγμα (Python)

import requests

response = requests.post(
    "https://asyntai.com/api/v1/chat/",
    headers={
        "Authorization": "Bearer YOUR_API_KEY",
        "Content-Type": "application/json"
    },
    json={
        "message": "What are your business hours?",
        "session_id": "user_123"
    }
)

data = response.json()
print(data["response"])

Παράδειγμα (JavaScript)

const response = await fetch("https://asyntai.com/api/v1/chat/", {
  method: "POST",
  headers: {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    message: "What are your business hours?",
    session_id: "user_123"
  })
});

const data = await response.json();
console.log(data.response);

GET /websites/

Λίστα όλων των ιστοσελίδων που συνδέονται με τον λογαριασμό σας.

Απόκριση

{
  "success": true,
  "websites": [
    {
      "id": 1,
      "name": "My Website",
      "domain": "example.com",
      "is_primary": true
    }
  ]
}

Παράδειγμα (cURL)

curl https://asyntai.com/api/v1/websites/ \
  -H "Authorization: Bearer YOUR_API_KEY"

POST /websites/

Create a new AI agent. This does the same thing as adding a website in your dashboard: it makes the agent, reads your site, and writes the first draft of the AI instructions.

Use this to set up customers from your own software. You get back the widget ID and the code to put on the website.

Σώμα Αιτήματος

Πεδίο Τύπος Περιγραφή
domain string Required. The website address, for example example.com
name string Optional. A display name for the agent. Useful when one website has several agents.
crawl boolean Optional, true by default. Set it to false to create the agent without reading the website. Nothing is crawled and no instructions are written.
force boolean Optional, false by default. Set it to true to add a website you already have. The copy is stored with a number after it.

Απόκριση

{
  "success": true,
  "website": {
    "id": 42,
    "domain": "example.com",
    "name": "Support agent",
    "widget_id": "asyntai_ab12cd34ef56",
    "is_primary": true,
    "crawl_started": true,
    "instructions_status": "generating",
    "job_id": "8f2c1e90-..."
  },
  "embed_code": "<script>...</script>"
}

Παράδειγμα (cURL)

curl -X POST https://asyntai.com/api/v1/websites/ \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"domain": "example.com", "name": "Support agent"}'

Reading a website takes a few minutes, so this call answers straight away. Check when the agent is ready with the next endpoint.

Errors

Code Meaning
403 You have reached the number of websites your plan allows. The answer tells you the limit.
409 Your account already has this website. Send force as true to add it again.

GET /websites/{id}/

Get one website and see whether it is ready. Use this after you create an agent, to wait until the website has been read and the AI instructions are written.

Απόκριση

{
  "success": true,
  "website": {
    "id": 42,
    "domain": "example.com",
    "name": "Support agent",
    "widget_id": "asyntai_ab12cd34ef56",
    "is_primary": true,
    "created_at": "2026-08-11T09:12:00+00:00",
    "ready": true,
    "instructions": {
      "status": "completed",
      "has_instructions": true,
      "characters": 3421
    },
    "crawl": {
      "job_id": "8f2c1e90-...",
      "status": "completed",
      "pages_crawled": 47,
      "pages_found": 50,
      "max_pages": 50,
      "completed_at": "2026-08-11T09:15:31+00:00",
      "error": ""
    },
    "knowledge_items": 47
  },
  "embed_code": "<script>...</script>"
}

The ready field is true when nothing is still running. A crawl that failed also counts as ready, because it has finished. Look at the crawl status to see what happened.

Παράδειγμα (cURL)

curl https://asyntai.com/api/v1/websites/42/ \
  -H "Authorization: Bearer YOUR_API_KEY"

GET PATCH /websites/{id}/settings/

Read or change the chat widget settings for one website. These are the same settings you see on the Customize page: colours, the name of the assistant, the first message, lead capture, and everything else.

Reading the settings

A GET request returns every setting with its current value, plus a locked list. Locked shows the settings your plan cannot change, and which plans they need.

{
  "success": true,
  "settings": {
    "ai_support_name": "AI Assistant",
    "widget_color": "#0B0D10",
    "initial_message": "Hi, how can I help you?",
    "hide_branding": false,
    "...": "..."
  },
  "locked": {
    "hide_branding": ["pro", "enterprise"],
    "widget_style": ["pro", "enterprise"]
  }
}

Changing the settings

A PATCH request changes only the settings you send. Everything you leave out stays as it is.

curl -X PATCH https://asyntai.com/api/v1/websites/42/settings/ \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"ai_support_name": "Ava", "widget_color": "#0f172a", "use_emoji": true}'
{
  "success": true,
  "updated": ["ai_support_name", "use_emoji", "widget_color"],
  "settings": { "...": "..." },
  "locked": { "...": "..." }
}

Plans

Each setting needs its own plan, the same as in the dashboard. For example, hiding the Asyntai branding needs the Pro plan, and voice input needs Standard.

Plan needed Ρυθμίσεις Examples
Any paid plan 25 widget_color, ai_support_name, initial_message
Starter και άνω 22 profile_picture, conversation_starters_enabled
Standard και άνω 25 speech_to_text_enabled, image_vision_enabled, escalation_enabled
Pro 6 hide_branding, widget_style

If you send a setting your plan does not allow, the whole request is refused with code 403 and nothing is saved. The same happens if any value is wrong, for example a colour that is not a hex code. Your settings never end up half changed.

GET PUT /websites/{id}/instructions/

Read or replace the AI instructions for one website. These are the rules that tell the assistant who it is, what it may say, and what it must not say. They are the same instructions you edit in the dashboard.

Reading

{
  "success": true,
  "instructions": "You are the support agent for Acme Tools...",
  "characters": 1979,
  "version": 7,
  "mode": "instructions",
  "ask_questions": true,
  "generation_status": "completed",
  "being_edited_by": null
}

Replacing

A PUT request replaces the whole text, the same as saving in the dashboard. There is no append mode. To add a paragraph, read the instructions, add your text, then write it back.

curl -X PUT https://asyntai.com/api/v1/websites/42/instructions/ \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"instructions": "You are the support agent for Acme Tools...", "version": 7}'

Σώμα Αιτήματος

Πεδίο Τύπος Περιγραφή
instructions string Required. The complete new text. It replaces everything that was there.
version number Optional but recommended. The version you read. If somebody changed the instructions since then, your write is refused instead of overwriting their work.
mode string Optional. Either instructions or general.
ask_questions boolean Optional. Whether the assistant asks a follow-up question at the end of its answers.
force boolean Optional, false by default. Needed only when your new text is less than half the length of the current text.

How your instructions are protected

Instructions can take hours to write, so a write can be refused to protect them:

Code Meaning
400 Your new text is less than half the length of the current text. This catches a script that sends empty or cut-off text over instructions somebody spent hours on. Send force as true if you meant it.
409 The instructions changed after you read them. Read them again, apply your change, then write.
423 Somebody is editing the instructions in the dashboard right now. The answer tells you who. Try again in a couple of minutes.

Every change also saves a copy of the previous text, so an earlier version can always be restored from the dashboard.

GET /conversations/

Ανάκτηση ιστορικού συνομιλίας για συγκεκριμένη συνεδρία.

Παράμετροι Ερωτήματος

Παράμετρος Τύπος Απαιτούμενο Περιγραφή
session_id string Ναι Το ID συνεδρίας για ανάκτηση ιστορικού
limit integer Όχι Μέγιστος αριθμός μηνυμάτων για επιστροφή (προεπιλογή: 50, μέγιστο: 100)

Απόκριση

{
  "success": true,
  "session_id": "user_123",
  "messages": [
    {
      "role": "user",
      "content": "What are your business hours?",
      "timestamp": "2024-01-15T10:30:00Z"
    },
    {
      "role": "assistant",
      "content": "Our business hours are Monday-Friday, 9 AM to 5 PM EST.",
      "timestamp": "2024-01-15T10:30:01Z",
      "sender_type": "ai",
      "agent_name": null,
      "response_time_ms": 1840.5
    }
  ]
}

Μια ερώτηση και η απάντησή της αποθηκεύονται σε μία εγγραφή, επομένως και οι δύο φέρουν το ίδιο timestamp. Μην αφαιρείτε το ένα από το άλλο για να μετρήσετε την ταχύτητα απάντησης, γιατί το αποτέλεσμα είναι πάντα μηδέν. Χρησιμοποιήστε το response_time_ms, που είναι ο πραγματικός χρόνος της απάντησης σε χιλιοστά του δευτερολέπτου.

Το sender_type είναι ai όταν απάντησε το chatbot και human όταν κάποιος από τους πράκτορές σας ανέλαβε τη συνομιλία. Το agent_name περιέχει το εμφανιζόμενο όνομα αυτού του πράκτορα.

Παράδειγμα (cURL)

curl "https://asyntai.com/api/v1/conversations/?session_id=user_123&limit=20" \
  -H "Authorization: Bearer YOUR_API_KEY"

GET /sessions/

Λίστα των πρόσφατων συνεδριών συνομιλίας σας. Χρησιμοποιήστε το για να ανακαλύψετε τα ID συνεδριών, τα οποία μπορείτε στη συνέχεια να περάσετε στο /conversations/ για ανάκτηση του πλήρους ιστορικού μηνυμάτων.

Παράμετροι Ερωτήματος

Παράμετρος Τύπος Απαιτούμενο Περιγραφή
limit integer Όχι Αριθμός πρόσφατων συνεδριών για επιστροφή (προεπιλογή: 20, μέγιστο: 100)
website_id string Όχι Φιλτράρισμα συνεδριών βάσει συγκεκριμένου ID ιστοσελίδας
source string Όχι Φιλτράρισμα ανά πηγή συνεδρίας: widget, api, whatsapp, instagram, messenger, gorgias, freshchat, zapier
since string Όχι Μόνο συνεδρίες των οποίων το τελευταίο μήνυμα είναι σε αυτή την ημερομηνία ISO ή μετά, για παράδειγμα 2024-01-15
before string Όχι Μόνο συνεδρίες των οποίων το τελευταίο μήνυμα είναι πριν από αυτή την ημερομηνία ή ημερομηνία και ώρα ISO. Χρησιμοποιήστε το για σελιδοποίηση προς τα πίσω, δείτε παρακάτω.

Απόκριση

{
  "success": true,
  "sessions": [
    {
      "session_id": "session_abc123def",
      "source": "widget",
      "message_count": 5,
      "first_message": "What are your business hours?",
      "first_message_at": "2024-01-15T10:30:00Z",
      "last_message_at": "2024-01-15T10:35:00Z",
      "first_response_time_ms": 1840.5,
      "first_human_response_at": null,
      "started_at": "2024-01-15T10:29:58Z",
      "ended_at": "2024-01-15T10:41:12Z",
      "taken_over_at": null,
      "page_url": "https://example.com/pricing",
      "country": "Germany",
      "category": "Pricing",
      "website_domain": "example.com"
    }
  ]
}

Πεδία χρονικών σημάτων για αναφορές

Πεδίο Περιγραφή
started_at Πότε ο επισκέπτης άνοιξε τη συνομιλία. Διαθέσιμο μόνο για συνεδρίες του widget, επειδή οι συνεδρίες που δημιουργούνται μέσω του API δεν ανοίγουν ποτέ widget.
first_message_at Πότε αποθηκεύτηκε το πρώτο μήνυμα της συνομιλίας.
first_response_time_ms Πόσο χρόνο χρειάστηκε η πρώτη απάντηση, σε χιλιοστά του δευτερολέπτου. Χρησιμοποιήστε το για τον χρόνο πρώτης απάντησης.
first_human_response_at Πότε κάποιος από τους πράκτορές σας έστειλε την πρώτη απάντηση. Η τιμή είναι null όταν το chatbot χειρίστηκε όλη τη συνομιλία.
taken_over_at Πότε ένας πράκτορας ανέλαβε τη συνομιλία από το chatbot.
last_message_at Πότε αποθηκεύτηκε το τελευταίο μήνυμα της συνομιλίας.
ended_at Πότε ο επισκέπτης έφυγε από τη συνομιλία. Μια συνομιλία δεν έχει κατάσταση επιλυμένη ή κλειστή, επειδή ο επισκέπτης μπορεί πάντα να επιστρέψει και να κάνει άλλη ερώτηση.

Όλα τα χρονικά σήματα είναι σε UTC και χρησιμοποιούν τη μορφή ISO 8601. Δεν μπορείτε να αλλάξετε τη ζώνη ώρας. Μετατρέψτε τις τιμές στο δικό σας εργαλείο αναφορών.

Άλλα πεδία για αναφορές

Πεδίο Περιγραφή
page_url Η σελίδα στην οποία βρισκόταν ο επισκέπτης όταν ξεκίνησε η συνομιλία. Διαθέσιμο μόνο για συνεδρίες του widget.
country Η χώρα του επισκέπτη, από τη διεύθυνση IP τη στιγμή της συνομιλίας. Διαθέσιμο μόνο για συνεδρίες του widget.
category Το θέμα από τις κατηγορίες συνομιλιών. Κενό όταν η λειτουργία είναι απενεργοποιημένη ή η ημερήσια εργασία δεν έχει ακόμη επισημάνει αυτή τη συνομιλία.

Παράδειγμα (cURL)

curl "https://asyntai.com/api/v1/sessions/?since=2024-01-01&limit=100" \
  -H "Authorization: Bearer YOUR_API_KEY"

Σελιδοποίηση στο ιστορικό

Μία κλήση επιστρέφει το πολύ 100 συνεδρίες, τις νεότερες πρώτα. Για να διαβάσετε πιο πίσω, πάρτε το last_message_at της τελευταίας συνεδρίας της σελίδας και περάστε το ως before στην επόμενη κλήση. Επαναλάβετε μέχρι μια κλήση να επιστρέψει κενή λίστα.

import requests

url = "https://asyntai.com/api/v1/sessions/"
headers = {"Authorization": "Bearer YOUR_API_KEY"}
params = {"since": "2024-01-01", "limit": 100}

sessions = []
while True:
    page = requests.get(url, headers=headers, params=params).json()["sessions"]
    if not page:
        break
    sessions.extend(page)
    params["before"] = page[-1]["last_message_at"]

print(len(sessions), "sessions since 2024-01-01")

GET /leads/

Ανάκτηση συλλεγμένων leads — διευθύνσεις email και αριθμοί τηλεφώνου που υποβλήθηκαν από επισκέπτες κατά τη διάρκεια συνομιλιών.

Παράμετροι Ερωτήματος

Παράμετρος Τύπος Απαιτούμενο Περιγραφή
limit integer Όχι Αριθμός leads προς επιστροφή (προεπιλογή: 50, μέγ: 100)
website_id string Όχι Φιλτράρισμα leads ανά συγκεκριμένο αναγνωριστικό ιστοσελίδας
since string Όχι Μόνο υποψήφιοι πελάτες που ξεκίνησαν σε αυτή την ημερομηνία ISO ή μετά, για παράδειγμα 2024-01-15
before string Όχι Μόνο υποψήφιοι πελάτες που ξεκίνησαν πριν από αυτή την ημερομηνία ή ώρα ISO. Χρησιμοποιήστε το για να μετακινηθείτε προς τα πίσω σε όλο το ιστορικό.

Απόκριση

{
  "success": true,
  "leads": [
    {
      "session_id": "session_abc123def",
      "email": "[email protected]",
      "phone": "+1234567890",
      "page_url": "https://example.com/pricing",
      "started_at": "2024-01-15T10:30:00Z"
    }
  ]
}
Πεδίο Τύπος Περιγραφή
session_id string Αναγνωριστικό συνεδρίας συνομιλίας. Περάστε το στο /conversations/ για να δείτε το πλήρες ιστορικό συνομιλίας.
email συμβολοσειρά ή null Διεύθυνση email που παρέχεται από τον επισκέπτη, ή null αν δεν συλλέχθηκε
phone συμβολοσειρά ή null Αριθμός τηλεφώνου που παρέχεται από τον επισκέπτη, ή null αν δεν συλλέχθηκε
page_url συμβολοσειρά ή null Η διεύθυνση URL της σελίδας όπου ο επισκέπτης συνομιλούσε
started_at string Χρονοσφραγίδα ISO 8601 της έναρξης της συνεδρίας συνομιλίας

Παράδειγμα (cURL)

curl "https://asyntai.com/api/v1/leads/?limit=20" \
  -H "Authorization: Bearer YOUR_API_KEY"

Παράδειγμα (Python)

import requests

response = requests.get(
    "https://asyntai.com/api/v1/leads/",
    headers={"Authorization": "Bearer YOUR_API_KEY"},
    params={"limit": 20}
)

leads = response.json()["leads"]
for lead in leads:
    print(f"{lead['email'] or ''} | {lead['phone'] or ''}")

GET /tickets/

Λάβετε αιτήματα υποστήριξης με τις χρονοσημάνσεις που χρειάζεστε για να μετρήσετε τους χρόνους χειρισμού: πότε έφτασε το αίτημα, πότε το ανέλαβε κάποιος, πότε απαντήθηκε για πρώτη φορά και πότε επιλύθηκε.

Παράμετροι Ερωτήματος

Παράμετρος Τύπος Απαιτούμενο Περιγραφή
limit integer Όχι Αριθμός αιτημάτων που επιστρέφονται (προεπιλογή: 50, μέγιστο: 100)
website_id string Όχι Φιλτράρισμα αιτημάτων κατά ID ιστότοπου ή κατά τομέα ιστότοπου, για παράδειγμα example.com
name string Όχι Φιλτράρισμα με οποιοδήποτε μέρος του ονόματος του επισκέπτη, για παράδειγμα anna
status string Όχι Φιλτράρισμα κατά κατάσταση: open, in_progress, resolved ή closed
since string Όχι Μόνο αιτήματα που δημιουργήθηκαν σε αυτή την ημερομηνία ISO ή αργότερα, για παράδειγμα 2024-01-15
before string Όχι Μόνο αιτήματα που δημιουργήθηκαν πριν από αυτή την ημερομηνία ή ημερομηνία και ώρα ISO. Χρησιμοποιήστε το για σελιδοποίηση προς τα πίσω, δείτε παρακάτω.

Απόκριση

{
  "success": true,
  "tickets": [
    {
      "ticket_number": "TKT-00001",
      "session_id": "session_abc123def",
      "status": "resolved",
      "priority": "medium",
      "subject": "Cannot complete checkout",
      "visitor_email": "[email protected]",
      "visitor_name": "Anna Novak",
      "page_url": "https://example.com/checkout",
      "website_id": 12,
      "channel": "session",
      "assigned_to": "[email protected]",
      "created_at": "2024-01-15T10:30:00Z",
      "first_assigned_at": "2024-01-15T10:41:00Z",
      "first_response_at": "2024-01-15T11:02:00Z",
      "resolved_at": "2024-01-15T12:20:00Z"
    }
  ]
}
Πεδίο Τύπος Περιγραφή
ticket_number string Ο αριθμός αιτήματος που εμφανίζεται στον πίνακά σας
session_id string Η συνεδρία συνομιλίας από την οποία προέκυψε το αίτημα. Δώστε τη στο /conversations/ για να διαβάσετε όλη τη συνομιλία πίσω από το αίτημα.
visitor_name συμβολοσειρά ή null Το όνομα του επισκέπτη ή null αν ο επισκέπτης δεν έδωσε όνομα
status string Ένα από: open, in_progress, resolved, closed
priority string Ένα από: low, medium, high
channel string Από πού έφτασε η συνομιλία, για παράδειγμα session για τη συνομιλία στον ιστότοπο
assigned_to συμβολοσειρά ή null Το μέλος της ομάδας που έχει το αίτημα, ή null αν δεν το ανέλαβε κανείς
created_at string Πότε δημιουργήθηκε το αίτημα
first_assigned_at συμβολοσειρά ή null Πότε το ανέλαβε κάποιος για πρώτη φορά. Null αν δεν το ανέλαβε κανείς.
first_response_at συμβολοσειρά ή null Πότε στάλθηκε η πρώτη απάντηση από το Asyntai. Null αν δεν στάλθηκε απάντηση από το Asyntai.
resolved_at συμβολοσειρά ή null Πότε το αίτημα σημειώθηκε ως επιλυμένο. Null όσο παραμένει ανοιχτό.

Βλέπουμε μόνο τις απαντήσεις που στάλθηκαν από το Asyntai. Αν η ομάδα σας απαντήσει σε επισκέπτη από το δικό της γραμματοκιβώτιο, δεν το βλέπουμε ποτέ και το first_response_at μένει κενό, παρότι ο επισκέπτης έλαβε απάντηση. Λάβετέ το υπόψη πριν βγάλετε μέσους όρους.

Όλες οι χρονοσημάνσεις είναι σε UTC και χρησιμοποιούν τη μορφή ISO 8601. Τα αιτήματα που δημιουργήθηκαν πριν από αυτή τη λειτουργία δεν έχουν first_assigned_at ούτε first_response_at, επειδή αυτοί οι χρόνοι δεν καταγράφηκαν ποτέ.

Παράδειγμα (cURL)

curl "https://asyntai.com/api/v1/tickets/?status=resolved&limit=20" \
  -H "Authorization: Bearer YOUR_API_KEY"

Παράδειγμα (Python)

import requests
from datetime import datetime

response = requests.get(
    "https://asyntai.com/api/v1/tickets/",
    headers={"Authorization": "Bearer YOUR_API_KEY"},
    params={"since": "2024-01-01", "limit": 100}
)

for ticket in response.json()["tickets"]:
    if ticket["first_response_at"]:
        created = datetime.fromisoformat(ticket["created_at"])
        replied = datetime.fromisoformat(ticket["first_response_at"])
        print(ticket["ticket_number"], replied - created)

Σελιδοποίηση στο ιστορικό

Μία κλήση επιστρέφει το πολύ 100 αιτήματα, τα νεότερα πρώτα. Για να διαβάσετε πιο πίσω, πάρτε το created_at του τελευταίου αιτήματος της σελίδας και περάστε το ως before στην επόμενη κλήση. Επαναλάβετε μέχρι μια κλήση να επιστρέψει κενή λίστα.

import requests

url = "https://asyntai.com/api/v1/tickets/"
headers = {"Authorization": "Bearer YOUR_API_KEY"}
params = {"since": "2024-01-01", "limit": 100}

tickets = []
while True:
    page = requests.get(url, headers=headers, params=params).json()["tickets"]
    if not page:
        break
    tickets.extend(page)
    params["before"] = page[-1]["created_at"]

print(len(tickets), "tickets since 2024-01-01")

GET /account/

Λάβετε τις πληροφορίες λογαριασμού σας και στατιστικά χρήσης.

Απόκριση

{
  "success": true,
  "account": {
    "email": "[email protected]",
    "plan": "starter",
    "messages_used": 150,
    "messages_limit": 800
  }
}

Παράδειγμα (cURL)

curl https://asyntai.com/api/v1/account/ \
  -H "Authorization: Bearer YOUR_API_KEY"

Πολλαπλές ιστοσελίδες; Τα τελικά σημεία βάσης γνώσεων προεπιλέγουν την κύρια ιστοσελίδα σας. Αν έχετε πολλαπλές ιστοσελίδες, περάστε website_id για να στοχεύσετε έναν συγκεκριμένο. Μπορείτε να βρείτε τα αναγνωριστικά ιστότοπου χρησιμοποιώντας GET /websites/.

Ημερήσια όρια μεταφόρτωσης: Οι μεταφορτώσεις βάσης γνώσεων (κείμενο, URL, υπολογιστικό φύλλο) υπόκεινται σε ημερήσιο όριο χαρακτήρων βάσει του πλάνου σας. Αυτό ισχύει για το συνολικό περιεχόμενο που μεταφορτώνεται σε όλα τα τελικά σημεία βάσης γνώσεων ανά ημέρα.

Πλάνο Χαρακτήρες/ημέρα
Starter300.000
Standard1.500.000
Pro6.000.000

GET /knowledge/

Λίστα των καταχωρήσεων βάσης γνώσεων σας. Αυτές είναι οι πηγές περιεχομένου που χρησιμοποιεί το chatbot τεχνητής νοημοσύνης σας για να απαντά σε ερωτήσεις.

Παράμετροι Ερωτήματος

Παράμετρος Τύπος Απαιτούμενο Περιγραφή
limit integer Όχι Αριθμός καταχωρήσεων για επιστροφή (προεπιλογή: 50, μέγιστο: 100)
website_id string Όχι Φιλτράρισμα βάσει ID ιστοσελίδας (προεπιλογή στην κύρια ιστοσελίδα σας)

Απόκριση

{
  "success": true,
  "entries": [
    {
      "id": "abc-123-def",
      "type": "text",
      "title": "Business Hours",
      "description": "Manual text content (150 words)",
      "created_at": "2024-01-15T10:30:00Z"
    },
    {
      "id": "ghi-456-jkl",
      "type": "url",
      "title": "About Us - Example",
      "description": "Content from https://example.com/about",
      "created_at": "2024-01-14T09:00:00Z"
    }
  ]
}

Παράδειγμα (cURL)

curl "https://asyntai.com/api/v1/knowledge/?limit=10" \
  -H "Authorization: Bearer YOUR_API_KEY"

POST /knowledge/text/

Προσθέστε προσαρμοσμένο περιεχόμενο κειμένου στη βάση γνώσεων σας. Η τεχνητή νοημοσύνη θα το χρησιμοποιήσει για να απαντά στις ερωτήσεις των επισκεπτών.

Σώμα Αιτήματος

{
  "title": "Return Policy",
  "content": "We offer a 30-day return policy on all items. Items must be unused and in original packaging. Refunds are processed within 5-7 business days.",
  "website_id": "123"
}
Παράμετρος Τύπος Απαιτούμενο Περιγραφή
title string Ναι Τίτλος για αυτή την καταχώρηση γνώσης
content string Ναι Το περιεχόμενο κειμένου (ελάχιστο 10 χαρακτήρες)
website_id string Όχι Ιστοσελίδα στόχος (προεπιλογή στην κύρια ιστοσελίδα σας)

Απόκριση

{
  "success": true,
  "id": "abc-123-def",
  "title": "Return Policy",
  "chunks_created": 1
}

Παράδειγμα (cURL)

curl -X POST "https://asyntai.com/api/v1/knowledge/text/" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"title": "Return Policy", "content": "We offer a 30-day return policy..."}'

POST /knowledge/url/

Προσθέστε μια ιστοσελίδα στη βάση γνώσεων σας. Το περιεχόμενο θα ανακτηθεί και θα εξαχθεί αυτόματα.

Σώμα Αιτήματος

{
  "url": "https://example.com/faq",
  "website_id": "123"
}
Παράμετρος Τύπος Απαιτούμενο Περιγραφή
url string Ναι Το URL από το οποίο θα ανακτηθεί το περιεχόμενο
website_id string Όχι Ιστοσελίδα στόχος (προεπιλογή στην κύρια ιστοσελίδα σας)

Απόκριση

{
  "success": true,
  "id": "abc-123-def",
  "title": "FAQ - Example",
  "url": "https://example.com/faq",
  "chunks_created": 5
}

Παράδειγμα (cURL)

curl -X POST "https://asyntai.com/api/v1/knowledge/url/" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com/faq"}'

POST /knowledge/spreadsheet/

Μεταφορτώστε ένα υπολογιστικό φύλλο CSV ή Excel (.xlsx) στη βάση γνώσεων σας. Κάθε γραμμή γίνεται ξεχωριστή καταχώρηση γνώσης, ιδανικό για καταλόγους προϊόντων, λίστες FAQ, πίνακες τιμολόγησης και καταλόγους.

Αίτημα

Αποστολή ως multipart/form-data (μεταφόρτωση αρχείου), όχι JSON.

Παράμετρος Τύπος Απαιτούμενο Περιγραφή
file αρχείο Ναι Ένα αρχείο .csv ή .xlsx. Η πρώτη γραμμή πρέπει να είναι κεφαλίδες στηλών. Μέγιστες γραμμές ανά μεταφόρτωση: Starter 500, Standard 2.000, Pro 10.000. Οι επιπλέον γραμμές αποκόπτονται.
website_id string Όχι Ιστοσελίδα στόχος (προεπιλογή στην κύρια ιστοσελίδα σας)

Απόκριση

{
  "success": true,
  "id": "abc-123-def",
  "title": "products.csv",
  "rows_processed": 15,
  "chunks_created": 15
}

Παράδειγμα (cURL)

curl -X POST "https://asyntai.com/api/v1/knowledge/spreadsheet/" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "[email protected]"

GET /knowledge/{id}/

Διαβάστε μία καταχώριση της βάσης γνώσεων, μαζί με το κείμενο που είναι αποθηκευμένο για αυτήν. Το id προέρχεται από την απόκριση του GET /knowledge/.

Το περιεχόμενο επιστρέφεται για τις καταχωρίσεις που προσθέσατε εσείς: κείμενο, αρχεία, υπολογιστικά φύλλα, μεμονωμένες διευθύνσεις URL και βίντεο. Η σάρωση ιστότοπου εμφανίζεται στη λίστα, αλλά οι σελίδες της δεν επιστρέφονται, επειδή η πηγή είναι ο δικός σας δημόσιος ιστότοπος. Σε αυτήν την περίπτωση το content είναι null και το πεδίο reason εξηγεί τον λόγο.

Απόκριση

{
  "success": true,
  "id": "abc-123-def",
  "type": "text",
  "title": "Business Hours",
  "description": "Manual text content (150 words)",
  "created_at": "2024-01-15T10:30:00Z",
  "chunks_count": 3,
  "content": "We are open Monday to Friday, 9am to 5pm...",
  "content_available": true,
  "char_count": 43
}

Παράδειγμα (cURL)

curl "https://asyntai.com/api/v1/knowledge/abc-123-def/" \
  -H "Authorization: Bearer YOUR_API_KEY"

DELETE /knowledge/{id}/

Διαγράψτε μια καταχώρηση βάσης γνώσεων. Το id μπορεί να βρεθεί από την απόκριση GET /knowledge/.

Απόκριση

{
  "success": true,
  "message": "Knowledge base entry deleted"
}

Παράδειγμα (cURL)

curl -X DELETE "https://asyntai.com/api/v1/knowledge/abc-123-def/" \
  -H "Authorization: Bearer YOUR_API_KEY"

Συμβουλή: Μπορείτε επίσης να διαχειριστείτε webhooks από τη Ρυθμίσεις API σελίδα χωρίς να γράψετε κώδικα.

GET /webhooks/

Λίστα των καταχωρημένων webhooks σας.

Απόκριση

{
  "success": true,
  "webhooks": [
    {
      "id": "abc-123-def",
      "url": "https://example.com/webhook",
      "events": ["message.received", "escalation.requested"],
      "is_active": true,
      "created_at": "2024-01-15T10:30:00Z"
    }
  ]
}

Παράδειγμα (cURL)

curl "https://asyntai.com/api/v1/webhooks/" \
  -H "Authorization: Bearer YOUR_API_KEY"

POST /webhooks/

Καταχωρήστε ένα νέο webhook για να λαμβάνετε ειδοποιήσεις συμβάντων σε πραγματικό χρόνο.

Διαθέσιμα Συμβάντα

Συμβάν Περιγραφή
message.received Ένας επισκέπτης έστειλε ένα μήνυμα και έλαβε απόκριση
conversation.started Ξεκίνησε μια νέα συνεδρία συνομιλίας
escalation.requested Η τεχνητή νοημοσύνη εκκίνησε κλιμάκωση σε ανθρώπινο εκπρόσωπο
takeover.started Ένας ανθρώπινος εκπρόσωπος ανέλαβε μια συνεδρία συνομιλίας

Σώμα Αιτήματος

{
  "url": "https://example.com/webhook",
  "events": ["message.received", "escalation.requested"],
  "website_id": "123"
}
Παράμετρος Τύπος Απαιτούμενο Περιγραφή
url string Ναι Το HTTPS URL για λήψη αιτημάτων POST webhook
events array Ναι Λίστα συμβάντων για εγγραφή (βλ. πίνακα παραπάνω)
website_id string Όχι Ιστοσελίδα στόχος (προεπιλογή στην κύρια ιστοσελίδα σας)

Απόκριση

{
  "success": true,
  "webhook": {
    "id": "abc-123-def",
    "url": "https://example.com/webhook",
    "events": ["message.received", "escalation.requested"],
    "secret": "whsec_abc123...",
    "created_at": "2024-01-15T10:30:00Z"
  }
}

Επαλήθευση webhooks: Κάθε webhook περιλαμβάνει ένα secret (εμφανίζεται μόνο κατά τη δημιουργία). Κάθε POST στο URL σας περιλαμβάνει ένα X-Webhook-Signature header — ένα HMAC-SHA256 του σώματος αιτήματος υπογεγραμμένο με το μυστικό σας.

Παράδειγμα (cURL)

curl -X POST "https://asyntai.com/api/v1/webhooks/" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com/webhook", "events": ["message.received"]}'

DELETE /webhooks/{id}/

Διαγράψτε ένα webhook. Το id μπορεί να βρεθεί από την απόκριση GET /webhooks/.

Απόκριση

{
  "success": true,
  "message": "Webhook deleted"
}

Παράδειγμα (cURL)

curl -X DELETE "https://asyntai.com/api/v1/webhooks/abc-123-def/" \
  -H "Authorization: Bearer YOUR_API_KEY"

Αποκρίσεις Σφαλμάτων

Όλες οι αποκρίσεις σφαλμάτων ακολουθούν αυτή τη μορφή:

{
  "success": false,
  "error": "Error message describing what went wrong"
}
Κωδικός Κατάστασης Περιγραφή
400 Κακό Αίτημα - Μη έγκυρες παράμετροι ή απουσία απαιτούμενων πεδίων
401 Μη εξουσιοδοτημένο - Μη έγκυρο ή απόν κλειδί API
429 Πολλά Αιτήματα - Συμπληρώθηκε το όριο μηνυμάτων του πλάνου σας
503 Υπηρεσία Μη Διαθέσιμη - Η υπηρεσία AI είναι προσωρινά μη διαθέσιμη

Όρια Ρυθμού

Η χρήση API περιορίζεται από το πλάνο συνδρομής σας:

  • Δωρεάν: 50 μηνύματα/μήνα
  • Starter ($39/μήνα): 800 μηνύματα/μήνα
  • Standard ($139/μήνα): 15.000 μηνύματα/μήνα
  • Pro ($449/μήνα): 50.000 μηνύματα/μήνα

Χρειάζεστε Βοήθεια;

If you have any questions or run into issues, contact us at [email protected].