大数跨境

「重度用户分享」成员个性化新客户欢迎语的nodejs实现

「重度用户分享」成员个性化新客户欢迎语的nodejs实现 白码
2020-09-28
2

点击蓝字


关注我们

这一次“重度用户分享的这位白码用户,尝试使用白码使用的企业微信API库来实现在企业微信设置成员个性化欢迎语,一起来看看他是怎么运用白码平台来实现的吧!


成员个性化新客户欢迎语的nodejs实现

来自  白码用户 @加冰不可乐 的分享

目标

在企业微信上只能设置统一的新客户欢迎语,因此我们通过API来实现为对每个成员设置个性化欢迎语。


实现环境

白码低代码平台(该平台提供企业微信API,可直接调用,减少前期配置调试工作)


平台语言

使用node.js开发


准备工作

1、准备一个企业微信管理员账号

2、获取成员信息

请结合以下内容阅读:

1、企业微信上传临时素材

2、企业微信发送新客户欢迎语API

3、企业微信添加客户回调事件

4、白码使用的企业微信API库


实现步骤

1、创建“新客户欢迎语”数据表以存储成员的欢迎语数据。

欢迎语数据表


2、创建上传临时素材的云函数。

配置API参数

参数细节

代码:


向上滑动阅览


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;

}




3、创建新建欢迎语功能(根据需求自行构建),并调用“上传临时素材”云函数:

按需搭建功能

调用上传临时素材的云函数

云函数细节

保存素材id

细节


4、创建发送新客户欢迎语云函数,并创建一个功能调用它。

配置

配置细节

代码:


向上滑动阅览


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

            }

        )

    }

}


功能:

配置参数

参数细节


5、设置回调事件,在成员添加外部联系人时发送欢迎语。

代码:


向上滑动阅览


async function hook($req, $resp, $modules = modules) {

 

    //get 请求用于验证有效性

    if ($req.method == "GET") {

        /**

         * 企业收到消息后,需要作如下处理:

         * 1、对msg_signature进行校验

         * 2、解密Encrypt,得到明文的消息结构体(消息结构体后面章节会详说)

         * 3、如果需要被动回复消息,构造被动响应包

         * 4、正确响应本次请求

         * 以上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()

            }

        }

    }

}



至此已实现成员个性化欢迎语的功能。



再次感谢白码用户@不加冰可乐的精彩分享~

也欢迎各位白码用户可以根据文章内容,自己实操感受一下,有更好的思路想法也可以发出来和我们分享,与白码其他用户一起交流~


往期 · 推荐

用白码,5分钟就可以实现客户去重!

用白码10分钟实现一个表单应用

无代码开发5分钟就能完成CRUD功能

手把手教你用白码快速解决CRM角色权限问题

用白码,5分钟实现自定义Excel批量导入功能

白码

扫二维码|添加小助理微信

有任何问题

都可以咨询小助理哦

这里“阅读原文”,了解更多白码信息

【声明】内容源于网络
0
0
白码
白码无代码 | 低代码开发平台可以帮助开发者和企业技术开发团队增加软件开发速度,降低开发成本,达到降本增效的目的。用户可以通过白码,按照企业所需自行定制ERP,CRM,OA等软件;成为白码开发者,把想法快速变成软件吧。
内容 125
粉丝 0
白码 白码无代码 | 低代码开发平台可以帮助开发者和企业技术开发团队增加软件开发速度,降低开发成本,达到降本增效的目的。用户可以通过白码,按照企业所需自行定制ERP,CRM,OA等软件;成为白码开发者,把想法快速变成软件吧。
总阅读166
粉丝0
内容125