Entwickeln von Anruf- und Onlinebesprechungs-Bots auf Ihrem lokalen PC

In Run and debug your app we explain how to use ngrok to create a tunnel between your local computer and the internet. In diesem Thema erfahren Sie, wie Sie auch ngrok und Ihren lokalen PC verwenden können, um Bots zu entwickeln, die Anrufe und Onlinebesprechungen unterstützen.

Messaging-Bots verwenden HTTP, aber Anrufe und Onlinebesprechungs-Bots verwenden tcp auf niedrigerer Ebene. Ngrok unterstützt zusätzlich zu HTTP-Tunneln TCP-Tunnel.

Konfigurieren von ngrok.yml

Wechseln Sie zu ngrok, und registrieren Sie sich für ein kostenloses Konto, oder melden Sie sich bei Ihrem vorhandenen Konto an. Nachdem Sie sich angemeldet haben, wechseln Sie zum Dashboard, und rufen Sie Ihr Authentifizierungstoken ab.

Erstellen Sie eine ngrok-Konfigurationsdatei, ngrok.yml und fügen Sie die folgende Zeile hinzu. Weitere Informationen dazu, wo sich die Datei befinden kann, finden Sie unter ngrok:

authtoken: <Your-AuthToken>

Einrichten der Signalisierung

In Bots für Anrufe und Onlinebesprechungenhaben wir die Signalisierung von Anrufen darüber besprochen, wie Bots neue Anrufe und Ereignisse während eines Anrufs erkennen und darauf reagieren. Anrufsignalereignisse werden über HTTP POST an den aufrufenden Endpunkt des Bots gesendet.

Wie bei der Messaging-API des Bots muss Ihr Bot über das Internet erreichbar sein, damit die Echtzeitmedienplattform mit Ihrem Bot kommunizieren kann. Ngrok vereinfacht dies. Fügen Sie die folgenden Zeilen zu Ihrem ngrok.yml hinzu:

tunnels:
    signaling:
        addr: 12345
        proto: http

Einrichten lokaler Medien

Hinweis

Dieser Abschnitt ist nur für in der Anwendung gehostete Medienbots erforderlich und kann übersprungen werden, wenn Sie keine Medien selbst hosten.

Von der Anwendung gehostete Medien verwenden Zertifikate und TCP-Tunnel. Die folgenden Schritte sind erforderlich:

  1. Die öffentlichen TCP-Endpunkte von Ngrok verfügen über feste URLs. Sie sind 0.tcp.ngrok.io 1.tcp.ngrok.io usw. Sie benötigen einen DNS-CNAME-Eintrag für Ihren Dienst, der auf diese URLs verweist. Nehmen wir beispielsweise an, 0.bot.contoso.com bezieht sich auf 0.tcp.ngrok.io , 1.bot.contoso.com bezieht sich 1.tcp.ngrok.io auf usw.

  2. Für Ihre URLs ist ein SSL-Zertifikat erforderlich. Um dies zu vereinfachen, verwenden Sie ein SSL-Zertifikat, das für eine Platzhalterdomäne ausgestellt wurde. In diesem Fall wäre dies *.bot.contoso.com . Dieses SSL-Zertifikat wird vom Media SDK überprüft, sodass es mit der öffentlichen URL Ihres Bots übereinstimmen muss. Notieren Sie sich den Fingerabdruck, und installieren Sie ihn in Ihren Computerzertifikaten.

  3. Richten Sie nun einen TCP-Tunnel ein, um den Datenverkehr an localhost weiterzuleiten. Schreiben Sie die folgenden Zeilen in ngrok.yml:

    media:
        addr: 8445
        proto: tcp
    

Start ngrok

Nachdem die ngrok-Konfiguration fertig ist, starten Sie sie:

ngrok.exe start -all -config <Path to your ngrok.yml>

Dadurch wird ngrok gestartet und die öffentlichen URLs definiert, die die Tunnel für Ihren localhost bereitstellen. Es folgt ein Beispiel für die Ausgabe:

Forwarding  http://signal.ngrok.io -> localhost:12345
Forwarding  https://signal.ngrok.io -> localhost:12345
Forwarding  tcp://1.tcp.ngrok.io:12332 -> localhost:8445

Hier sehen Sie 12345 den Signalport, den von der Anwendung 8445 gehosteten Port und den 12332 Remotemedienport, der von ngrok verfügbar gemacht wird. Beachten Sie, dass wir eine Weiterleitung von 1.bot.contoso.com zu 1.tcp.ngrok.io haben. Dies wird als Medien-URL für den Bot verwendet. Natürlich sind diese Portnummern nur Beispiele, und Sie können jeden verfügbaren Port verwenden.

Aktualisieren des Codes

Nachdem ngrok eingerichtet und ausgeführt wurde, aktualisieren Sie den Code so, dass er die soeben eingerichtete Konfiguration verwendet.

Signalisierung aktualisieren

Ändern Sie im BotBuilder-Aufruf die NotificationUrl von ngrok bereitgestellte Signal-URL.

statefulClientBuilder.SetNotificationUrl(
    new Uri("https://signal.ngrok.io/notificationEndpoint"))

Hinweis

Ersetzen Sie das Signal durch das von ngrok bereitgestellte Signal und das NotificationEndpoint Signal durch den Controllerpfad, der die Benachrichtigung empfängt.

Wichtig

  • Die URL in SetNotificationUrl muss HTTPS sein.

Ihre lokale Instanz muss auf HTTP-Datenverkehr am Signalport lauschen. Die Anforderungen der Plattform für Anrufe und Onlinebesprechungen erreichen den Bot als localhost HTTP-Datenverkehr, es sei denn, die End-to-End-Verschlüsselung ist eingerichtet.

Medien aktualisieren

Aktualisieren Sie MediaPlatformSettings Folgendes:

var mediaPlatform = new MediaPlatformSettings
{
    ApplicationId = <Your application id>
    MediaPlatformInstanceSettings = new MediaPlatformInstanceSettings
    {
        CertificateThumbprint = <Your SSL Cert thumbprint>,
        InstanceInternalPort = <Localhost media port>,
        InstancePublicPort = <Ngrok exposed remote media port>,
        InstancePublicIPAddress = new IPAddress(0x0),
        ServiceFqdn = <Media url for bot (eg: 1.bot.contoso.com)>,
    },
}

Hinweis

Der im FQDN des Diensts angegebene Zertifikatfingerabdruck MediaPlatformSettings muss mit dem Dienst-FQDN übereinstimmen. Aus diesem Grund sind die DNS-Einträge erforderlich.

Vorbehalte

  • Kostenlose Ngrok-Konten bieten keine End-to-End-Verschlüsselung. Die HTTPS-Daten enden bei der ngrok-URL, und die Daten werden unverschlüsselt von ngrok zu localhost . Wenn Sie eine End-to-End-Verschlüsselung benötigen, erwägen Sie ein kostenpflichtiges ngrok-Konto. Weitere Informationen zum Einrichten sicherer End-to-End-Tunnel finden Sie unter TLS-Tunnel.
  • Da die Bot-Rückruf-URL dynamisch ist, müssen Sie in Szenarien mit eingehenden Anrufen häufig Ihre ngrok-Endpunkte aktualisieren. Eine Möglichkeit, dies zu beheben, ist die Verwendung eines kostenpflichtigen ngrok-Kontos, das feste Unterdomänen bereitstellt, auf die Sie Ihren Bot und die Plattform verweisen können.
  • Ngrok-Tunnel können auch mit Azure Service Fabricverwendet werden. Ein Beispiel dafür finden Sie in der HueBot-Beispiel-App.