Teams Bot如何做全球化

Office365在全球有大量的用户,可以说是拥有最多用户的商业SaaS平台。Teams最近在发展迅猛,有1300万日活用户,已经超越了Slack。? Microsoft Teams overtakes Slack with 13 million daily users

我在设计Teams LuckyDraw bot的时候就希望我的bot能够被全世界的用户所使用,这个实际上还是一个非常有挑战的事情。抛开各国的法律法规要求(比如欧盟的GDPR,国家领土归属问题)不说,抛开不同宗教文化要求不说,单单多语言,多时区就是十分复杂。

举几个语言的例子:

  • 英语里有单复数,中文和一些语言里就没有。你在设计多语言界面的时候就需要注意
  • 即使是英语,美式英语(en-US),英式英语(en-UK),印度英语(en-IN),有很多区别
  • 大多数语言是从左到右书写,但是有些是从右到左。界面设计特别需要注意

再举几个时区的例子:

  • 有很多土地领域较大的国家,不像中国只有一个时区,同一个国家有几个时区是很正常的事情
  • 有些国家有些区域有夏令时。比如澳大利亚的布里斯班和悉尼,虽然在一个时区,但是悉尼有夏令时,也就是说平时大家时间一样,但是一到夏天,时间就变得不同了
  • 不同国家对于每周第一天是周一还是周日,定义不同
  • Samoa和Tokelau这两个地方没有2011年12月30日这一天,他们直接从29日跳到了31日( 具体原因 )。不知道这种事情会不会再次发生 (看到这里大家是不是和我当时一样,心里一万个。。。。)
  • 日本从2019年5月1日开始新的calendar,为此,Windows等系统,.NET等运行环境,各类时间处理的库都全面升级,打补丁,出新版本

看了上面几个例子,是不是觉得很无语。是不是瞬间觉得那些国际化的SaaS平台有多伟大和复杂。

那我们来看看Teams app/bot如何处理时间问题,一个好消息是Teams已经帮我们处理了很多问题,来看一下Teams发送给bot的请求payload:

{"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": {"id": "29:1l8B9m9SOOdHTqLDgmXvSrJyHfwd2ihooa7cxgtzJ8QjQ4WFC4mA_8K2Sa7jL-xUh7g4yh8sZIiDOX6vTtoaz6w","name": "Tony Xia","aadObjectId": "56c6599d-9216-4078-a8cf-3f039d36e1fd"},"conversation": {"isGroup": true,"conversationType": "channel","tenantId": "aece5000-341d-493a-841d-f67e417f1447","id": "19:bf1cbc367561473db0c3fe762c11b508@thread.skype"},"recipient": {"id": "28:89e9cdd8-f500-4696-a701-7c2323f62a86","name": "TestMsgExt"},"entities": [{"locale": "en-US","country": "US","platform": "Windows","type": "clientInfo"}],"channelData": {"channel": {"id": "19:bf1cbc367561473db0c3fe762c11b508@thread.skype"},"team": {"id": "19:bf1cbc367561473db0c3fe762c11b508@thread.skype"},"tenant": {"id": "aece5000-341d-493a-841d-f67e417f1447"},"source": {"name": "compose"}},"value": {"commandId": "start","commandContext": "compose","context": {"theme": "default"}},"locale": "en-US"
}

上面这个payload里有几个关键的值:

  • timestamp:当前的UTC时间
  • localTimestamp:当前用户所在的他/她的本地时间,加号后面的小时数针对UTC时间的offset
  • locale:当前用户所使用的语言

有了这几个参数,实际上就你的bot就知道改如何处理了吧?

不过,在具体的bot设计中,你还需要时刻留意这几点:

  • 一家公司(一个office365的tenant,可能有使用不同语言的人,可能分散在不同国家,在不同时区)
  • 一个Team或者一个频道channel里的用户也可能使用不同语言,分散在不同国家,在不同时区
  • 即使是同一个用户,他可能旅游或者出差到不同时区的不同国家,他可能在手机上的Teams是中文,但是桌面版本使用英文。

所以。。。所以大家要把你的Teams app走向全世界,需要精心设计,全面考虑。Good Luck!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/278034.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QuickBI助你成为分析师-邮件定时推送

创建报表过程中经常需要将报表情况定时推送给其他用户,及时了解数据情况。高级版本邮件推送功能支持仪表板周期性推送到订阅人,默认以当前登录者视角查看,同时支持结合 行级权限进行权限控制 和 结合全局参数功能确定邮件推送内容参数&#x…

2019年5月 Teams Community Call (China)

这个月有四个话题: Tony Xia:这个月的Teams的产品更新,Teams开发能力的更新,开源项目更新,库更新王远:升级/迁移到Microsoft Teams刘钰:Teams账号注册探索指南Paul Zhang/Cheung:Bu…

修改oracle 管理员密码 cmd

1.sqlplus/nolog 2.conn / as sysdba 3.alter user 用户名 identified by 新密码;转载于:https://www.cnblogs.com/taoqidexiaomao/p/9006927.html

在2019年6月Teams Community Call上分享的Teams app基础架构视频

我在2019年6月Teams Community Call(China)上分享的如何在azure上搭建典型的teams bot的基础架构 会议视频: 15:00 - 33:00 Download Video

解决 spring-cloud-starter-zipkin 启动错误

应用场景&#xff1a;Spring Boot 服务添加 Zipkin 依赖&#xff0c;进行服务调用的数据采集&#xff0c;然后进行 Zipkin-Server 服务调用追踪显示。 示例pom.xml配置&#xff1a; <parent><groupId>org.springframework.boot</groupId><artifactId>s…

什么是Microsoft Teams的App Studio

