在企業微信上只能設置統一的新客戶歡迎語,所以咱們經過API來實現爲對每一個成員設置個性化歡迎語。html
白碼低代碼平臺(該平臺是低代碼代發平臺,提供企業微信API,可直接調用,減小前期配置調試工做)node
使用node.js開發git
請結合如下內容閱讀:github
一、建立「新客戶歡迎語」數據表以存儲成員的歡迎語數據。
二、建立上傳臨時素材的雲函數。
配置API參數:
代碼:json
async function run($input, $output, $modules = modules) { let image_url = $input.image_url; let mediaName = new Date().getTime() + ".png"; //上傳臨時素材 let media = await modules.wxworkApi.uploadMediaByUrl(image_url, "image", mediaName); //輸出 $output.media_id = media.media_id; $output.created_at = media.created_at; }
三、建立新建歡迎語功能(根據需求自行構建),並調用「上傳臨時素材」雲函數:
四、建立發送新客戶歡迎語云函數,並建立一個功能調用它。
配置:
代碼:小程序
async function run($input, $output, $modules = modules) { let commonWelcomeQuery = await modules.data.queryData("5f4647d829fa640a919d57ff", { "5f464815e233c00a9094345e": "通用" }); if (commonWelcomeQuery.length > 0) { //初始化爲通用歡迎語 let welcome = commonWelcomeQuery[0]; //根據userid查詢成員的歡迎語 let welcomeQuery = await modules.data.queryData("5f4647d829fa640a919d57ff", { "5f46482d29fa640a919d5801": $input.userid }); welcome = welcomeQuery.length > 0 ? welcomeQuery[0] : welcome; let nowTime = new Date().getTime(); //歡迎語初始化爲發送文本內容 let msgData = { welcome_code: $input.welcomeCode, text: { content: welcome["5f46483929fa640a919d5802"] } }; let create_at = ""; let isExpired = false; let media_id = ""; switch (welcome["5f464af329fa640a919d5809"]) {//歡迎語類型 case "圖片": create_at = new Number(welcome["5f464de7e233c00a9094346e"] + "000"); isExpired = (nowTime - create_at) > 3 * 24 * 60 * 60 * 1000;//素材超過3天失效 media_id = welcome["5f464dc0e233c00a9094346d"]; if (isExpired) { //從新上傳圖片 let mediaName = new Date().getTime() + ".png"; let getMediaId = await modules.wxworkApi.uploadMediaByUrl(welcome["5f464dc0e233c00a9094346d"], "image", mediaName); media_id = getMediaId.media_id; //更新圖片素材 let form = { "5f464dc0e233c00a9094346d": getMediaId.media_id, "5f464de7e233c00a9094346e": getMediaId.created_at } modules.data.updateData("5f4647d829fa640a919d57ff", welcome._id, form); } //文本+圖片 msgData = { welcome_code: $input.welcomeCode, text: { content: welcome["5f46483929fa640a919d5802"] }, image: { media_id: media_id } }; break; case "圖文": //文本+圖文 msgData = { welcome_code: $input.welcomeCode, text: { content: welcome["5f46483929fa640a919d5802"] }, link: { title: welcome["5f46486329fa640a919d5804"], picurl: welcome["5f46487029fa640a919d5805"], desc: welcome["5f464878e233c00a90943460"], url: welcome["5f464881e233c00a90943461"] } }; break; case "小程序": create_at = new Number(welcome["5f464e10e233c00a90943472"] + "000"); isExpired = (nowTime - create_at) > 3 * 24 * 60 * 60 * 1000;//臨時素材超過3天失效 media_id = welcome["5f464e06e233c00a90943471"]; if (isExpired) { //從新上傳封面 let mediaName = new Date().getTime() + ".png"; let getMediaId = await modules.wxworkApi.uploadMediaByUrl(welcome["5f4722b4e233c00a90943587"], "image", mediaName); media_id = getMediaId.media_id; //更新小程序封面素材 let form = { "5f464e06e233c00a90943471": getMediaId.media_id, "5f464e10e233c00a90943472": getMediaId.created_at } modules.data.updateData("5f4647d829fa640a919d57ff", welcome._id, form) } //文本+小程序 msgData = { welcome_code: $input.welcomeCode, text: { content: welcome["5f46483929fa640a919d5802"] }, miniprogram: { title: welcome["5f464891e233c00a90943462"], pic_media_id: media_id, appid: welcome["5f4648a4e233c00a90943463"], page: welcome["5f4648afe233c00a90943464"] } }; break; } //發送歡迎語 modules.wxworkApi.request( { method: 'post', url: 'externalcontact/send_welcome_msg', data: msgData } ) } }
功能:
五、設置回調事件,在成員添加外部聯繫人時發送歡迎語(回調事件的具體實現過程可參考:Node.JS調用企業微信API:自建應用的回調事件)
代碼:api
async function hook($req, $resp, $modules = modules) { //get 請求用於驗證有效性 if ($req.method == "GET") { /** * 企業收到消息後,須要做以下處理: * 一、對msg_signature進行校驗 * 二、解密Encrypt,獲得明文的消息結構體(消息結構體後面章節會詳說) * 三、若是須要被動回覆消息,構造被動響應包 * 四、正確響應本次請求 * 以上1~2步驟能夠直接使用解密函數一步到位。 * 3步驟其實包含加密被動回覆消息、生成新簽名、構造被動響應包三個步驟,能夠直接使用加密函數一步到位。 */ $resp.body = await modules.wxworkApi.getVerifyMsg($req);//處理已封裝,可直接調用 } else if ($req.method == "POST") { //沒法保證在五秒內處理完成,先回復(企業微信服務器在五秒內收不到響應會斷掉鏈接) $resp.body = "success"; //處理 let handle = async () => { //將數據轉換成json let data = await modules.wxworkApi.getMsgData($req); if (data.Event == "change_external_contact" && data.ChangeType == "add_external_contact") {/**添加客戶事件*/ //調用功能,發送歡迎語 modules.program.exec( "5f4735ef00d5f969b43ef012",//功能follow { "5f47360000d5f969b43ef014": {//輸入參數步驟 "field_1598502473677": data.Userid,//userid "field_1598502477417": data.WelcomeCode//welcome_code } } ); handle() } } } }
至此已實現成員個性化歡迎語的功能。服務器