То, чего я пытаюсь добиться, - это включить и отключить кнопку загрузки файла в веб-чате, отправив событие в чат.
Вы можете обратиться к следующему примерукод для достижения вашего требования динамически отключить / включить кнопку загрузки для веб-чата.
В диалоговом окне:
private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<object> result)
{
var activity = await result as Activity;
// calculate something for us to return
int length = (activity.Text ?? string.Empty).Length;
if (activity.Text.ToLower().Contains("disable upload"))
{
var reply = context.MakeMessage() as IEventActivity;
reply.Type = "event";
reply.Name = "disablebutton";
reply.Value = "DisableUploadButton";
await context.PostAsync((IMessageActivity)reply);
}
else if(activity.Text.ToLower().Contains("enable upload"))
{
var reply = context.MakeMessage() as IEventActivity;
reply.Type = "event";
reply.Name = "enablebutton";
reply.Value = "EnableUploadButton";
await context.PostAsync((IMessageActivity)reply);
}
else
{
// return our reply to the user
await context.PostAsync($"You sent {activity.Text} which was {length} characters");
}
context.Wait(MessageReceivedAsync);
}
На клиенте JavaScript:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<link href="https://cdn.botframework.com/botframework-webchat/latest/botchat.css" rel="stylesheet" />
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script src="https://cdn.botframework.com/botframework-webchat/latest/botchat.js"></script>
<style>
.wc-chatview-panel {
width: 350px;
height: 500px;
position: relative;
}
</style>
</head>
<body>
<div id="bot" />
</body>
</html>
<script>
var botConnection = new BotChat.DirectLine({ secret: "{directline_secret}" });
var d = new Date();
var tzoffset = d.getTimezoneOffset();
BotChat.App({
botConnection: botConnection,
user: { id: 'userid' },
bot: { id: '{bot_id}' },
resize: 'detect'
}, document.getElementById("bot"));
botConnection.postActivity({
type: 'event',
from: { id: 'userid'},
name: 'ClientTimezoneOffsetEvent',
value: tzoffset.toString()
}).subscribe(function (id) { console.log('ClientTimezoneOffset: "' + tzoffset + '" sent'); });
//listens for a specific event from the bot
botConnection.activity$
.filter(activity => activity.type === "event" && activity.name === "disablebutton")
.subscribe(activity => disableuploadbutton(activity.value));
botConnection.activity$
.filter(activity => activity.type === "event" && activity.name === "enablebutton")
.subscribe(activity => enableuploadbutton(activity.value));
function disableuploadbutton(val) {
//hide wc-upload
$(".wc-upload").hide();
console.log(val);
}
function enableuploadbutton(val) {
$(".wc-upload").show();
console.log(val);
}
</script>
Результат теста:
1) кнопка отключения
2) кнопка включения
Кроме того, вы также можете попробовать механизм обратного канала для достижения ваших требований.