Если вы встраиваете веб-чат в свой веб-сайт, как упомянул Мэтт в комментарии, вы можете использовать механизм обратного канала для передачи TimezoneOffset
из клиента JavaScript в ваше приложение бота для достижения ваших требований.
В клиенте 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://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: 'fehanbotdg' },
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'); });
</script>
В приложении бота MessagesController:
private Activity HandleSystemMessage(Activity message)
{
if (message.Type == ActivityTypes.DeleteUserData)
{
// Implement user deletion here
// If we handle user deletion, return a real message
}
//......
//code logic for other messages types
//......
else if (message.Type == ActivityTypes.Event && message.Name == "ClientTimezoneOffsetEvent") {
int timezoneOffset = Convert.ToInt32(message.Value);
var client = new ConnectorClient(new Uri(message.ServiceUrl), new MicrosoftAppCredentials());
timezoneOffset = Convert.ToInt32(message.Value);
DateTime newDate = DateTime.UtcNow - new TimeSpan(timezoneOffset / 60, timezoneOffset % 60, 0);
var greeting = "";
if (newDate.Hour < 12)
{
greeting = "Good Morning";
}
else if (newDate.Hour > 12 & newDate.Hour <= 17)
{
greeting = "Good Afternoon";
}
else if (newDate.Hour > 17 & newDate.Hour <= 24)
{
greeting = "Good Evening";
}
var reply = message.CreateReply();
reply.Text = $"{greeting}! UTC time: {DateTime.UtcNow}; Client time: {newDate}";
client.Conversations.ReplyToActivityAsync(reply);
}
return null;
}
Результат теста: