钉钉应用的坑
目标
就是为了实现一个老的CRM系统的联系人自动同步到钉钉的系统中去。
大概想法
首先想到用CRM和钉钉全部用API的方式,然后都可以实现无后端的服务,全部在前端小程序里实现。
现实情况
本来两侧的API都测试没啥问题了,但是突然老板说CRM侧还是用excel的方式导出吧,然后钉钉侧用API的方式来实现。所以我有得重新想办法。
办法一 用钉钉小程序
继续用钉钉小程序已基本上和钉钉测试API通讯是没有问题了,但是对于CRM侧的exce貌似一点办法都没有啊,也没有像H5里直接有file的API可以直接读取文件。没有办法。连个input type=“file”都给阉割掉了。这就很无语了。所以想到了方法二。同时还无法PC操作。
方法二 用H5的方式来创建
用H5读取excel是一点问题都没有了,不管是在PC还是手机上都可以读取到excel文件。但是到了钉钉这一侧的API发现杯具了。由于是想做一个无后端的纯前端架构,所以想到了用xmlHttpRequest的方式进行获取钉钉里的数据。但是问题就出现了钉钉把这个请求给屏蔽了,给block了。认为是跨域访问。拒绝提供服务。这就麻烦了,如果非想实现就得带后端服务器了。
方法三 继续用小程序
所以还得回到小程序的方式来实现。想着用钉钉里的downloadfile的方式从外部url网址里下载一个excel文件,然后再用npm安装一个fileAPI的包进行文件的读取和解析。这样再进行处理后再返回给钉钉服务器。明天继续按照这个思路进行测试。
方法三测试结果
终于可以用地址的方式读取到文件了,但是不是用的downloadfile的API,而是使用的request的API从外部网站上读取一个文件,然后文本方式显示出来。本来计划用一个csv的文件格式工具去格式化原始值,用NPM包安装了一个csv-parse包,非常完美,拿到了想要的值,但是问题是怎么编译都编译不过去啊。无奈自己编程序去解析CSV文件发现不行啊,识别的不好,拆分的也特别的差。看来是真的没有好的办法了。
最终结果
目前来看解决方案有:
- 不管是使用小程序还是H5的方式是都绕不开后端服务器了,没有后端服务器,小程序无法自己处理CSV文件,然后如果使用H5的方式无法请求钉钉的API。
- 全部使用excel的方式来实现,CRM里导出原始数据,然后再从钉钉了导出钉钉里最新的外部联系人清单,然后通过程序做交叉比较根据钉钉的规则生成需要的excel文件,再倒回到钉钉服务器里。完成。这样做可以成功。