-
Notifications
You must be signed in to change notification settings - Fork 171
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Discuss: whether the sms API definition needs to be modified; 讨论一下是否需要修改sms API定义 #966
Comments
Hi @alilestera, |
我来补充回答一下会上提到的七牛云sms的响应体结构比较简单的问题。
|
目前看下来,对于批量发送短信的场景,大致有两种处理思路: 方案A: 方案B:
我比较倾向于方案B,无论是单个手机号发送还是批量发送语义更清晰一些。 @kevinten10 有没啥建议?😁 |
方案B的SendStatus还需要一个字段来表明这是哪个手机号的状态。但是问题很明显,这需要云服务的响应体的支持才能填入这个字段。 |
支持方案B 有一个场景不清楚是否要考虑:短信由于供应商的长度限制,调用sms api的内容如果长度过长,底层是否可能会截成几条,相当于可能调用多次供应商的api?这样1个sms api request可能对应response里多个响应体,是否需要一个id能够串联起来。 |
再脑洞一下:短信是一种比较昂贵的发送方式,如果能缩减内容长度,那么有可能缩减发送成本。是否在api上允许传入编码类型,然后对内容使用指定编码,以此来达到缩减字符长度的作用呢 |
会议结论:
对于response中的其他信息(如手机号等)可以按需提取到 |
@zhenjunMa 我们目前的做法就是主观地把我们认为有用的云sms响应信息放入 那么我现在的目标就是先确定国内云服务提供商sms的哪些字段信息需要放入 |
我这里还有一个以不变应万变的方法:可以给请求加一个 大概的实现可以是: 接着问题是 type OptionHandler func(*Response)
var MetaOption map[string]OptionHandler {
"xxxxxx.xxxx": aHandler,
}
func aHandler(resp *Response) {
// ...
// implement it
} for _, field := range MetaExtra {
if op, ok := MetaOption[field]; ok {
op(resp)
}
} ... 不过目前还是先按照讨论好的结果来弄,如果我上述的方法能够得到认同,以后再改也是可以的。 |
这种交互方式有点复杂, 我们最终的效果是应该是所有的返回都加入到meta里面,让用户按需读取,不需要加一步用户来指定加入哪些附加信息,现阶段只是因为全部加入到附加信息有些困难,所以才选择性加入 |
@zhenjunMa 对于要在 |
|
由于不同云服务提供商的SMS API差异较大,例如腾讯云和华为云的都有 因此,需要告知用户这个 // The status set of SMS.
// Not supported by qiniucloud.
repeated SendStatus results = 2; // The send status metadata returned from SMS service.
// 1. PhoneNumber, is the phone number SMS send to.
// Supported by tencentcloud and huaweicloud.
map<string, string> metadata = 3; 这种做法/写法是否正确?如果不合理的话,应该怎么做? |
@alilestera 可以,就按照你这种做法搞就行。 |
@zhenjunMa 好的,那我接下来就先修改sms的proto文件,然后开发腾讯云的sms组件。 proto文件中的注释应该根据目前layotto支持的组件来写,所以我会先在proto文件中这样写注释 // The send status metadata returned from SMS service.
// Include `PhoneNumber`.
// 1. PhoneNumber, is the phone number SMS send to.
// This field supported by tencentcloud.
map<string, string> metadata = 3; 完成proto文件的修改、生成代码和文档后,我会对此提一次PR。 下一步接着开发腾讯云的sms组件,完成后再提一次PR。 这样的流程可以吗? |
@alilestera 好的👍👏 |
Why
当我为sms API开发腾讯云sms的组件时,发现目前pb定义的API不能很好地适配腾讯云sms,但却能很好地适配阿里云sms。说明现在的API定义可能适配性不强。
因此,在2023-07-05的layotto会议讨论后,我们决定重新调研更多云服务厂商的sms api定义,并以调研结果来讨论一下是否需要修改目前的sms API定义。
Result
我目前收集了以下厂商的sms API字段的定义,并添加了一些自己理解到的信息进注释里。由于某些原因,对每个云服务厂商的信息收集得可能不够全,特别是最后三个服务厂商。
文档地址: https://www.yuque.com/alilestera/record/atx6993nmh40twvg?singleDoc# 《不同云服务厂商的短信服务API定义》
Opinion
目前的国内云服务厂商提供的sms的文档比较清晰、简单,且符合国内多数应用的短信需求; 而其他云服务厂商的sms要么是跟其他类型的消息混用、携带的其他信息比较多,要么是需要的请求参数和实现与其他的差异较大。所以我们目前可以优先考虑根据国内云服务厂商的sms来定义API,其他的云服务厂商的sms仅用作参考。
欢迎大家来参考、讨论
The text was updated successfully, but these errors were encountered: