近几年来,电商行业竞争变得愈加激烈,公域流量获客成本越来越高,电商平台规则也越来越严格,数据无法出塔,商家无法自主运营用户群等等原因,很多大品牌纷纷开始搭建自有商城,运营私域流量,以此来降低获客成本和提高用户复购,增加公司营收。自建商城,物流模块是非常重要的一环,物流模块的好坏决定了消费者的购物体验,决定自有商城运营的效率和成本。那自有商城物流模块该自建还是接入第三方物流平台呢?
自建商城中,物流模块都涉及哪些主要功能点呢?
1、下单——消费者购买物品后,商家需向快递公司下单,委托快递公司把物品邮寄给到消费者手中,下单寄件还会涉及到运费、运费险、代收货款、保价等等很多服务。
2、打单发货——仓库收到订单后,进行拣货打包,然后打印电子面单贴至物品上,等待快递员上门揽件
3、查轨迹——消费者会在商城中查看自己所购物品当前物流状态,预计什么时候可签收。或者消费者电话客服获取物品状态,这时商家也会在商城后台查看物品的物流状态等场景下都需查看物流轨迹。
4、业务流程处理——主要是系统自动触发的业务流,如物品的物流节点到达什么状态会自动触发相应的业务处理,减少人工操作,提效能。如订单发货后短信提醒消费者注意签收,出现问题件时触发商家客服系统,及早介入处理,减少退货和投诉的发生等等。
5、业务监控——监控商城所有发出货品的状态,监控有无问题件,监控发货时效,监控物流商质量等等。
6、逆向退货——消费者发起退货请求,平台可调度快递员预约上门取件,优化退货流程和体验,提高服务体验。
针对上述功能,企业到底是选择自建还是对接第三方呢,咱们来好好对比一下
| 类别 | 自建 | 第三方 |
| 功能复杂度 | 复杂度高,上述功能中,各家快递公司水平不一致,有些快递公司有现成产品直接对接使用即可,有些快递公司没有,需要企业自行组合,设计出符合自有系统的功能 | 复杂度低,上述功能中,第三方平台都有与之对应的产品,接入即可使用,且第三方平台产品都有抽象封装,所有快递公司标准统一 |
| 对接次数 | 多,商城需要使用多少家快递公司就需要进入多少家,保守估计一个全国商城系统至少接入的快递公司得2位数以上 | 少,第三方平台聚合了多家快递公司,只需接入1家即可,或多接入一家做备份 |
| 开发周期 | 长,每对接一家快递公司都需要繁琐的流程,而且每家都不一样,平均算每接入一家需要3天,接入20家就需要60天,还不算统一封装产品的时间 | 短,接入一家第三方平台最多2天即可,而且支持的快递公司数量更多 |
| 维护成本 | 高,每家快递公司升级时都需要调整,有新增快递公司需求也需要重新对接 | 低,只需维护1家,而且平台支持的快递公司还在持续不停的扩 |
| 灵活性 | 高,都是自建,想怎么设计就怎么设计 | 低,标准产品,自定义没那么灵活,产品升级周期平台有自己的规则,当然体量大的客户话语权高一些 |
| 总结 | 上述列了各自的优缺点,企业可根据自身情况选择,各有优缺点,个人更倾向于选择接入第三方物流平台,简单,而且也相信专业人做专业事,平台留出更多精力做引流获客,增加营收的事情。 | |
通过前面的对比分析,相信大家心里已经做出了选择,如果我们选择的是自建物流,整体的流程大概是:产品设计-->物流公司商务合作-->对接联调-->试运营-->开放使用。根据每家快递公司不一样,商务和对接会稍许不同。如果选择第三方物流平台,那我们该如何对接呢,下面以快递鸟为例,给大家做讲解。
第一、申请账号
访问快递鸟注册页面进行账号注册,按页面提示,完成账号注册和完善资料,账号注册成功后可在用户中心查看获得用户ID和Key,同时在用户中心顶部点击申请开通试用套餐,这样子对接前期准备工作就完成了,使用ID和Key即可进行调用。
第二、选择产品
快递鸟针对不同行业有不同的解决方案和产品,我们可以访问官网产品页面了解具体每个产品是解决什么问题,选择适合我们的产品进行对接即可,这里挑几个说明介绍。
1、在途监控——轨迹产品,客户只需把快递单号传递给到快递鸟,快递鸟会对快递单进行监控,当物流轨迹发生变化时,主动推送信息给到企业系统,企业系统收到信息后做相应的业务处理即可。
2、快递查询——传递快递单号给到快递鸟,快递鸟会实时的返回当前最新物流轨迹。
3、电子面单——客户调用电子面单,向快递公司下单,同时根据客户的设置返回电子面单信息及模板,客户可直接打印模板或根据信息重新定制电子面单样式打印。
4、物流短信——结合在途监控使用,可设置物流节点短信通知,例如发货后发短信通知收货人快递已发出,注意签收,快递出现问题件时,短信提醒客服注意处理等。
5、上门取件——主要解决逆向退货问题,平台接入上门取件功能后,消费者发生退货时可预约快递员上门取件,提升服务体验和内部工作时效。
6、即时配——主要针对即时快递配送,对时效要求高的客户客接入。
7、物流导盲犬——大数据产品,帮组客户分析数据,辅助决策使用。
第三、技术对接
快递鸟提供各种语言版本Demo和详细的对接文档,选择好产品后,下载技术对接文档,根据文档说明对接相应产品即可,快递鸟提供一对一服务群,对接过程遇到任何问题可在群里寻求帮组。
第四、上线使用
完成对接后,进行联调测试,双方确认数据无误后即可投产使用。
好了,电商平台物流模块建设方案介绍完毕,如有问题或不清楚的地方可留言讨论。
如果对您有帮助劳烦帮忙点个赞,收藏关注一下,可以相互学习共同进步。
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
我有一个字符串input="maybe(thisis|thatwas)some((nice|ugly)(day|night)|(strange(weather|time)))"Ruby中解析该字符串的最佳方法是什么?我的意思是脚本应该能够像这样构建句子:maybethisissomeuglynightmaybethatwassomenicenightmaybethiswassomestrangetime等等,你明白了......我应该一个字符一个字符地读取字符串并构建一个带有堆栈的状态机来存储括号值以供以后计算,还是有更好的方法?也许为此目的准备了一个开箱即用的库?
我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看rubyzip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
这似乎应该有一个直截了当的答案,但在Google上花了很多时间,所以我找不到它。这可能是缺少正确关键字的情况。在我的RoR应用程序中,我有几个模型共享一种特定类型的字符串属性,该属性具有特殊验证和其他功能。我能想到的最接近的类似示例是表示URL的字符串。这会导致模型中出现大量重复(甚至单元测试中会出现更多重复),但我不确定如何让它更DRY。我能想到几个可能的方向...按照“validates_url_format_of”插件,但这只会让验证干给这个特殊的字符串它自己的模型,但这看起来很像重溶液为这个特殊的字符串创建一个ruby类,但是我如何得到ActiveRecord关联这个类模型
假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于
我试图在一个项目中使用rake,如果我把所有东西都放到Rakefile中,它会很大并且很难读取/找到东西,所以我试着将每个命名空间放在lib/rake中它自己的文件中,我添加了这个到我的rake文件的顶部:Dir['#{File.dirname(__FILE__)}/lib/rake/*.rake'].map{|f|requiref}它加载文件没问题,但没有任务。我现在只有一个.rake文件作为测试,名为“servers.rake”,它看起来像这样:namespace:serverdotask:testdoputs"test"endend所以当我运行rakeserver:testid时
出于纯粹的兴趣,我很好奇如何按顺序创建PI,而不是在过程结果之后生成数字,而是让数字在过程本身生成时显示。如果是这种情况,那么数字可以自行产生,我可以对以前看到的数字实现垃圾收集,从而创建一个无限系列。结果只是在Pi系列之后每秒生成一个数字。这是我通过互联网筛选的结果:这是流行的计算机友好算法,类机器算法:defarccot(x,unity)xpow=unity/xn=1sign=1sum=0loopdoterm=xpow/nbreakifterm==0sum+=sign*(xpow/n)xpow/=x*xn+=2sign=-signendsumenddefcalc_pi(digits