在上文我們已經有了發起改變的覺悟和具體的改造方案了,這次我們就開始決定撸起袖子加油幹了。
開幹之前,需要确定一個TODO List:
- 首先在釘釘開放平台成為一個開發者
- 建立一個應用
- 快速浏覽一下API文檔
- 開始編碼
STEP 1. 成為釘釘開發者
首先從釘釘的官網,進入到開放平台。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5CZhhjZ0ITO5YzNhJGOxEDO5EGZ0MDZ3QmZlRmZykTNj9CX5d2bs92Yl1iclB3bsVmdlR2LcNWaw9CXt92Yu4GZjlGbh5yYjV3Lc9CX6MHc0RHaiojIsJye.png)
在開放平台,登入到開發者背景。
登入到開發者背景後,需要把自己的賬戶綁定到一個組織。大家可以先在釘釘上建立一個虛拟的組織用來上手體驗。
STEP 2. 建立一個應用
在我們的例子裡面,我們需要建立的是“企業内部開發”
建立的時候選擇“小程式”并填寫好應用名稱,應用描述,以及勾選開發方式為“企業自主開發”。
完成建立後,我們就能在應用清單當中看到我們剛剛建立的應用了。包括應用的APPKEY和APPSECERT等。
到這裡應用建立完成,記住應用的一些相關參數,我們在之後将會用到。
STEP 3. 快速浏覽一下API文檔
作為第一次開發釘釘的應用,雖然不是所有的接口我們都會用到,但是快速浏覽一次文檔對于我們對釘釘的API接口内容會有一個大概的認識。以及整理出我們本次将會用到的一些接口。
快速浏覽完文字後,我們可以了解整體的開發過程我們将會經過下面的過程。
接口名稱 | 路徑 | 備注 | |
擷取access_token | https://oapi.dingtalk.com/gettoken | 服務端API->擷取access_token | 擷取access_token用于其他接口使用。 |
擷取審批執行個體ID清單 | https://oapi.dingtalk.com/topapi/processinstance/listids | 服務端API->智能工作流->官方工作流->擷取審批執行個體ID清單 | 獲得審批清單 |
擷取審批執行個體詳情 | https://oapi.dingtalk.com/topapi/processinstance/get | 服務端API->智能工作流->官方工作流->擷取審批執行個體詳情 | 擷取審批詳情 |
下載下傳流程附件 | https://oapi.dingtalk.com/topapi/processinstance/file/url/get | 服務端API->智能工作流->官方工作流->下載下傳流程附件 | 擷取流程附件 |
撤銷申請 | https://oapi.dingtalk.com/topapi/process/instance/terminate | 服務端API->智能工作流->官方工作流->撤銷審批執行個體 | 判斷 |
STEP 4. 開始編碼
在收集好需要使用的接口後,我們就準備開始進行我們正式的編碼了。我們所期望的整體流程如下。
在整個過程當中,我們一共會經理9個步驟。(由于之前考慮欠佳我們目前使用的還是用定時任務來定期執行。現在想起來我們應該用函數計算來做到間隙更小)
- 發起請求擷取access_token并且存儲:
伺服器發起一個請求去擷取access_token.這裡需要用到之前我們建立的應用的app_key與app_sercet。如果擷取成功,則能夠擷取到一個access_token,以及過期時間。
【在實際應用中我們可以把擷取到的資料進行存儲,每次請求之前判斷一下access_token是否過期,如果過期則重新擷取并更新一下,如果沒有過期,則直接使用。】
- 向DingTalk Server發起請求,擷取流程ID清單:
如果需要獲得所有的流程詳情,需要首先獲得該流程的ID清單後,再通過process_instance_id去更新該流程的相信資訊。
在官方接口當中,調用“擷取審批執行個體ID清單”需要傳入一個process_code。 這個process_code 的擷取方式可以在編輯某個流程時看得到,如下圖:
最後擷取到的資料如下,
可能擷取到的資料并不是我們想要看到的。我們通常在審批表單當中看到的最多的是一串年月日加占位的編号。
此刻,我們就需要調用我們下一個接口。
- 根據process_instance_id擷取審批執行個體
在這裡我們可以直接通過之前擷取到的清單,循環調用擷取審批執行個體詳情接口。但是這裡需要值得注意的是,該接口傳回的資料特别多。主要分成以下幾個大塊:
- 流程主體詳情,如流程編号,流程标題,建立時間,完成時間等。
- 流程任務記錄,傳回流程曆史審批情況。(注:如果一個流程包含5個審批節點,目前正在第2個節點,接口并不會傳回所有的節點資料。因為不同的流程可能會被加簽或者轉交,流程的審批節點并不是一直固定的)
c.流程操作記錄,該資料是直接記錄整支流程的具體步進或者步退的内容。
這裡為了便于記憶,我們可以帶入概念 oa_process(流程主體),oa_process_task(流程任務),oa_process_op_rec (流程操作記錄).
4. 根據流程詳情擷取附件
如果流程涉及到附件,我們使用該接口把附件進行擷取。并根據格式做成一個表來進行存放。
回顧一下,截止此刻。當我們的程式進行運作後,我們可以擷取到所需要process_code的所有資料了。按照之前的規劃,我們隻需要進行一些邏輯判斷即可。
我們可以嘗試把所需要的流程的第一個審批人設定為一個特定的審批人(Scott)。我們的程式在每次運作的時候進行判定,當審批人出現特定人(Scott)的時候,我們直接開始調用我們的審批判斷接口,并通過傳回False 或者 True來決定該流程是否需要通過或者結束。
最終的效果圖如下:
寫在最後,當我們的第一個流程上線之後,因為機器驗證直接解決了我們的三個問題。流程最終流轉的效率比以往增加了很多。
當這個應用部署完成後,我們又發現了一些其他可以改進的地方,下一個章節,我們來看我們如何讓機器人自動去伺候各個申請人與審批人主子。
在開發的時候,小夥伴一定需要注意以下事項:
白名單:釘釘應用在進行通路的時候有白名單限制,需要在開發者背景進行設定。
應用權限:根據不同的需求,不同的應用需要調用通信錄或者其他權限,這部分也應該在開發者背景設定。
拉取時間限制:在拉取審批清單的時候,建議使用建立時間區間進行。區間範圍看運作頻率來設定,一般不超過10天。(主要取決流程整體的完成時間)