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
undsecondary
- 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
undMontserrat
.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 ist1
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.
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:
- 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.
- 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.
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