Есть ли способ включить ввод даты и времени другими словами, параметры календаря в Chat Bot без использования адаптивных карт, как я понимаю из ссылки ниже, адаптивные карты поддерживаются не во всех каналах, кроме каналов Microsoft.
Как добавить собственные варианты выбора, отображаемые с помощью параметров «Подсказка» в меню «Карты», и инициировать действия по выбору, щелкнув в BOT V4 с помощью c #?
Я включил адаптивные карты с использованием следующих входов:
[BotFramework]: Как получить / извлечь значения, переданные через адаптивную карту, отображаемую в боте C # Web Chat в диалоговом окне с водопадом?
Тогда мой запрос: Как я могу включитьДата Ввод времени в BOT, кроме использования адаптивных карт, таких как Hero Card или любой другой карты (кроме адаптивной карты)?
Язык: C # SDK: V4 Канал: Канал веб-чата Развернут в: Azure
Если есть способ, я прошу вас предоставить подробное пошаговое руководство, поскольку я новичок в BOT и кодировании.
Спасибо & Regards -ChaitanyaNG
Я не могу попробовать нижеприведенное на GitHub, так как это связано с React, но мой код написан на C # и SDK V4 из AZURE:
https://github.com/microsoft/BotFramework-WebChat/tree/master/samples/10.a.customization-card-components
Ожидаемый результат: Показать опцию календаря и время, чтобы выбрать дату и время, чтобы я мог захватить входные значения и продолжить процесс в диалоговом окне с водопадом C #
Фактический результат: Невозможно достичь этого, так как адаптивная карта, кажется,не поддерживаться в канале веб-чата и только в каналах Microsoft, таких как Skype
@ mrichardson-MSFT: Спасибо за всю помощь до сих пор.
Описание проблемы:
У меня есть программа BOT с несколькими классами диалогов с водопадом. Последний класс диалога ШАГ № 1: Я показываю адаптивную карту с двумя входами даты и времени, один для запуска, а другой для остановки Фактический результат: Адаптив успешно отображается как на эмуляторе, так и на веб-канале чата без проблем. ШАГ №2: Когда я нажимаю SetSchedule на объявленииНа первом шаге отображается карта памяти, значения должны быть записаны на шаге 2 и отображаться на экране. Фактический результат : Отлично работает в эмуляторе, но не в боте канала веб-чата.Я получаю сообщение об ошибке в BOT канала чата.Пожалуйста, найдите HTML-файл для доступа к боту, класс диалога с водопадом и json-файл Adaptive card, прилагаемый для справки.Наряду с этим, пожалуйста, найдите скриншот ошибки, прикрепленный в канале чата для справки.
Не могли бы вы мне помочь решить эту проблему, как вы сделали для входа в систему?Запросите вашу немедленную помощь, это блокирует мою работу.
Спасибо и С уважением -ChaitanyaNG
using Microsoft.Bot.Builder.Dialogs;
using Microsoft.Bot.Schema;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
namespace EchoBot.Dialogs
{
public class Adaptivecarddialog : WaterfallDialog
{
public const string cards = @"./AdaptiveCard.json";
public Adaptivecarddialog(string dialogId, IEnumerable<WaterfallStep> steps = null)
: base(dialogId, steps)
{
AddStep(async (stepContext, cancellationToken) =>
{
var cardAttachment = CreateAdaptiveCardAttachment(cards);
var reply = stepContext.Context.Activity.CreateReply();
reply.Attachments = new List<Attachment>() { cardAttachment };
await stepContext.Context.SendActivityAsync(reply, cancellationToken);
var opts = new PromptOptions
{
Prompt = new Activity
{
Type = ActivityTypes.Message,
// You can comment this out if you don't want to display any text. Still works.
}
};
// Display a Text Prompt and wait for input
return await stepContext.PromptAsync(nameof(TextPrompt), opts);
});
AddStep(async (stepContext, cancellationToken) =>
{
var res = stepContext.Result.ToString();
dynamic jobject = JsonConvert.DeserializeObject(res);
string NewStartDateTime = jobject.Startdate + " " + jobject.Starttime;
string NewStopDateTime = jobject.Stopdate + " " + jobject.Stoptime;
await stepContext.Context.SendActivityAsync($"StartDateTime:{NewStartDateTime}", cancellationToken: cancellationToken);
await stepContext.Context.SendActivityAsync($"StopDateTime:{NewStopDateTime}", cancellationToken: cancellationToken);
return await stepContext.EndDialogAsync();
});
}
public static new string Id => "Adaptivecarddialog";
public static Adaptivecarddialog Instance { get; } = new Adaptivecarddialog(Id);
public static Attachment CreateAdaptiveCardAttachment(string filePath)
{
var adaptiveCardJson = File.ReadAllText(filePath);
var adaptiveCardAttachment = new Attachment()
{
ContentType = "application/vnd.microsoft.card.adaptive",
Content = JsonConvert.DeserializeObject(adaptiveCardJson),
};
return adaptiveCardAttachment;
}
}
}
{
"type": "AdaptiveCard",
"body": [
{
"type": "TextBlock",
"id": "Start date text",
"separator": true,
"text": "Schedule Start DateTime:"
},
{
"type": "Input.Date",
"id": "Startdate",
"separator": true,
"value": "2019-05-24"
},
{
"type": "Input.Time",
"id": "Starttime",
"separator": true,
"value": "08:00"
},
{
"type": "TextBlock",
"id": "Stop date text",
"separator": true,
"text": "Schedule Stop DateTime:"
},
{
"type": "Input.Date",
"id": "Stopdate",
"separator": true,
"value": "2019-05-25"
},
{
"type": "Input.Time",
"id": "Stoptime",
"separator": true,
"value": "08:00"
}
],
"actions": [
{
"type": "Action.Submit",
"id": "SubmitBtn",
"title": "SetSchedule"
}
],
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"version": "1.0"
}
Сообщения об ошибках при повторной попытке: Первая попытка {error: {code: "BotError", сообщение: "Не удалось отправить действие: истекло время ожидания бота"}, httpStatusCode: 504} ошибка: {code:" BotError ", сообщение:" Не удалось отправить действие: истекло время ожидания бота "} code:" BotError "сообщение:" Не удалось отправить действие: истекло время ожидания бота "httpStatusCode: 504
SecondTry {error: {code: "BotError", сообщение: "Не удалось отправить действие: бот вернул ошибку"},…} ошибка:{code: «BotError», сообщение: «Не удалось отправить действие: бот вернул ошибку»} code: «BotError»: «Не удалось отправить действие: бот вернул ошибку» httpStatusCode: 500
HTML-файл:
<!DOCTYPE html>
<html lang="en-US">
<head>
<title>Web Chat: Custom style options</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!--
For demonstration purposes, we are using the development branch of Web Chat at "/master/webchat.js".
When you are using Web Chat for production, you should use the latest stable release at "/latest/webchat.js",
or lock down on a specific version with the following format: "/4.1.0/webchat.js".
-->
<script src="https://cdn.botframework.com/botframework-webchat/master/webchat.js"></script>
<style>
html, body {
height: 100%
}
body {
margin: 0
}
#webchat {
height: 100%;
width: 100%;
}
</style>
</head>
<body>
<div id="webchat" role="main">
</div>
<script>
(async function () {
// In this demo, we are using Direct Line token from MockBot.
// To talk to your bot, you should use the token exchanged using your Direct Line secret.
// You should never put the Direct Line secret in the browser or client app.
// https://docs.microsoft.com/en-us/azure/bot-service/rest-api/bot-framework-rest-direct-line-3-0-authentication
// Token is found by going to Azure Portal > Your Web App Bot > Channels > Web Chat - Edit > Secret Keys - Show
// It looks something like this: pD*********xI.8ZbgTHof3GL_nM5***********aggt5qLOBrigZ8
const token = '<<Your Direct Line Secret Key>>';
// You can modify the style set by providing a limited set of style options
const styleOptions = {
botAvatarImage: 'https://docs.microsoft.com/en-us/azure/bot-service/v4sdk/media/logo_bot.svg?view=azure-bot-service-4.0',
botAvatarInitials: 'BF',
userAvatarImage: 'https://avatars1.githubusercontent.com/u/45868722?s=96&v=4',
userAvatarInitials: 'WC',
bubbleBackground: 'rgba(0, 0, 255, .1)',
bubbleFromUserBackground: 'rgba(0, 255, 0, .1)'
};
// We are using a customized store to add hooks to connect event
const store = window.WebChat.createStore({}, ({ dispatch }) => next => action => {
if (action.type === 'DIRECT_LINE/CONNECT_FULFILLED') {
// When we receive DIRECT_LINE/CONNECT_FULFILLED action, we will send an event activity using WEB_CHAT/SEND_EVENT
dispatch({
type: 'WEB_CHAT/SEND_EVENT',
payload: {
name: 'webchat/join',
value: { language: window.navigator.language }
}
});
}
return next(action);
});
window.WebChat.renderWebChat({
directLine: window.WebChat.createDirectLine({ token }),
styleOptions,store
}, document.getElementById('webchat'));
document.querySelector('#webchat > *').focus();
})().catch(err => console.error(err));
</script>
</body>
</html>