低代碼開發,快速對接釘釘實現報價審批功能

上次作的CRM項目,雖然實現了報價轉訂單的功能,可是客戶仍是遇到使用不方便的問題,客戶的業務流程中,審覈報價的時候是須要提供銷售人員與客戶的聊天記錄截圖,這都是在手機上的,電腦操做不方便,並且每次提交了報價還要在微信上跟主管說一聲,因而他們就在釘釘上使用報價審批功能,但願能夠將釘釘的數據對接到系統內。html

流程是:銷售人員使用釘釘進行報價的審批,審批經過的報價會對接到系統並生成一個銷售單和對應的應收。
要實現這個功能,我使用了白碼平臺提供的API功能,第一次使用平臺的API功能,沒想到還提供了對接各大平臺封裝好的api,包括有釘釘、微信服務號、企業微信、微信支付。
低代碼開發,快速對接釘釘實現報價審批功能web

對接流程以下:

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.整個流程下來,結合了釘釘的流程管理和白碼的數據處理功能,提升了整個銷售團隊的銷售效率。

相關文章
相關標籤/搜索