User Tools

Site Tools


fonio

This is an old revision of the document!


Fonio API Dokumentation

Willkommen bei der Fonio API für ET360. Diese Dokumentation beschreibt, wie Sie als Kunde über Fonio mit unserem Server kommunizieren können.

Einführung

Die Fonio API ermöglicht es Ihnen, als KI-Sprachassistent mit unserem ET360-System zu interagieren. Sie können:

* Fallinformationen abfragen - Holen Sie sich Details zu Fahrzeugen über das Kennzeichen * Anrufdaten übermitteln - Senden Sie Transkripte und Kontextdaten von Telefonkonversationen * Fallzuordnung durchführen - Verknüpfen Sie Anrufe mit bestehenden Fällen im System

Authentifizierung

Alle API-Endpunkte verwenden Basic Authentication. Sie benötigen einen API-Hash, der Ihnen von ET360 bereitgestellt wurde.

Header-Informationen

Fügen Sie diesen Header zu allen Ihren API-Anfragen hinzu:

Authorization: Basic <Ihr-API-Hash>
Content-Type: application/json

Der Parametername für die Authentifizierung ist: PHONE_FONIO_INCOMING_REQUEST_HASH

API-Endpunkte

1. Fallinformationen nach Kennzeichen abfragen

Endpunkt: GET /ai/fonio/case-information-by-license-plate/{kennzeichen}

Beschreibung: Rufen Sie Informationen zu einem Fall ab, indem Sie das Fahrzeugkennzeichen angeben.

URL-Parameter:

Parameter Typ Beschreibung Beispiel
kennzeichen String Das deutsche Kfz-Kennzeichen (mit oder ohne Sonderzeichen) MTK-C-72, MTK C 72, MTK:C:72

Beispielanfrage: <url>GET https://your-server.com/ai/fonio/case-information-by-license-plate/MTK-C-72</url>

Beispielantwort: <json> {

"type": "object",
"properties": {
  "LicensePlate": {
    "type": "string",
    "description": "Nummernschild des Fahrzeuges",
    "value": "MTK C 72"
  },
  "Location": {
    "type": "string",
    "description": "Standort des Fahrzeugs",
    "value": "Frankfurt am Main"
  },
  "OpeningHours": {
    "type": "string",
    "description": "Öffnungszeiten der Filiale",
    "value": "Mo-Fr 08:00-18:00"
  },
  "Price": {
    "type": "string",
    "description": "Preis für den Service",
    "value": "€150,00"
  },
  "DriverName": {
    "type": "string",
    "description": "Name des zugewiesenen Fahrers",
    "value": "Max Mustermann"
  },
  "DriverETA": {
    "type": "string",
    "description": "Geschätzte Ankunftszeit des Fahrers",
    "value": "15 Minuten"
  },
  "DriverDistance": {
    "type": "string",
    "description": "Entfernung des Fahrers zum Fahrzeug",
    "value": "5 km"
  }
}

} </json>

Hinweise: * Das Kennzeichen kann mit oder ohne Sonderzeichen (-, :, Leerzeichen) übermittelt werden * Die API normalisiert das Kennzeichen automatisch * Wenn kein Fall gefunden wird, wird null zurückgegeben

2. Anrufdaten übermitteln

Endpunkt: PATCH /ai/fonio/cases-by-phonenumber

Beschreibung: Senden Sie Transkripte und Metadaten von Telefonkonversationen. Das System versucht automatisch, den Anruf mit einem bestehenden Fall über die Telefonnummer zu verknüpfen.

HTTP-Methode: PATCH

Content-Type: application/json

Anfrage-Body:

<json> {

"summary": "Kurze Zusammenfassung des Anrufs",
"fromNumber": "+491234567890",
"toNumber": "+499876543210",
"direction": "inbound",
"duration": 120,
"startTimestamp": "2024-01-15T10:30:00Z",
"endTimestamp": "2024-01-15T10:32:00Z",
"audioLink": "https://example.com/audio-recording.mp3",
"transcript": [
  {
    "id": "msg-001",
    "index": 0,
    "role": "user",
    "content": "Guten Tag, ich benötige Hilfe mit meinem Fahrzeug",
    "createdAt": "2024-01-15T10:30:15Z"
  },
  {
    "id": "msg-002",
    "index": 1,
    "role": "assistant",
    "content": "Gerne helfe ich Ihnen. Was ist Ihr Fahrzeugkennzeichen?",
    "createdAt": "2024-01-15T10:30:20Z"
  },
  {
    "id": "msg-003",
    "index": 2,
    "role": "user",
    "content": "Das Kennzeichen ist MTK C 72",
    "createdAt": "2024-01-15T10:30:35Z"
  }
],
"context": {
  "Name": "Max Mustermann",
  "LicensePlate": "MTK C 72",
  "Summary": "Kunde fordert Abschleppservice für beschädigtes Fahrzeug"
},
"disconnectReason": "Call completed successfully"

} </json>

Feldbeschreibungen:

Feld Typ Erforderlich Beschreibung
summary String Nein KI-generierte Zusammenfassung des Anrufs
fromNumber String Ja Telefonnummer des Anrufers (E.164-Format)
toNumber String Ja Telefonnummer des Empfängers (E.164-Format)
direction String Ja “inbound” (eingehend) oder “outbound” (ausgehend)
duration Integer Ja Anrufdauer in Sekunden
startTimestamp String Ja Anrufstartzeit (ISO 8601 Format)
endTimestamp String Ja Anrufendzeit (ISO 8601 Format)
audioLink String Nein URL zur Audioaufnahme
transcript Array Ja Zeitgestempelte Konversationstranskripte
transcript[].id String Ja Eindeutige Nachrichten-ID
transcript[].index Integer Ja Nachrichten-Sequenznummer
transcript[].role String Ja “user” oder “assistant”
transcript[].content String Ja Nachrichtentext
transcript[].createdAt String Ja Zeitstempel (ISO 8601)
context Object Nein Extrahierte strukturierte Daten
context.Name String Nein Kundenname
context.LicensePlate String Nein Fahrzeugkennzeichen
context.Summary String Nein Zusammenfassung
disconnectReason String Nein Grund für Anrufbeendigung

Beispielantwort:

Bei erfolgreicher Verarbeitung wird die Anfrage akzeptiert (HTTP 200). Das System: 1. Sucht nach einem passenden Fall basierend auf der Telefonnummer 2. Verknüpft die Anrufdaten mit dem gefundenen Fall 3. Speichert Transkript und Kontextinformationen

Fehlerantworten:

HTTP-Status Beschreibung
401 Authentifizierung fehlgeschlagen - Überprüfen Sie Ihren API-Hash
400 Ungültiges Anfrageformat - Überprüfen Sie die JSON-Struktur
404 Kein passender Fall gefunden - Die Telefonnummer ist nicht im System
500 Serverfehler - Bitte kontaktieren Sie den Support
Telefonnummern-Formatierung

Alle Telefonnummern sollten im E.164-Format übermittelt werden:

+491234567890
+49 123 4567890

Das System akzeptiert verschiedene Formate und normalisiert sie automatisch: * +491234567890 ✓ * +49 123 4567890 ✓ * 0123 4567890 ✓ (wird automatisch konvertiert)

Beispiel-Implementierung

cURL Beispiel

# Fallinformationen abfragen
curl -X GET \
  https://your-server.com/ai/fonio/case-information-by-license-plate/MTK-C-72 \
  -H "Authorization: Basic your-api-hash" \
  -H "Content-Type: application/json"

# Anrufdaten übermitteln
curl -X PATCH \
  https://your-server.com/ai/fonio/cases-by-phonenumber \
  -H "Authorization: Basic your-api-hash" \
  -H "Content-Type: application/json" \
  -d '{
    "fromNumber": "+491234567890",
    "toNumber": "+499876543210",
    "direction": "inbound",
    "duration": 120,
    "startTimestamp": "2024-01-15T10:30:00Z",
    "endTimestamp": "2024-01-15T10:32:00Z",
    "transcript": [
      {
        "id": "msg-001",
        "index": 0,
        "role": "user",
        "content": "Ich brauche Hilfe",
        "createdAt": "2024-01-15T10:30:15Z"
      }
    ],
    "context": {
      "Name": "Max Mustermann",
      "LicensePlate": "MTK C 72"
    }
  }'

Python Beispiel

<python> import requests import json

# Konfiguration BASE_URL = “https://your-server.comAPI_HASH = “your-api-hash”

headers = {

  "Authorization": f"Basic {API_HASH}",
  "Content-Type": "application/json"

}

# Fallinformationen abfragen def get_case_by_license_plate(license_plate):

  url = f"{BASE_URL}/ai/fonio/case-information-by-license-plate/{license_plate}"
  response = requests.get(url, headers=headers)
  return response.json()

# Anrufdaten übermitteln def submit_call_data(call_data):

  url = f"{BASE_URL}/ai/fonio/cases-by-phonenumber"
  response = requests.patch(url, headers=headers, json=call_data)
  return response.status_code

# Beispielverwendung if name == “main”:

  # Fall abfragen
  result = get_case_by_license_plate("MTK-C-72")
  print(json.dumps(result, indent=2))
  
  # Anrufdaten senden
  call_data = {
      "fromNumber": "+491234567890",
      "toNumber": "+499876543210",
      "direction": "inbound",
      "duration": 120,
      "startTimestamp": "2024-01-15T10:30:00Z",
      "endTimestamp": "2024-01-15T10:32:00Z",
      "transcript": [
          {
              "id": "msg-001",
              "index": 0,
              "role": "user",
              "content": "Guten Tag",
              "createdAt": "2024-01-15T10:30:15Z"
          }
      ],
      "context": {
          "Name": "Max Mustermann",
          "LicensePlate": "MTK C 72"
      }
  }
  
  status = submit_call_data(call_data)
  print(f"Status: {status}")

</python>

JavaScript/Node.js Beispiel

<javascript> const axios = require('axios');

const BASE_URL = 'https://your-server.com'; const API_HASH = 'your-api-hash';

const headers = {

  'Authorization': `Basic ${API_HASH}`,
  'Content-Type': 'application/json'

};

Fallinformationen abfragen async function getCaseByLicensePlate(licensePlate) { const response = await axios.get( `${BASE_URL}/ai/fonio/case-information-by-license-plate/${licensePlate}`, { headers } ); return response.data; } Anrufdaten übermitteln async function submitCallData(callData) {

  const response = await axios.patch(
      `${BASE_URL}/ai/fonio/cases-by-phonenumber`,
      callData,
      { headers }
  );
  return response.status;

}

Beispielverwendung (async () ⇒ { try { Fall abfragen

      const result = await getCaseByLicensePlate('MTK-C-72');
      console.log(JSON.stringify(result, null, 2));
      
      // Anrufdaten senden
      const callData = {
          fromNumber: '+491234567890',
          toNumber: '+499876543210',
          direction: 'inbound',
          duration: 120,
          startTimestamp: '2024-01-15T10:30:00Z',
          endTimestamp: '2024-01-15T10:32:00Z',
          transcript: [
              {
                  id: 'msg-001',
                  index: 0,
                  role: 'user',
                  content: 'Guten Tag',
                  createdAt: '2024-01-15T10:30:15Z'
              }
          ],
          context: {
              Name: 'Max Mustermann',
              LicensePlate: 'MTK C 72'
          }
      };
      
      const status = await submitCallData(callData);
      console.log(`Status: ${status}`);
  } catch (error) {
      console.error('Fehler:', error.response?.data || error.message);
  }

})(); </javascript>

Best Practices

Datenqualität

* Transkripte: Senden Sie Transkripte so schnell wie möglich nach Anrufende * Zeitstempel: Verwenden Sie immer UTC-Zeit im ISO 8601 Format * Telefonnummern: Formatieren Sie Nummern im E.164-Standard * Kontextdaten: Extrahieren Sie relevante Informationen (Name, Kennzeichen) für bessere Fallzuordnung

Fehlerbehandlung

* Implementieren Sie Retry-Logik bei HTTP 500 Fehlern * Protokollieren Sie alle API-Antworten zur Fehleranalyse * Validieren Sie Ihre Anfragen vor dem Senden

Sicherheit

* Bewahren Sie Ihren API-Hash sicher auf * Verwenden Sie HTTPS für alle API-Anfragen * Rotieren Sie API-Hashes regelmäßig

Fehlerbehebung

Häufige Probleme

401 Unauthorized * Überprüfen Sie, ob der API-Hash korrekt ist * Stellen Sie sicher, dass Sie “Basic ” vor dem Hash verwenden

400 Bad Request * Validieren Sie Ihre JSON-Struktur * Stellen Sie sicher, dass alle erforderlichen Felder vorhanden sind * Überprüfen Sie das Datentypen (Strings, Integers, Arrays)

404 Not Found * Die Telefonnummer existiert nicht im System * Überprüfen Sie das Telefonnummernformat * Kontaktieren Sie den Kunden, um die richtige Nummer zu bestätigen

500 Internal Server Error * Temporärer Serverfehler * Versuchen Sie es später erneut * Bei anhaltenden Problemen: Kontaktieren Sie den ET360-Support

Support

Bei Fragen oder Problemen kontaktieren Sie bitte:

* E-Mail: support@et360.de * Dokumentation: https://docs.et360.de/fonio * Status Page: https://status.et360.de

Versionshistorie
Version Datum Änderungen
1.0 2024-01-15 Erste Veröffentlichung
1.1 2024-03-01 Unterstützung für Audio-Links hinzugefügt
1.2 2024-06-01 Verbesserte Fehlerbehandlung
Siehe auch
fonio.1784819482.txt.gz · Last modified: by admin

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki