Zum Hauptinhalt springen

iFrame-Einbindung

Einleitung

iFrame bedeutet bei uns, wenn Kunden beschließen, eine Integration zu entwickeln, die uns eine minimale Menge an Daten sendet und die Ausgabe auf einer sehr kleinen, vorgefertigten Schnittstelle anzeigt, die in ihr System eingebettet ist und die leicht personalisiert werden kann.

Dieses Dokument beschreibt die Schritte, die erforderlich sind, um unseren iFrame in eine systemeigene iOS-Anwendung zu integrieren. Es enthält ein Demo-Video, das die Funktionalität unseres iFrame innerhalb einer Anwendung zeigt und den Nachweis einer erfolgreichen Kameraintegration liefert.

Zugang

Zur Integration unseres iFrames in Ihre Anwendung müssen Sie die folgende URL einbetten: https://iframe.legit.health.

Die URL unterstützt folgende Parameter:

  • company - Dies ist eine Kennung, die wir Ihnen zur Verfügung stellen, damit Sie unsere Integration nutzen können.
  • companyCallbackUrl - Mit diesem Parameter können Sie die URL für den Client-Callback überschreiben, an den der Diagnosebericht gesendet wird.
  • extraData - Dieser Parameter unterstützt eine Zeichenfolge mit zusätzlichen Werten, die in den Bericht aufgenommen werden sollen (z.B. Patientenkennungen). Dieser Wert ist für den Benutzer nicht sichtbar.
  • primary und secondary - Diese Parameter erlauben hexadezimale Farben zur Anpassung der Schnittstelle.
  • fontFamily - Mit diesem Parameter können Sie die gewünschte Schriftart festlegen. Folgende Einstellungen werden unterstützt: Roboto und Montserrat.
  • isResultEnabled - Dieser Parameter ermöglicht die Aktivierung oder Deaktivierung der Ergebnisanzeige für den Benutzer.
  • isForPatient - Dieser Parameter vereinfacht den Fragebogentext für eine patientenfreundliche Verwendung.
  • locale - Mit diesem Parameter können Sie die Sprache der Anwendung festlegen. Folgende Einstellungen werden unterstützt: en, es und de.
  • showQuestionnaireTitle - Mit diesem Parameter können Sie die Überschrift des Fragebogenformulars ein- oder ausblenden. Der Standardwert ist 1
  • disableCallbackOnConclusive - Wenn ein bereitgestellter Satz von Bildern eine eindeutige Diagnose liefert, kann der Schweregrad berechnet werden. Mit diesem Parameter können Sie das Senden eines Callbacks mit dem Ergebnis der Diagnoseunterstützung überspringen, so dass nur ein Callback mit der Diagnoseunterstützung und der Schweregradbewertung gesendet wird.

So erhalten Sie eine Unternehmenskennung

Falls Sie Anwendungsschlüssel für Ihr Unternehmen mit einem bestimmten Ablaufdatum generieren möchten, können Sie diesen Endpunkt unserer Deep Link API verwenden, um einen solchen zu generieren, bevor Sie den iFrame anzeigen:

App-Schlüssel für Unternehmen erstellen

KI-Ausgabe

Um ein vollständiges Verständnis der KI-Ausgabe zu erhalten, können Sie die Abschnitte unserer Dokumentation aufrufen, in denen Sie die Werte sehen können, die wir je nach Anwendungsfall berechnen: Diagnoseunterstützung oder Schweregradmessung.

Weitere Informationen

Bitte lesen Sie den Abschnitt Ausgabe in der Dokumentation für weitere Informationen.

Die Informationen, die wir von unserem Server an den Ihren senden, finden Sie unter dem folgenden Link:

Patienten-Eingabe

Wie in dem verlinkten Video gezeigt, muss der Patient nur den Körperbereich eingeben und das Bild hinzufügen. Wenn unsere KI eine bestimmte Pathologie mit hoher Wahrscheinlichkeit feststellt, wird ein zusätzlicher Bildschirm mit den dazugehörigen klinischen Fragebögen angezeigt.

Wenn es sich bei der Hautläsion beispielsweise mit einer Wahrscheinlichkeit von 98 % um Psoriasis handelt, muss der Patient die Fragen zum APASI ausfüllen, um zusätzliche Informationen im Bericht zu erhalten, wie z.B. den Schweregrad der Läsion.

Anpassungen

Verwendung durch Patienten

Wenn die primären Benutzer des iFrames Patienten sind, können Sie in der URL den Parameter isForPatient=1 verwenden. Wenn Sie diese Option aktivieren, wird der Text in den Fragebögen geändert, um sie benutzerfreundlicher zu gestalten.

Anstatt z.B. die einfache Beschriftung Juckreiz für die Frage nach Juckreiz anzuzeigen, wird der Text in eine direktere Abfrage umgewandelt: Wie würden Sie das Gefühl des Juckens beschreiben? Diese Verbesserung zielt darauf ab, die Verständlichkeit und das Ausfüllen des Fragebogens für die Patienten zu erleichtern.

Sichtbarkeit der Ergebnisse

Die Ergebnisse können abhängig vom Parameter isResultEnabled für Benutzer angezeigt oder verborgen werden. Standardmäßig werden dem Benutzer die Ergebnisse angezeigt, nachdem er das Foto hochgeladen hat. Aber Sie können den Wert isResultEnabled=0 setzen, um nur eine Nachricht anzuzeigen.

Farben und Schriftart

Primär- und Sekundärfarben können mit den Parametern primary und secondary in der URL angepasst werden.

Sie können auch die Schriftart auswählen, die Sie verwenden möchten. Derzeit unterstützen wir Roboto und Montserrat.

Sprache

Die Sprache in iFrame kann mit dem Parameter locale und den Werten es, en oder de angepasst werden.

Zusätzliche Daten

Da Ihnen das Feld extraData zur Verfügung steht, das eine beliebige Zeichenfolge akzeptiert, können Sie jeden zusätzlichen Wert übermitteln, den Sie an den Bericht anhängen möchten. Wenn Sie z.B. Patienten- und Versicherungsdaten weitergeben müssen, gehen Sie wie folgt vor:

const data = toBase64(
JSON.stringify({ patient: "XXX", insuranceProvider: "YYY" })
);

Fragebögen

Mit dem Parameter showQuestionnaireTitle können Sie die Überschrift über den Fragebögen ein- oder ausblenden, die den Text "Medical questionnaire" / "Cuestionario clínico" / "Medizinischer Fragebogen" anzeigt.

Von iFrame gepostete Nachrichten

Anleitung zur Einbindung

iOS

Der iFrame sendet Nachrichten über die WebKit-Bridge. Sie können diese Nachrichten abwarten, um den iFrame zu schließen oder den Benutzer an eine andere Stelle in Ihrer Anwendung zu leiten.

Nachfolgend finden Sie den entsprechenden Swift-Code, mit dem Sie den iFrame in Ihrer App anzeigen und auf die veröffentlichten Ereignisse reagieren können.

struct WebView: UIViewRepresentable {
@Binding var path: NavigationPath

class Coordinator: NSObject, WKNavigationDelegate, WKScriptMessageHandler {
var webView: WKWebView?
var onMessageReceived: (Any) -> Void

required init(onMessageReceived: @escaping (Any) -> Void) {
self.onMessageReceived = onMessageReceived
super.init()
}

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
self.webView = webView
}

// Receive message from WKWebView
func userContentController(
_ userContentController: WKUserContentController,
didReceive message: WKScriptMessage
) {
print(message.body)
self.onMessageReceived(message.body)
}

}

func onMessageReceived(body: Any) -> Void {
DispatchQueue.main.async {
path.append(body as! String)
}
}

func makeCoordinator() -> Coordinator {
return Coordinator(onMessageReceived: onMessageReceived)
}

func makeUIView(context: Context) -> WKWebView {
let coordinator = makeCoordinator()
let userContentController = WKUserContentController()
userContentController.add(coordinator, name: "bridge")

let configuration = WKWebViewConfiguration()
configuration.userContentController = userContentController

let _wkwebview = WKWebView(frame: .zero, configuration: configuration)
_wkwebview.navigationDelegate = coordinator

return _wkwebview
}

func updateUIView(_ webView: WKWebView, context: Context) {
let companyIdentifier = AppConfig.companyIdentifier
let request = URLRequest(url: URL(string: "https://iframe.legit.health/?company=" + companyIdentifier)!)

webView.load(request)
}
}

Dieser Swift-Code erstellt eine WebView-Struktur, die der UIViewRepresentable-Struktur entspricht und die Kommunikation zwischen Ihren Webinhalten und der systemeigenen App über den Nachrichten-Handler der Bridge ermöglicht. Die Klasse Coordinator des WebViews erwartet Ereignisse aus dem iFrame und reagiert entsprechend auf sie.

