美文网首页
开发者模式如何开启客服功能?

开发者模式如何开启客服功能?

作者: 姜治宇 | 来源:发表于2022-09-29 16:46 被阅读0次

    公众号的开发者模式和编辑模式是互斥的,二者只能选其一。
    一旦我们开启了开发者模式,比如自定义菜单,消息自动回复等功能都是无法使用的,需要在服务端写接口支持。
    我们首先需要开启服务端的支持,在设置与开发->基本配置里面,把服务器地址配置一下。这里就写一个路由地址就可以。

    1.png
    以node框架nestjs为例,比如我配置了http://xxx.com/auth/weServiceAuth,相应的就写一个控制器就行。
    下面我们看一下文档。 2.png
    好多人看到这样的文档都一脸懵逼,不知道如何使用。其实很简单,他的意思就是把这段xml发送出去就可以了。直接上代码:
    import { Controller, Request, Post, Res, Req } from '@nestjs/common';
    import { Response } from 'express';
    const getRawBody = require('raw-body');
    const contentType = require('content-type');
    @Controller('auth')
    export class AuthController {
        constructor() { }
        @Post('weServiceAuth')
        async weServiceAuth(@Res() res: Response, @Req() req: Request) {
    
            // 返回给微信的信息是application/xml格式
            res.writeHead(200, { 'Content-Type': 'application/xml' });
            // 拿到全局ACCESS_TOKEN
            const ACCESS_TOKEN = await this.weServiceTOKEN();
            const data = getRawBody(req, {
                length: req.headers['content-length'],
                limit: '10mb',
                encoding: contentType.parse(req).parameters.charset
            }, async (err, buf) => {
                const message = await this.formatMessage(buf.toString());//从微信接收的消息
                console.log('message', message);
                if (message.MsgType.toLowerCase() === 'event') { //事件类型
                    //比如扫码登录类型事件
                    if (message.Event.toLowerCase() === 'scan') {
                        //鉴权后,回复用户登录成功
                        const msg = {
                            FromUserName: message.FromUserName,
                            ToUserName: message.ToUserName,
                            reply: '登录成功'
                        };
                        let replyXml = this.textWXMsg(msg);
                        res.end(replyXml);
                    } else if (message.Event.toLowerCase() === 'subscribe') {
                        //订阅公众号类型事件
                        const msg = {
                            FromUserName: message.FromUserName,
                            ToUserName: message.ToUserName,
                            reply: '肥肠感谢您的关注'
                        };
                        let replyXml = this.textWXMsg(msg);
                        res.end(replyXml);
                    }
                } else {
                    //其他行为统统转到客服
                    let result = {
                        FromUserName: message.FromUserName,
                        ToUserName: message.ToUserName
                    };
                    const replyXml = this.toCustomer(result);
                    res.end(replyXml);
                }
            });
        }
        // 回复消息,xml格式
        textWXMsg(message) {
            const createTime = parseInt(new Date().getTime() / 1000);
            return `<xml>
                        <ToUserName><![CDATA[${message.FromUserName}]]></ToUserName>
                        <FromUserName><![CDATA[${message.ToUserName}]]></FromUserName>
                        <CreateTime>${createTime}</CreateTime>
                        <MsgType><![CDATA[text]]></MsgType>
                        <Content><![CDATA[${message.reply}]]></Content>
                    </xml>`
        }
        //客服消息,xml格式
        toCustomer(message) {
            const createTime = parseInt(new Date().getTime() / 1000);
            return `<xml> 
                        <ToUserName><![CDATA[${message.FromUserName}]]></ToUserName>
                        <FromUserName><![CDATA[${message.ToUserName}]]></FromUserName>
                        <CreateTime>${createTime}</CreateTime>
                        <MsgType><![CDATA[transfer_customer_service]]></MsgType> 
                    </xml>`;
        }
    }
    

    相关文章

      网友评论

          本文标题:开发者模式如何开启客服功能?

          本文链接:https://www.haomeiwen.com/subject/vuskartx.html