日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Teams Bot如何判断用户所在的时区

發(fā)布時(shí)間:2023/12/9 编程问答 74 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Teams Bot如何判断用户所在的时区 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一說(shuō)到時(shí)間,就會(huì)聯(lián)想到時(shí)區(qū),夏令時(shí)等頭痛的問(wèn)題,不同國(guó)家有不同國(guó)家的規(guī)定。如果你希望你的Teams Bot可以判斷出當(dāng)前用戶(hù)所在的時(shí)區(qū),從而可以針對(duì)性的進(jìn)行一些處理時(shí),你要做好心理準(zhǔn)備,這個(gè)復(fù)雜程度遠(yuǎn)遠(yuǎn)超過(guò)你的想象。因?yàn)橐粋€(gè)用戶(hù)這次在一個(gè)時(shí)區(qū)內(nèi)登入Teams,下一次可能就在另一個(gè)時(shí)區(qū)了。

好消息是Teams已經(jīng)幫我們做了很多事情,當(dāng)Teams發(fā)送請(qǐng)求到我們的Bot時(shí),payload里已經(jīng)帶了一些時(shí)間信息。我在我之前的一篇文章中也提到過(guò)。下面是一個(gè)標(biāo)準(zhǔn)的request body

{"name": "composeExtension/fetchTask","type": "invoke","timestamp": "2019-06-17T14:32:04.956Z","localTimestamp": "2019-06-18T00:32:04.956+10:00","id": "f:1361493733941541435","channelId": "msteams","serviceUrl": "https://smba.trafficmanager.net/apac/","from": { },"conversation": {"isGroup": true,"conversationType": "channel","tenantId": "aece5000-341d-493a-841d-f67e417f1447","id": "19:bf1cbc367561473db0c3fe762c11b508@thread.skype"},"recipient": { },"entities": [{"locale": "en-US","country": "US","platform": "Windows","type": "clientInfo"}],"channelData": { },"value": {"commandId": "start","commandContext": "compose","context": {"theme": "default"}},"locale": "en-US" }

上面這個(gè)payload里有兩個(gè)關(guān)鍵的時(shí)間信息:

  • timestamp:當(dāng)前的UTC時(shí)間
  • localTimestamp:當(dāng)前用戶(hù)所在的他/她的本地時(shí)間,加號(hào)后面的小時(shí)數(shù)針對(duì)UTC時(shí)間的offset

所以你的bot就知道了這個(gè)用戶(hù)當(dāng)前所在的時(shí)區(qū)和UTC相差多少。要注意我有兩個(gè)重要點(diǎn):

  • “當(dāng)前”。 我前面已經(jīng)提到過(guò),用戶(hù)的所在地會(huì)變化,Teams告訴bot的是此時(shí)此刻的用戶(hù)信息
  • “所在的時(shí)區(qū)和UTC相差多少”。這里說(shuō)的并不是時(shí)區(qū)(timezone),為什么這么說(shuō)?我們舉個(gè)例子:假設(shè)現(xiàn)在是UTC時(shí)間0點(diǎn)0分0秒,用戶(hù)A在UTC+11的時(shí)區(qū),那TA的時(shí)間是11:00am,另一個(gè)用戶(hù)B在UTC+10時(shí)區(qū),但TA所在國(guó)家正好在經(jīng)歷夏令時(shí),所以B的時(shí)間也是11:00am。在這兩種情況下,Teams對(duì)于用戶(hù)A和用戶(hù)B發(fā)送給Bot的時(shí)間信息是一樣的。但是實(shí)際上他們?cè)诓煌瑫r(shí)區(qū)。

如果你看到這里有點(diǎn)暈了,請(qǐng)回到上面這段再看一遍。如果你看懂了,那你會(huì)問(wèn):到底有沒(méi)有版本得到用戶(hù)所在的時(shí)區(qū)?我的目前的答案是沒(méi)有特別好的方法,但是Graph API有一個(gè)取巧的方法。

Graph API包含了Outlook api,我們使用下面這個(gè)api:

GET https://graph.microsoft.com/beta/users/{id|userPrincipalName}/mailboxSettings

我們看一下它返回什么內(nèi)容

{"@odata.context": "https://graph.microsoft.com/beta/$metadata#users('48d31887-5fad-4d73-a9f5-3c356e68a038')/mailboxSettings","archiveFolder": "AAMkAGVmMDEzMTM4LTZmYWUtNDdkNC1hMDZiLTU1OGY5OTZhYmY4OAAuAAAAAAAiQ8W967B7TKBjgx9rVEURAQAiIsqMbYjsT5e-T7KzowPTAAAAAAFNAAA=","timeZone": "Pacific Standard Time","dateFormat": "M/d/yyyy","timeFormat": "h:mm tt","automaticRepliesSetting": {"status": "disabled","externalAudience": "all","internalReplyMessage": "","externalReplyMessage": "","scheduledStartDateTime": {"dateTime": "2019-10-05T12:00:00.0000000","timeZone": "UTC"},"scheduledEndDateTime": {"dateTime": "2019-10-06T12:00:00.0000000","timeZone": "UTC"}},"language": {"locale": "en-US","displayName": "English (United States)"},"workingHours": {"daysOfWeek": ["monday","tuesday","wednesday","thursday","friday"],"startTime": "08:00:00.0000000","endTime": "17:00:00.0000000","timeZone": {"name": "Pacific Standard Time"}} }

是不是很強(qiáng)大?不旦旦有timezone信息,還有日期時(shí)間顯示格式的偏好。還有工作日信息,不同國(guó)家對(duì)工作日的定義是不同的。還有標(biāo)準(zhǔn)工作時(shí)間的信息,不同公司對(duì)上下班時(shí)間的設(shè)置也會(huì)不同。

當(dāng)然,使用Graph API并不是沒(méi)有代價(jià)的,這個(gè)需要用戶(hù)做額外的授權(quán),不過(guò)Teams產(chǎn)品團(tuán)隊(duì)表示,以后會(huì)把對(duì)Graph API的授權(quán)和Teams app合在一起,這樣用戶(hù)在安裝teams app的時(shí)候就同時(shí)完成了授權(quán)。期待這天早點(diǎn)到來(lái)。

總結(jié)

以上是生活随笔為你收集整理的Teams Bot如何判断用户所在的时区的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。