Android

Falls Sie eine Android-Anwendung erstellen, sollten Sie ein Objekt namens legitHealthJsObject an unseren iFrame mittels WebViewCompat weitergeben.

Nachricht "Analyse abgeschlossen"

Wenn die Analyse des Bildes abgeschlossen ist und das Ergebnis vorliegt, sendet der iFrame eine Nachricht über drei verschiedene Kanäle, je nach Art der Einbindung.

Die gesendete Nachricht enthält die anonymousDiagnosticReportId, welche die Kennung des erstellten Diagnoseberichts ist. Sie können damit den vollständigen Bericht abrufen, indem Sie den hier beschriebenen Endpunkt verwenden: Einen anonymen Diagnosebericht abrufen

Web

Wenn Sie unseren iFrame in eine webbasierte Anwendung einbetten, sendet der iFrame nach der Verarbeitung des Bildes eine Nachricht über postMessage.

window.parent.postMessage(
{
message: "analysis_completed",
id: "anonymousDiagnosticReportId",
},
"*"
);

Sie können diese Nachricht mit einem normalen EventListener abfragen:

window.addEventListener("message", function (event) {
if (event.data.message !== "analysis_completed") {
return;
}
console.log(event.data.id);
});

iOS

Der iFrame sendet eine Nachricht über die WebKit-Bridge, nachdem das Bild verarbeitet wurde.

if (window.webkit?.messageHandlers?.bridge) {
window.webkit.messageHandlers.bridge.postMessage(
JSON.stringify({
message: "analysis_completed",
id: "anonymousDiagnosticReportId",
})
);
}

Android

Der iFrame sendet eine Nachricht über legitHealthJsObject, nachdem das Bild verarbeitet wurde.

if (window.legitHealthJsObject) {
window.legitHealthJsObject.postMessage(
JSON.stringify({
message: "analysis_completed",
id: diagnosticReportId,
})
);
}

Ungültiger Unternehmensschlüssel

Wenn ein iFrame aufgrund eines ungültigen Unternehmensschlüssels nicht geladen werden kann, sendet der iFrame eine Nachricht über drei verschiedene Kanäle, je nach Art der Einbindung.

Web

Wenn Sie unseren iFrame in eine webbasierte Anwendung einbetten, sendet der iFrame eine Nachricht über postMessage, wenn der Unternehmensschlüssel ungültig ist.

window.parent.postMessage(
{
message: "invalid_company_key",
id: companyKey,
},
"*"
);

iOS

Der iFrame sendet eine Nachricht über die WebKit-Bridge, wenn der Unternehmensschlüssel ungültig ist.

if (window.webkit?.messageHandlers?.bridge) {
window.webkit.messageHandlers.bridge.postMessage(
JSON.stringify({
message: "invalid_company_key",
id: companyKey,
})
);
}

Android

Der iFrame sendet eine Nachricht über legitHealthJsObject, wenn der Firmenschlüssel ungültig ist.

if (window.legitHealthJsObject) {
window.legitHealthJsObject.postMessage(
JSON.stringify({
message: "invalid_company_key",
id: companyKey,
})
);
}

Callbacks

Callback-URL

Nach der erfolgreichen Verarbeitung jedes hochgeladenen Bildes sendet unser Server eine JSON-Payload mit detaillierten Informationen über den Diagnoseprozess an den konfigurierten Endpunkt. Diese JSON-Payload umfasst mehrere Ebenen von Diagnosedaten und Metriken. Hier ein Beispiel des zu erwartenden Ergebnisses:

<AnonymousDiagnosticReportJson />

Überschreiben der Callback-URL

Während des Konfigurationsprozesses muss der Kunde eine Callback-URL angeben, an die die Diagnoseberichte gesendet werden sollen. Diese URL kann auf iFrame-Ebene über den Parameter companyCallbackUrl angepasst werden, wie z. B.:

https://iframe.legit.health/?company=XXX&companyCallbackUrl=http://someserver.dev

Callback bei Konklusion deaktivieren

Dies ist der Ablauf bei iFrame:

  • Erste Anfrage: Nach Erhalt einer gewissen Anzahl von Bildern vom Benutzer initiiert unser System eine Anfrage zur Diagnoseunterstützung, die von unseren KI-Algorithmen verarbeitet wird.
  • Einschätzung der Sicherheit: Wenn das Sicherheitsniveau der KI-Analyse einen vorgegebenen Grenzwert überschreitet, löst der iFrame eine zweite Anfrage aus. Diese Anfrage ist speziell für die Bewertung des Schweregrads gedacht und konzentriert sich auf das am besten geeignete Bild aus dem bereitgestellten Satz.
  • Abschluss des Berichts: In Fällen, in denen die Sicherheit der KI den Grenzwert nicht erreicht, wird der Diagnoseprozess in diesem Stadium als abgeschlossen betrachtet.

Zweistufige Diagnoseberichte

Unser System generiert zweierlei Diagnoseberichte, die auf der Einschätzung der Sicherheit der KI basieren:

  1. Zwischenbericht: Dieser Bericht enthält das Ergebnis der ersten Diagnoseunterstützung. Er wird generiert, wenn die Sicherheit der KI unter dem Grenzwert liegt oder wenn die Bewertung des Schweregrads noch aussteht.
  2. Abschlussbericht: Dieser ausführliche Bericht umfasst sowohl die anfängliche diagnostische Unterstützung als auch die Ergebnisse der Schweregradbewertung. Er wird erstellt, wenn die Sicherheit der KI hoch genug ist, um mit der Schweregradbewertung fortzufahren.

Callback-Funktion

Beide Diagnoseberichte werden an die von Ihnen angegebene Callback-URL gesendet. So erhalten Sie alle wichtigen Analysedaten. Es kann jedoch Fälle geben, in denen es vorteilhafter ist, nur den Abschlussbericht zu erhalten, insbesondere um die Verarbeitung von Zwischenergebnissen zu vermeiden.

flowchart TD A[Benutzer sendet Bilder] --> B[Anfrage Diagnoseunterstützung] B --> C{AI Confidence Check} C -- Above Threshold --> D{disableCallbackOnConclusive?} C -- Below Threshold --> E[Endbericht erstellen. Diagnoseunterstützung] E --> F[Callback senden] D -- 0 --> G[Callback mit Zwischenbericht senden] D -- 1 --> H[Callback mit Zwischenbericht senden überspringen] G --> I[Anfrage Bewertung des Schweregrads] H --> I[Anfrage Bewertung des Schweregrads] I --> J[Endbericht erstellen. Diagnoseunterstützung und Bewertung des Schweregrads] J --> K[Callback senden]

Parameter disableCallbackOnConclusive

An dieser Stelle spielt der Parameter disableCallbackOnConclusive eine entscheidende Rolle:

  • Parameterwert 0 (Standard): Die Callback-Funktion arbeitet im Standardmodus und sendet sowohl die Zwischen- als auch die Abschlussdiagnoseberichte an die von Ihnen angegebene Callback-URL.
  • Parameter Value 1: Durch die Aktivierung dieses Modus (disableCallbackOnConclusive=1) wird das Callback-Verhalten verändert. Wenn in diesem Fall der erste Satz von Bildern zu einer abschließenden Diagnose führt, d.h. eine hohe KI-Sicherheit aufweist, wird der diagnostische Zwischenbericht nicht an Ihren Callback gesendet. Stattdessen wird nur der Abschlussbericht übermittelt, der sowohl die diagnostische Unterstützung als auch die Bewertung des Schweregrads enthält.
Zweck von disableCallbackOnConclusive

Dieser Parameter bietet eine wichtige Option zur Anpassung, mit der Sie den Diagnoseberichtsprozess optimieren können. Indem Sie disableCallbackOnConclusive=1 festlegen, reduzieren Sie effektiv die Datenverarbeitungslast und konzentrieren sich nur auf die umfassenden Abschlussberichte, die für aussagekräftige Diagnosen sachdienlicher sein könnten.

Anleitung zur Implementierung:

  • URL-Einbindung: Stellen Sie sicher, dass der Parameter disableCallbackOnConclusive richtig in die für die iFrame-Anfrage verwendete URL eingebettet ist.
  • Testen: Es ist wichtig, beide Einstellungen des Parameters (0 und 1) zu testen, um sicherzustellen, dass das Callback-Verhalten mit den Vorgaben und Anforderungen Ihrer Einrichtung übereinstimmt.

Dieser Parameter bietet Ihnen Flexibilität und Kontrolle über den Informationsfluss der Diagnose und stellt sicher, dass Sie die Daten erhalten, die für Ihre Bedürfnisse am wichtigsten sind.

Erstellen einer PDF

Einzelheiten zur Erstellung eines PDF-Berichts finden Sie unter dem folgenden Endpunkt: Anonymen Diagnosebericht anfordern