Teams的app studio很多用户可能不知道&#xff0c;但是对于一个teams平台的开发人员来说&#xff0c;这个是开发利器&#xff0c;利用这个工具你可以轻松的配置manifest文件&#xff0c;可以轻松的一站式创建teams app所需要的所有东西。而且你可以很方便的可视化配置adaptive …

Spring Cloud-鸿鹄Cloud分布式微服务云系统—架构图

这边结合了当前大部分企业的通用需求&#xff0c;包括技术的选型比较严格、苛刻&#xff0c;不仅要用业界最流行的技术&#xff0c;还要和国际接轨&#xff0c;在未来的5~10年内不能out。作为公司的架构师&#xff0c;也要有一种放眼世界的眼光&#xff0c;不仅要给公司做好的技…

Teams bot的调用限制

上个月Teams团队发布了对Teams app/bot调用api的频率的限制。这也从侧面说明Teams app越来越多&#xff0c;Teams团队需要优先保证Teams本身的计算资源&#xff0c;来提供流畅的用户体验。 具体的每个限制指标在这里&#xff1a; https://docs.microsoft.com/en-us/microsoftt…

Array的sort方法

作为一个刚开始学习的前端&#xff0c;小结一下&#xff1a;sort方法&#xff1a; 如果调用该方法时没有使用参数&#xff0c;将按字母顺序对数组中的元素进行排序&#xff0c;说得更精确点&#xff0c;是按照字符编码的顺序进行排序。要实现这一点&#xff0c;首先应把数组的元…

如何使用ARM创建Teams Bot所需要的Azure资源

相信很多devops已经全面开始使用ARM来创建azure资源了&#xff0c;ARM有很多方便的地方&#xff0c;比如简单易学&#xff0c;Infrastructure as Code&#xff0c;但是深入使用ARM开始会发现一些有待改进的方面。这篇文章主要是分享一下我在做Teams app的时候使用ARM来创建资源…

Bot Service自带的数据分析统计功能

每个产品上线后都希望自己能实时看到多少用户在使用我的产品&#xff0c;我的服务&#xff0c;有多少使用量&#xff0c;有没有遇到问题。市面上做用户数据、行为分析的公司也不少&#xff0c;但是大多数都需要我们修改一些代码来集成第三方的sdk库。 我的teams app上线后也急…

LuckyDraw bot有幸被提名为微软2019的People's Choice app

上个月微软进行了一个全世界提名活动&#xff0c;目标是选出微软2019年度People’s Choice app。 很幸运&#xff0c;我的LuckyDraw bot得到了来自世界各地使用者的投票&#xff0c;其中也包含Teams中国社区和很多朋友的支持。 https://developer.microsoft.com/en-us/microso…

图灵社区 和 大家网

http://www.ituring.com.cn/ http://club.topsage.com/ 大家论坛 http://www.topsage.com/ http://www.dxbbba.com/ 大学生必备吧 转载于:https://www.cnblogs.com/onelikeone/p/9023267.html

Teams内嵌的卡片image的限制

我的LuckyDraw上线后收到了不少有价值的反馈&#xff0c;其中有一部分是针对图片的&#xff0c;有一些用户说他们填写了image的url&#xff0c;但是图片显示不出来。 实际上这个问题在我提交这个应用到微软审核团队的时候&#xff0c;审核团队也提出了类似问题。但这个是Teams本…

Python 面向对象编程(进阶部分)

静态方法&#xff1a; 通过 staticmethod 装饰器即可把其装饰的方法变为一个静态方法。普通的方法&#xff0c;可以在实例化后直接调用&#xff0c;并且在方法里可以通过self.调用实例变量或类变量&#xff0c;但静态方法是不可以访问实例变量或类变量的&#xff0c;一个不能访…

分享实录|争议不断地EOS,我们如何才能理性看待?

1 EOS基本介绍 EOS是Block.One公司正在研发的一个区块链底层公链系统&#xff0c;目的是解决现有的区块链应用性能低、安全性差、开发难度高以及过度依赖手续费的问题&#xff0c;实现分布式应用的性能扩展。EOS提供帐户&#xff0c;身份验证&#xff0c;数据库&#xff0c;异步…

Teams的Incoming Webhook

我在去年的一篇文章里介绍过Teams的outgoing webhook&#xff0c;这个可以用来实现一个简单的用户和service对话机制。 Teams除了outgoing webhook以外&#xff0c;还有一个incoming webhook&#xff0c;从名字上我们也可以立刻知道&#xff0c;这个webhook是用来处理进入Team…

Comet OJ - Contest #0题解

传送门 菜爆了……总共只有一道题会做的……而且也没有短裙好难过 为啥必须得有手机才能注册账号啊喂……歧视么…… \(A\) 解方程 推一下柿子大概就是 \[x-\sqrt{n}yz2\sqrt{yz}\] 如果\(\sqrt{n}\)是无理数&#xff0c;那么就是 \[xyz,{n\over 4}yz\] 那么要满足\(n\)必须是\…

tornado 08 数据库-ORM-SQLAlchemy-表关系和简单登录注册

tornado 08 数据库-ORM-SQLAlchemy-表关系和简单登录注册 引言 #在数据库&#xff0c;所谓表关系&#xff0c;只是人为认为的添加上去的表与表之间的关系&#xff0c;只是逻辑上认为的关系&#xff0c;实际上数据库里面的表之间并没有所谓的表关系 一、一对一表关系 Module #需…

Teams的manifest文件开始支持多语言

Teams发展速度飞快&#xff0c;Teams app的manifest文件schema也迎来了版本1.5&#xff0c;在这个版本里&#xff0c;很大的一个改进是支持多语言。 让我们一起来看看&#xff0c;如何在manifest文件里配置多语言。 1&#xff0c;我们需要先把manifest文件设置成v1.5 {"…