Команды Microsoft: получить часовой пояс пользователя? - PullRequest
0 голосов
/ 13 ноября 2018

Я разрабатываю бота для MS Teams и хочу узнать часовой пояс пользователя, чтобы доставлять сообщения в подходящее время (например, не посреди ночи).

Я не нашел что-то подходящее в REST API фреймворка бота. Хотя сообщения, которые мы получаем, включают в себя свойство clientInfo.country, которое является началом, но его явно недостаточно для того, чтобы синхронизировать сообщения, как нам хотелось бы.

Ответы [ 3 ]

0 голосов
/ 20 ноября 2018

И ответ таков: есть свойство localTimestamp, которое можно использовать для получения смещения по времени, что достаточно для того, что мне нужно.

0 голосов
/ 06 августа 2019

С @ Savageman ответ

И ответ таков: есть свойство localTimestamp, которое можно использовать для получения смещения по времени, что достаточно для того, что мне нужно.

Мы можем решить проблему "NOT Receive the timezone", сопоставив utcOffset из localTimestamp и country в entities с timezone.

Я написал код JavaScript для получения часового пояса, такого как "Asia/shanghai", используя "localTimestamp": "2019-08-06T18:23:44.259+08:00" и "country": "CN" из Session в сообщении Команд.

Подробнее в моем github readme.md .

let moment = require("moment-timezone");
let ct = require("countries-and-timezones");

let partOfSampleSession = {
    "message": {
        "entities": [
            {
                "country": "CN",
                "locale": "zh-CN",
                "platform": "Web",
                "type": "clientInfo"
            }
        ],
        "localTimestamp": "2019-08-06T18:23:44.259+08:00"
    }
}

function getTimezoneFromSession(session) {
    // Get the name of country, such as "CN", "JP", "US"
    let country = session.message.entities[0].country;

    // Get the localTimestamp from message in session, such as "2019-08-06T18:23:44.259+08:00"
    let localTimestamp = session.message.localTimestamp;

    // Caculate the utfOffset of "localTimestamp", such as "480" by "2019-08-06T18:23:44.259+08:00"
    let utcOffsetOfLocalTime = moment().utcOffset(localTimestamp).utcOffset();

    // Mapping country to an object array which contains utcOffsets and it's corresponding timezones
    // One element from mxTimezones is {"utcOffset": "480", "name": "Asia/Shanghai"}
    let mxTimezones = ct.getTimezonesForCountry(country);

    // get the same timezone as localtime utcOffset from timezones in a country
    let timezone = "";
    mxTimezones.forEach(mxTimezone => {
        if (mxTimezone.utcOffset == utcOffsetOfLocalTime) {
            timezone = mxTimezone.name;
        }
    });
    return timezone;
}
let timezone = getTimezoneFromSession(partOfSampleSession);
// timezone = "Asia/Shanghai"
console.log(timezone);


// example of ct.getTimezonesForCountry("US")
// mxTimezones = [
//      {
//          "name": "America/New_York",
//          "utcOffset": "-300",
//      },
//      {
//          "name": "America/Los_Angeles",
//          "utcOffset": "-480",
//      }
//      ...
//      27 elements
//      ...
// ]
0 голосов
/ 13 ноября 2018

В каждом сообщении пользователю имеется коллекция entities[], одним из которых является подробное описание языкового стандарта пользователя.Например (скопировано / вставлено из здесь ):

"entities": [
  { 
    "locale": "en-US",
    "country": "US",
    "platform": "Windows",
    "timezone": "America/Los_Angeles",
    "type": "clientInfo"
  }
],
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...