微信小程序云函数-客服消息

861 阅读2分钟

一、什么是云开发?

这是我参与新手入门的第2篇文章,开发者可以使用云开发开发微信小程序、小游戏,无需搭建服务器,即可使用云端能力。

云开发为开发者提供完整的原生云端支持和微信服务支持,弱化后端和运维概念,无需搭建服务器,使用平台提供的 API 进行核心业务开发,即可实现快速上线和迭代,同时这一能力,同开发者已经使用的云服务相互兼容,并不互斥。

云开发分成四类云函数, 数据库, 存储, 云调用, 这里微信文档有详细介绍

二、微信小程序云函数客服消息使用?

2.1 前端在小程序代码中添加

// 用户点击按钮,自动进入小程序客服聊天会话
<button open-type="contact" bindcontact、="handleContact"></button>

2.2 后端使用云函数消息推送需要配置

开发者工具云开发控制台中增加配置,配置选择推送模式为云函数 1.png

添加消息推送配置。 2.png

2.3 如果你是uniapp使用微信小程序云函数功能,需要执行以下步骤

配置 manifest.json

/* 小程序特有相关 */
"mp-weixin" : {
    "cloudfunctionRoot": "./cloudfunctions/", // 配置云开发目录
},

下载npm包

npm init -y
npm install --save path copy-webpack-plugin@5.0.0 webpack@4.0.0

配置打包

// 项目中创建vue.config.js文件
const path = require("path")
const CopyWebpackPlugin = require("copy-webpack-plugin")
// npm install --save path copy-webpack-plugin@5.0.0 webpack@4.0.0
module.exports = {
  configureWebpack: {
    plugins: [
      new CopyWebpackPlugin([
        {
          // from 为要打包的文件
          // to 为输出(复制)到哪
          // cloudfunctions 为存放云函数对应文件夹
          from: path.join(__dirname, 'cloudfunctions'),
          to: path.join(__dirname, 'unpackage/dist', process.env.NODE_ENV === 'production' ? 'build' : 'dev', process.env.UNI_PLATFORM, 'cloudfunctions')
        }
      ])
    ]
  }
}

在cloudfunctions文件夹写云函数js

const cloud = require('wx-server-sdk')

cloud.init({
	// API 调用都保持和云函数当前所在环境一致
	env: cloud.DYNAMIC_CURRENT_ENV
})

// 云函数入口函数
exports.main = async (event, context) => {
	const { OPENID, APPID } = cloud.getWXContext();
	let { Content } = event

	try {
		let msg = {}
		switch (Content) {
			case "1":
                        case "客服"
				let openid = event.FromUserName
				let appId = event.ToUserName
				let CreateTime = event.CreateTime
				return {
					MsgType: 'transfer_customer_service',
					ToUserName: openid,
					FromUserName: appId,
					CreateTime: CreateTime,
				}
				break;
			default:
				msg = {
					touser: OPENID,
					msgtype: 'text',
					text: {
						content: "您好,很高兴为您服务,以下自动回复。\n回复1:人工客服"
					}
				}
		}

		console.log("success event", event)
		await cloud.openapi.customerServiceMessage.send(msg);
		return 'success';
	} catch (err) {
		console.log("err event", event)
		console.log("err msg", err)
		return err
	}
};

三、总结

多看文档,少踩坑,虽然客服转发的参数跟文档有点不一样,得看开源java的代码才知道问题所在