Как я могу программно получить секрет DirectLine приложения чат-бота Microsoft Bot Framework?

Я пытаюсь автоматизировать процесс создания и развертывания приложений чат-ботов с помощью Microsoft Bot Framework и Azure Bot Service.

У меня есть собственный шаблон, который обращается к моей службе, и мне просто нужно настроить файл Web.config для каждого развертываемого чат-бота. Я также хочу использовать default.htm для размещения базового веб-чата, который использует секрет DirectLine развернутого чат-бота.

Мне удалось создать приложение Чат-бот WebApp с помощью Azure CLI 2.0, а также интегрировать этого чат-бота с каналом DirectLine. Однако мне не удалось получить ключ DirectLine с помощью Azure CLI 2.0.

Я использовал следующие инструкции для интеграции чат-бота, созданного мной через CLI, с каналом DirectLine:

az bot directline create --name
                         --resource-group
                         [--add-disabled {false, true}]
                         [--disablev1 {false, true}]
                         [--disablev3 {false, true}]
                         [--site-name]

Однако, когда я использую команду show, я не получаю секрет, который мне нужно добавить в веб-чат в файле default.htm:

az bot directline show --name
                       --resource-group

Могу ли я добиться этого с помощью Azure CLI или .NET SDK? Я использую Azure CLI для тестирования, но в конце концов я хочу использовать .NET SDK, чтобы создать веб-службу REST, которая создает чат-бота ( на основе моего настраиваемого шаблона) и возвращает URL-адрес вызывающей стороне. Когда вызывающий абонент переходит по URL-адресу, я хочу, чтобы default.htm был хостингом для веб-чата.


person adamasan    schedule 25.07.2018    source источник


Ответы (3)


не удалось получить ключ DirectLine с помощью Azure CLI 2.0

На основе моего теста команда az bot directline show сделает следующий запрос для получения сведений о прямом канале.

GET https://management.azure.com/subscriptions/{subscription_id}/resourceGroups/{resourcegroup_name}/providers/Microsoft.BotService/botServices
/{bot_id}/channels/DirectLineChannel?api-version=2017-12-01

Но key и key2 всегда равны нулю в ответе, возвращаемом через GET.

введите здесь описание изображения

Чтобы вернуть / получить key и key2 в az bot cli, мы можем использовать команду create:

az bot directline create --name MyBotName  --resource-group MyResourceGroup --site-name site2

введите здесь описание изображения

Кроме того, для управления бот-сервисом в .NET-приложении вы можете попробовать использовать Библиотека службы Microsoft Azure Management Bot.

И вы также можете использовать API управления Azure в своем .NET-приложении для получения секретных ключей прямого доступа ботсервиса. Следующий пример запроса предназначен для вашей справки.

введите здесь описание изображения

Пример тела запроса:

введите здесь описание изображения

Примечание.

В Microsoft.Azure.Management.BotService.Models.DirectLineSite, мы можем найти: Получает первичный (вторичный) ключ. Значение, возвращаемое только посредством POST в API списка каналов действия, в противном случае пустое.

    //
    // Summary:
    //     Gets primary key. Value only returned through POST to the action Channel List
    //     API, otherwise empty.
    [JsonProperty(PropertyName = "key")]
    public string Key { get; }
    //
    // Summary:
    //     Gets secondary key. Value only returned through POST to the action Channel List
    //     API, otherwise empty.
    [JsonProperty(PropertyName = "key2")]
    public string Key2 { get; }
person Fei Han    schedule 26.07.2018
comment
Спасибо. Я очень ценю усилия и хотел бы проголосовать за это более одного раза, так как я изо всех сил пытаюсь достичь этого в течение значительного количества времени. Я очень благодарен! - person adamasan; 26.07.2018
comment
Это была установка метода на POST, что помогло ... спасибо! - person JamesQMurphy; 09.02.2021

Справка сообщает вам еще об одном аргументе, чтобы получить секреты.

PS C:\> az bot directline show --help

Command
    az bot directline show : Get details of the Directline Channel on a bot.

Arguments
    --name -n           [Required] : The resource name of the bot.
    --resource-group -g [Required] : Name of resource group. You can configure the default group
                                     using `az configure --defaults group=<name>`.
    --with-secrets                 : Show secrets in response for the channel.  Allowed values:
                                     false, true.

Global Arguments
    --debug                        : Increase logging verbosity to show all debug logs.
    --help -h                      : Show this help message and exit.
    --output -o                    : Output format.  Allowed values: json, jsonc, table, tsv, yaml.
                                     Default: json.
    --query                        : JMESPath query string. See http://jmespath.org/ for more
                                     information and examples.
    --subscription                 : Name or ID of subscription. You can configure the default
                                     subscription using `az account set -s NAME_OR_ID`.
    --verbose                      : Increase logging verbosity. Use --debug for full debug logs.

С помощью следующей команды вы можете получить секреты вашего прямого канала:

az bot directline show -n "{botId}" -g "{resourceGroupName}" --with-secrets --subscription "{subscriptionId}"

Протестировал, успешно заработало.

person jyfa    schedule 02.01.2019

Я также изучил исходный код Python для Azure Cli - BotService здесь: https://github.com/Azure/azure-cli/blob/dev/src/command_modules/azure-cli-botservice/azure/cli/command_modules/botservice/_client_factory.py. Когда я увидел, что они используют библиотеку azure.mgmt.botservice, я поискал ее исходный код и нашел этот файл https://github.com/Azure/azure-sdk-for-python/blob/master/azure-mgmt-botservice/azure/mgmt/botservice/operations/channels_operations.py, в котором вы можете найти все возможные операции с каналами.

Если вы не хотите использовать команды Azure Cli, вы также можете получить секретные ключи своего канала, выполнив следующий запрос:

ПОЛУЧИТЬ https // management.azure.com / subscriptions / {subscriptionId} / resourceGroups / {resourceGroupName} /providers/Microsoft.BotService/botServices/ {botId} / channels / {channelName} / listChannelWithKeys? Api-version = 2018-07- 12

Я также протестировал его, и он успешно работал с DirectLine, WebChat и так далее ...

... / {channelName} / ... параметр должен быть: ... / DirectLineChannel / ... или ... / WebChatChannel / ...

Чтобы заставить его работать, вам также необходимо добавить токен носителя доступа в заголовок ключа авторизации запроса.

person jyfa    schedule 03.01.2019
comment
Использование запроса GET вернуло ошибку UnsupportedAction. Но изменение метода на POST сработало для меня ... что было подсказкой, которую я получил из ответа @Fei Han. - person JamesQMurphy; 09.02.2021