Webhook-Modus
Der GPTBots-Agent unterstützt aktuell drei Modi für Nachrichtenantworten: blocking, streaming und webhook. Wenn Entwickler:innen den webhook-Modus nutzen, um Antwortnachrichten zu empfangen, werden sowohl KI-Antworten als auch Menschliche Antworten an die angegebene Webhook-URL übermittelt.
| Antwortmodus | Unterstützte Nachrichtentypen |
|---|---|
| blocking | KI-Antworten |
| streaming | KI-Antworten |
| webhook | Menschliche Antworten, KI-Antworten |
Nachrichtenversand-API übermittelt Antwortnachrichten an den Webhook
Anfragemethode
POST
Endpoint
Bitte konfigurieren Sie Ihre Empfangsadresse für Nachrichten auf der Seite Agent – Integration – API – Webhook.
Authentifizierung
Es werden zwei Authentifizierungsmethoden unterstützt: Basic-Authentifizierung und Bearer-Authentifizierung. Entwickler:innen können die für ihre Situation passende Methode wählen und auf der Seite Agent – Integration – API – Webhook konfigurieren.
- Wenn Entwickler:innen bei der Integration einer Webhook-Adresse nur den
Webhook-Benutzernamenausfüllen, verwendet GPTBots beim Senden von Anfragen an die Webhook-URL der Entwickler:innen standardmäßig die Bearer-Authentifizierung, wobei der Wert demWebhook-Benutzernamenentspricht. - Wenn Entwickler:innen bei der Integration einer Webhook-Adresse sowohl den
Webhook-Benutzernamenals auch dasWebhook-Geheimnisausfüllen, verwendet GPTBots beim Senden von Anfragen die Basic-Authentifizierung, wobei der Benutzername demWebhook-Benutzernamenund das Passwort demWebhook-Geheimnisentspricht.
Beispielanfrage
curl -X POST 'IHRE_API_URL' \
-H 'Authorization: Bearer ${API Key}' \
-H 'Content-Type: application/json' \
-d '{
"create_time": 1679587005,
"user_id": "65a4ccfc7ce58e728d5897e0",
"anonymous_id": "device_abcdef123456",
"conversation_id": "657303a8a764d47094874bbe",
"message_id": "65a4ccfC7ce58e728d5897e0",
"output": [
{
"from_component_branch": "1",
"from_component_name": "Komponentenname",
"content": {
"text": "Hallo, kann ich Ihnen irgendwie helfen?",
"audio": [
{
"audio": "http://gptbots.ai/example.mp3",
"transcript": "Der transkribierte Inhalt der Audiodatei"
}
]
}
}
],
"usage": {
"tokens": {
"total_tokens": 29,
"prompt_tokens": 19,
"prompt_tokens_details":
{
"audio_tokens": 0,
"text_tokens":0
},
"completion_tokens": 10,
"completion_tokens_details":
{
"reasoning_tokens": 0,
"audio_tokens": 0,
"text_tokens": 0
}
},
"credits": {
"total_credits":0.0, //prompt + completion
"text_input_credits": 0.0,
"text_output_credits": 0.0,
"audio_input_credits": 0.0,
"audio_output_credits": 0.0
}
}
}'
Anfrage-Body
| Feld | Typ | Beschreibung |
|---|---|---|
| user_id | string | Die vom Entwickler gebundene Nutzer:innen-ID; null, wenn kein:e Nutzer:in gebunden ist. |
| anonymous_id | string | Anonyme Nutzer:innen-ID (Geräte-ID). |
| conversation_id | string | Eindeutige Kennung der Konversation. |
| message_id | string | Eindeutige Kennung einer bestimmten Nachricht innerhalb einer Konversation. |
| create_time | long | Zeitstempel, zu dem die Nachricht generiert wurde. |
| output | JSON-Array | Antwortinhalt des KI-Agenten. |
| from_component_branch | string | FlowAgent-Branch. |
| from_component_name | string | Name der vorgelagerten Komponente im FlowAgent. |
| content | object | Antwortnachricht des KI-Agenten; aktuell werden die Nachrichtentypen „Text“ und „Audio“ unterstützt. |
| usage | object | Verbrauchsdaten. |
| tokens | JSON-Array | Gesamtzahl der vom Agent in dieser Konversation verbrauchten Tokens. |
| total_tokens | integer | Gesamtzahl der verbrauchten Tokens für Eingabe + Ausgabe in dieser Konversation. |
| prompt_tokens | integer | Gesamtzahl der für die Eingabe verbrauchten Tokens in dieser Konversation. |
| completion_tokens | integer | Gesamtzahl der für die Ausgabe verbrauchten Tokens in dieser Konversation. |
| prompt_tokens_details | object | Details zum Tokenverbrauch für die Eingabe in dieser Konversation. |
| completion_tokens_details | object | Details zum Tokenverbrauch für die Ausgabe in dieser Konversation. |
| credits | object | Insgesamt vom Agent in dieser Konversation verbrauchte Credits. |
| text_input_credits | double | Verwendete Credits für Texteingaben in dieser Konversation. |
| text_output_credits | double | Verwendete Credits für Textausgaben in dieser Konversation. |
| audio_input_credits | double | Verwendete Credits für Audioeingaben in dieser Konversation. |
| audio_output_credits | double | Verwendete Credits für Audioausgaben in dieser Konversation. |
Antwortspezifikation
Nachdem der Webhook-Service der Entwickler:innen die Nachricht erfolgreich empfangen hat, muss er den HTTP-Statuscode
200und im Response-Body einen JSON-Erfolgsindikator zurückgeben.
{
"code": 200,
"msg": "success"
}
GPTBots Webhook-Servicestatus-Erkennung
GPTBots stellt eine Health-Check-Schnittstelle zur Erkennung seines eigenen Webhook-Dienstes bereit. Entwickler:innen können sie aufrufen, um zu prüfen, ob der Webhook-Dienst von GPTBots verfügbar ist. Wenn die Schnittstelle den HTTP-Statuscode 200 zurückgibt und der Response-Body der Klartext-Indikator für einen normalen Service ist (z. B. service is normal), ist der Webhook-Dienst von GPTBots verfügbar. Diese Schnittstelle erfordert keine Authentifizierung und gibt Klartext zurück.
Anfrage-Methode
GET
Endpoint
https://api.gptbots.ai/v1/webhook/service/health
Beispielanfrage
curl -X GET 'https://api.gptbots.ai/v1/webhook/service/health'
Antwort
Wenn der GPTBots-Service verfügbar ist, gibt er den HTTP-Statuscode 200 und im Response-Body einen Klartext-Indikator für einen normalen Service zurück.
service is normal
Empfehlung zur Verfügbarkeitsbewertung
Der Aufrufer muss lediglich den HTTP-Statuscode als Kriterium verwenden:
| Situation | Entscheidung |
|---|---|
Gibt 200 zurück und der Body lautet service is normal |
GPTBots-Service ist verfügbar |
Gibt nicht 200 zurück (z. B. 5xx) / Anfrage-Timeout / Verbindungsfehler |
GPTBots-Service ist nicht verfügbar |
Es wird empfohlen, ein angemessenes Anfrage-Timeout festzulegen (z. B. 3–5 Sekunden) und mit einer festen Frequenz abzufragen (QPM:3). Diese Schnittstelle erfordert keine Authentifizierung; es ist kein API-Key erforderlich.
