网站首页 > 教程文章 正文
上次做的CRM项目,虽然实现了报价转订单的功能,但是客户还是遇到使用不方便的问题,客户的业务流程中,审核报价的时候是需要提供销售人员与客户的聊天记录截图,这都是在手机上的,电脑操作不方便,而且每次提交了报价还要在微信上跟主管说一声,于是他们就在钉钉上使用报价审批功能,希望可以将钉钉的数据对接到系统内,流程是:销售人员使用钉钉进行报价的审批,审批通过的报价会对接到系统并生成一个销售单和对应的应收。
要实现这个功能,我使用了平台提供的API功能,第一次使用白码平台的API功能,没想到还提供了对接各大平台封装好的api,包括有钉钉、微信服务号、企业微信、微信支付。
对接流程如下:
1.因为是由钉钉的流程触发系统的接口,所以需要设置一个回调接口(webhook),根据钉钉官方的开发文档,需要先注册回调,注册回调就需要用平台的云函数和webhook了。根据平台提供的扩展库,写出如下注册回调的云函数和webhook,直接在平台上测试就能注册回调了。
async function run($input,$output,$modules = modules){
let dingTalkApi = $modules.dingTalkApi;
let registerCallBack = await dingTalkApi.registerCallBack({
call_back_tag:["bpms_instance_change"],//审批状态变更回调
token:"",
aes_key:"",
url:""
});
$output.res = registerCallBack;
}
async function hook($req,$resp,$modules = modules){
let dingTalkApi = $modules.dingTalkApi;
let helper = $modules.helper;
let data = null;//收到的数据
//用于验证钉钉回调
let token = await helper.getConfig("token")
let aesKey = await helper.getConfig("aesKey")
let corpid = await helper.getConfig("corpid");
let {timestamp,nonce} = $req.query;
let result = dingTalkApi.instanceCrypto({
token,
encodingAESKey:aesKey,
CorpId:corpid,
timestamp,
nonce
});
$resp.body = result;
//加密信息
let encrypt = $req.body.encrypt;
if(encrypt){
let msg = await dingTalkApi.msgCrypt.decrypt(encrypt);
if(msg.message){
data = JSON.parse(msg.message);
}
}
}
2.注册好回调后,就需要调整webhook的代码逻辑了,因为之后钉钉的审批实例状态有变更时都会执行webhook的代码。
async function hook($req,$resp,$modules = modules){
let dingTalkApi = $modules.dingTalkApi;
let helper = $modules.helper;
let data = null;//收到的数据
//用于验证钉钉回调
let token = await helper.getConfig("token")
let aesKey = await helper.getConfig("aesKey")
let corpid = await helper.getConfig("corpid");
let {timestamp,nonce} = $req.query;
let result = dingTalkApi.instanceCrypto({
token,
encodingAESKey:aesKey,
CorpId:corpid,
timestamp,
nonce
});
$resp.body = result;
//加密信息
let encrypt = $req.body.encrypt;
if(encrypt){
let msg = await dingTalkApi.msgCrypt.decrypt(encrypt);
if(msg.message){
data = JSON.parse(msg.message);
}
}
let processCode = data.processCode;
if(processCode == "PROC-C0640453-0814-4D29-9A11-B6DF548C57ED"){
let processInstanceId = data.processInstanceId;//审批实例id
let result = data.result;
let type = data.type;
if(result == "agree" && type == "finish"){
//调用功能,生成订单和应收
await $modules.program.exec("5f471de7d67c5c69ae4f5b6c",{
"5eb9416bb75b4176eca49a17":{
"5f471caa00d5f969b43eefb1":processInstanceId
}
});
}
}
}
3.当客户在钉钉上审批通过了一个报价后,就会触发这个webhook,webhook再调用功能来生成一个订单和应收,这个功能里也包含了调用API的步骤,根据审批实例id获取审批实例的详情,里面就包含了报价的信息,获取到报价信息就可以录入到系统中了。
4.测试结果
5.整个流程下来,结合了钉钉的流程管理和白码的数据处理功能,提高了整个销售团队的销售效率。
猜你喜欢
- 2025-05-14 alma8飞速搭建zabbix6、微信报警、windows、linux、交换机监控
- 2025-05-14 0基础上手python、PHP编程,域自助服务台,自助改密解锁等功能
- 2025-05-14 完整的企业微信 API 接口调用教程:快速调用
- 2025-05-14 说说我为什么开始放弃 Spring Framework
- 2025-05-14 如何利用企业微信做一个免费发送微信消息的站点
- 2025-05-14 zabbix监控-第三章-第二节 实现微信报警
- 2025-05-14 一小时学会用Python开发微信AI机器人:从零到企业级应用实战
- 2025-05-14 有成CRM无代码集成连接解决方案
- 2025-05-14 一文看懂企业微信开发简易教程
- 2025-05-14 企业微信开发平台接入流程
- 最近发表
-
- 绝区零:公测必看!300菲林兑换码、萌新补给一览!切勿踩坑!
- 事半功倍 轻松制作可交互移动原型
- LOL英雄联盟美服注册教材 教你玩转美服
- 「正点原子Linux连载」第五十八章Linux INPUT子系统实验(一)
- 如何轻松薅Cursor羊毛:用免手机号邮箱快速注册
- C/C++基础语法复习(一):C++与C语言的区别,主要有这些
- 永久免费的高配容器Clawcloud,超爽体验!
- Spaceship低价注册域名 | 每年5元不到 | XYZ域名 | 托管cloudflare
- 云杉网络DeepFlow基于Free5GC的方案示例
- alma8飞速搭建zabbix6、微信报警、windows、linux、交换机监控
- 标签列表
-
- location.href (44)
- document.ready (36)
- git checkout -b (34)
- 跃点数 (35)
- 阿里云镜像地址 (33)
- qt qmessagebox (36)
- md5 sha1 (32)
- mybatis plus page (35)
- semaphore 使用详解 (32)
- update from 语句 (32)
- vue @scroll (38)
- 堆栈区别 (33)
- 在线子域名爆破 (32)
- 什么是容器 (33)
- sha1 md5 (33)
- navicat导出数据 (34)
- 阿里云acp考试 (33)
- 阿里云 nacos (34)
- redhat官网下载镜像 (36)
- srs服务器 (33)
- pico开发者 (33)
- https的端口号 (34)
- vscode更改主题 (35)
- 阿里云资源池 (34)
- os.path.join (33)