Разрабатывайте боты для вызовов и виртуальных собраний на локальном компьютере.

В разделе Запуск и отладка приложения мы объясним, как использовать ngrok для создания туннеля между локальным компьютером и Интернетом. В этом разделе вы узнаете, как можно использовать ngrok и локальный компьютер для разработки ботов, поддерживающих вызовы и виртуальные собрания.

Боты для обмена сообщениями используют HTTP, но боты для вызовов и виртуальных собраний используют TCP более низкого уровня. Ngrok поддерживает туннели TCP в дополнение к туннелям HTTP.

Настроить ngrok.yml

Перейдите на ngrok и зарегистрируйте бесплатную учетную запись или войдите в существующую учетную запись. После того, как вы вошли в систему, перейдите на панель инструментов и получите токен авторизации.

Создайте файл ngrok.yml конфигурации ngrok и добавьте следующую строку. Для получения дополнительной информации о том, где может быть расположен файл, см. ngrok:

authtoken: <Your-AuthToken>

Настройка сигналов

В разделе Вызовы и боты для виртуальных собраний мы обсудили сигналы вызова о том, как боты обнаруживают и реагируют на новые вызовы и события во время вызова. События сигналов о вызове отправляются через HTTP POST на вызывающую конечную точку бота.

Как и в случае с API обмена сообщениями бота, для того, чтобы мультимедийная платформа в реальном времени могла общаться с ботом, бот должен быть доступен через Интернет. Ngrok упрощает эту процесс. Добавьте следующие строки в ngrok.yml:

tunnels:
    signaling:
        addr: 12345
        proto: http

Настройка локального носителя

Примечание.

Этот раздел необходим только для медиа-ботов, размещенных в приложении, и его можно пропустить, если вы не размещаете медиа-файлы самостоятельно.

Носители, размещаемые в приложениях, используют сертификаты и туннели TCP. Необходимо выполнить следующее:

  1. Общедоступные конечные точки TCP Ngrok имеют фиксированные URL-адреса. 0.tcp.ngrok.ioЭто , 1.tcp.ngrok.ioи так далее. У вас должна быть запись DNS CNAME для службы, указывающая на эти URL-адреса. Например, допустим, 0.bot.contoso.com относится к 0.tcp.ngrok.io, 1.bot.contoso.com относится к 1.tcp.ngrok.io и так далее.

  2. SSL-сертификат требуется для URL-адресов. Чтобы упростить задачу, используйте SSL-сертификат, выданный домену с подстановочными знаками. В этом случае это будет *.bot.contoso.com. Этот SSL-сертификат проверяется мультимедийным SDK, поэтому он должен соответствовать общедоступному URL-адресу бота. Запишите отпечаток и установите его в сертификаты компьютера

  3. Теперь настройте TCP-туннель для пересылки трафика на localhost. Напишите в файле ngrok.yml следующие строки:

    media:
        addr: 8445
        proto: tcp
    

Запустить ngrok

Теперь, когда конфигурация ngrok готова, запустите ее:

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

Это запускает ngrok и определяет общедоступные URL-адреса, которые предоставляют туннели для локального узла. Ниже приведен пример вывода:

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

Здесь 12345 является сигнальным портом, 8445 — это порт, который находится в приложении, а 12332 — это удаленный порт мультимедиа, предоставляемый ngrok. Обратите внимание, что у нас есть переадресация с 1.bot.contoso.com на 1.tcp.ngrok.io. Это будет использоваться в качестве URL-адреса мультимедиа для бота. Конечно, эти номера портов являются лишь примерами, и вы можете использовать любой доступный порт.

Обновление кода

После запуска и запуска ngrok обновите код, чтобы использовать только что настроенную конфигурацию.

Обновление сигналов

В вызове BotBuilder измените NotificationUrl на сигнальный URL-адрес, предоставленный ngrok.

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

Примечание.

Замените сигнал на тот, который предоставлен ngrok, и NotificationEndpoint путем контроллера, который получает уведомление.

Важно!

  • URL-адрес в SetNotificationUrl должен быть HTTPS.

Локальный экземпляр должен прослушивать HTTP-трафик на сигнальном порте. Запросы, сделанные платформой для вызовов и виртуальных собраний, будут достигать бота как HTTP-трафик локального хоста, если не настроено сквозное шифрование.

Обновить носители

Обновите MediaPlatformSettings следующим образом:

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)>,
    },
}

Примечание.

Отпечаток сертификата, указанный в MediaPlatformSettings должен соответствовать полному доменному имени службы. Вот почему записи DNS необходимы.

Предостережения

  • Бесплатные учетные записи Ngrok не обеспечивают сквозное шифрование. Данные HTTPS заканчиваются на URL-адресе ngrok, и данные передаются в незашифрованном виде из ngrok в localhost. При необходимости сквозного шифрования, подумайте о платной учетной записи ngrok. Инструкции по настройке безопасных сквозных туннелей см. в разделе TLS-туннели.
  • Поскольку URL-адрес обратного вызова бота является динамическим, сценарии входящих вызовов требуют частого обновления конечных точек ngrok. Одним из способов исправить эту проблему является использование платной учетной записи ngrok, которая предоставляет фиксированные поддомены, на которые можно указать бота и платформу.
  • Туннели ngrok также можно использовать с Azure Service Fabric. Пример того, как это сделать, см. в образце приложения HueBot.

См. также