小程序中客服发送消息(发送+接收+怎么触发事件)

1.小程序客服发送消息(2023-06-09)

接口说明

当前需求是当我点击某个按钮的时候,跳转到小程序客服页面,然后触发客服发送消息事件,然后客服会想你发送一个你想要的内容。

首先在发送这个客服消息的时候,他是一个事件,你需要去做一些操作进行触发。通过配置让微信每次进入客服消息界面的时候都会发送数据包,根据数据包中的Event时间来判断是否是要发送客服消息,是的话发送客服消息。这个前提是你在客服界面和页面进行交互, 当前交互是用户主动和客服发送一个任意消息包括文字,图片,小程序等,完成交互之后,48小时之内客服可以给用户发送5次消息。当然这个配置,让每次进入客服页面都会触发这个事件。

接口英文名

sendCustomMessage

功能描述

该接口用于发送客服消息给用户。详细规则见 发送客服消息

注意事项

  • 发送文本消息时,支持添加可跳转小程序的文字连接.
  • data-miniprogram-appid 项,填写小程序appid,则表示该链接跳转小程序
  • data-miniprogram-path项,填写小程序路径,路径与app.json中保持一致,可带参数;
  • 对于不支持 data-miniprogram-appid 项的客户端版本(6.5.16 以下),如果有 herf 项,则仍然保持跳 href 中的链接;
  • 小程序发带小程序文字链的文本消息,data-miniprogram-appid必须是该小程序的appid

调用方式

HTTPS 调用

POST https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=ACCESS_TOKEN 

第三方调用

  • 调用方式以及出入参和HTTPS相同,仅是调用的token不同
  • 该接口所属的权限集id为:1、6、19、59、100、101
  • 服务商获得其中之一权限集授权后,可通过使用authorizer_access_token代商家进行调用

请求参数

属性类型必填说明
access_tokenstring接口调用凭证,该参数为 URL 参数,非 Body 参数。使用getAccessToken 或者 authorizer_access_token
touserstring用户的 OpenID
msgtypestring消息类型。text表示文本消息;image表示图片消息;link表示图文链接;miniprogrampage表示小程序卡片。
textobject文本消息,msgtype=“text” 时必填
属性类型必填说明contentstring否文本消息内容。msgtype=“text” 时必填
imageobject图片消息,msgtype=“image” 时必填
属性类型必填说明media_idstring否发送的图片的媒体ID,通过 uploadTempMedia上传图片文件获得。
linkobject图文链接,msgtype=“link” 时必填
属性类型必填说明titlestring否消息标题descriptionstring否图文链接消息urlstring否图文链接消息被点击后跳转的链接thumb_urlstring否图文链接消息的图片链接,支持 JPG、PNG 格式,较好的效果为大图 640 X 320,小图 80 X 80
miniprogrampageobject小程序卡片,msgtype=“miniprogrampage” 时必填
属性类型必填说明titlestring否消息标题pagepathstring否小程序的页面路径,跟app.json对齐,支持参数,比如pages/index/index?foo=barthumb_media_idstring否小程序消息卡片的封面, image 类型的 media_id,通过 uploadTempMedia接口上传图片文件获得,建议大小为 520*416

返回参数

属性类型说明
errcodenumber错误码
errmsgstring错误信息

调用示例

示例说明: 发送文本消息

请求数据示例

{
  "touser":"OPENID",
  "msgtype":"text",
  "text":
  {
    "content":"Hello World"
  }
} 

返回数据示例

{
  "errcode":0,
  "errmsg":"ok"
} 

示例说明: 发送图片消息

请求数据示例

{
  "touser":"OPENID",
  "msgtype":"image",
  "image": {
    "media_id":"MEDIA_ID"
  }
} 

返回数据示例

{
  "errcode":0,
  "errmsg":"ok"
} 

示例说明: 发送图文链接

请求数据示例

{
  "touser": "OPENID",
  "msgtype": "link",
  "link": {
    "title": "Happy Day",
    "description": "Is Really A Happy Day",
    "url": "URL",
    "thumb_url": "THUMB_URL"
  }
} 

返回数据示例

{
  "errcode":0,
  "errmsg":"ok"
} 

示例说明: 发送小程序卡片

请求数据示例

{
 "touser":"OPENID",
 "msgtype":"miniprogrampage",
 "miniprogrampage": {
   "title":"title",
   "pagepath":"pagepath",
   "thumb_media_id":"thumb_media_id"
 }
} 

返回数据示例

{
  "errcode":0,
  "errmsg":"ok"
} 

错误码

错误码错误码取值解决方案
-1system error系统繁忙,此时请开发者稍候再试
40001invalid credential access_token isinvalid or not latest获取 access_token 时 AppSecret 错误,或者 access_token 无效。请开发者认真比对 AppSecret 的正确性,或查看是否正在为恰当的公众号调用接口
40013invalid appid不合法的 AppID ,请开发者检查 AppID 的正确性,避免异常字符,注意大小写

代码示例

@PostMapping("/sendCsMessage")
    public ActionData<Object> sendCsMessage(HttpServletRequest request) throws Exception {
        String event = request.getParameter("Event");
        if(event.equals("user_enter_tempsession")){
            Long userId = HmtTenantContextHolder.getTnuserLocal();
            //根据用户Id获取该用户的openId
            String openId = request.getParameter("FromUserName");
            //获取微信accessToken
            String accessToken = sendSubscribeMessage.getAccessToken();
            //构造参数,向微信发送客服消息
            com.alibaba.fastjson.JSONObject jsonObject = new com.alibaba.fastjson.JSONObject();
            jsonObject.put("touser",openId);
            jsonObject.put("msgtype","link");
            //构造link信息的Json数据
            com.alibaba.fastjson.JSONObject jsonObject1 = new com.alibaba.fastjson.JSONObject();
            jsonObject1.put("title","标题");
            jsonObject1.put("description","描述");
            jsonObject1.put("url","所要发送的Url链接地址");
            jsonObject1.put("thumb_url","链接的图片(便于美观)");
            jsonObject.put("link",jsonObject1);
            String params = jsonObject.toString();
            String response = WxHttpUtils.sendPost("https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=" + accessToken, params);
            return ActionDataResult.genResult(response,"ok");
        }
        return ActionDataResult.genResult(null,"fail");
    }
这里是微信验证你是否具备解密能力的接口
验证签名工具类
package hmyd.xq.ut;


import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;

/**
 * 描述:请求校验工具类.
 * @author zrxJuly
 * @createDate 2017-12-9
 * @since 1.0
 *
 */
public class SignUtil {

    // 与开发模式接口配置信息中的Token保持一致.
    private static String token = "haimaio2023";

    /**
     * 校验签名
     * @param signature 微信加密签名.
     * @param timestamp 时间戳.
     * @param nonce 随机数.
     * @return
     */
    public static boolean checkSignature(String signature, String timestamp, String nonce) {
        // 对token、timestamp、和nonce按字典排序.
        String[] paramArr = new String[] {token, timestamp, nonce};
        Arrays.sort(paramArr);

        // 将排序后的结果拼接成一个字符串.
        String content  = paramArr[0].concat(paramArr[1]).concat(paramArr[2]);

        String ciphertext = null;
        try {
            MessageDigest md = MessageDigest.getInstance("SHA-1");
            // 对拼接后的字符串进行sha1加密.
            byte[] digest = md.digest(content.toString().getBytes());
            ciphertext = byteToStr(digest);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }

        // 将sha1加密后的字符串与signature进行对比.
        return ciphertext != null ? ciphertext.equals(signature.toUpperCase()) : false;
    }

    /**
     * 将字节数组转换为十六进制字符串.
     * @param byteArray
     * @return
     */
    private static String byteToStr(byte[] byteArray) {
        String strDigest = "";
        for (int i = 0; i < byteArray.length; i++) {
            strDigest += byteToHexStr(byteArray[i]);
        }
        return strDigest;
    }

    /**
     * 将字节转换为十六进制字符串.
     * @param mByte
     * @return
     */
    private static String byteToHexStr(byte mByte) {
        char[] Digit = { '0', '1' , '2', '3', '4' , '5', '6', '7' , '8', '9', 'A' , 'B', 'C', 'D' , 'E', 'F'};
        char[] tempArr = new char[2];
        tempArr[0] = Digit[(mByte >>> 4) & 0X0F];
        tempArr[1] = Digit[mByte & 0X0F];

        String s = new String(tempArr);
        return s;
    }


}


System.out.println("=======开始请求校验======");

// 微信加密签名.
String signature = request.getParameter("signature");
System.out.println("signature====" + signature);
// 时间戳.
String timestamp = request.getParameter("timestamp");
System.out.println("timestamp====" + timestamp);
// 随机数.
String nonce = request.getParameter("nonce");
System.out.println("nonce====" + nonce);
// 随机字符串.
String echostr = request.getParameter("echostr");
System.out.println("echostr====" + echostr);


PrintWriter out = response.getWriter();

// 请求校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败.
if (SignUtil.checkSignature(signature, timestamp, nonce)) {
    System.out.println("=======请求校验成功======" + echostr);
    out.print(echostr);
}

out.close();
out = null;
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 要让ESP32通过蓝牙发送数据到微信小程序,你可以使用ESP32内置的蓝牙模块,以及微信小程序提供的蓝牙API接口。 以下是一些基本步骤: 1. 使用Arduino IDE或其他编程工具,编写ESP32的蓝牙发送程序。例如,你可以使用Arduino蓝牙库,通过Serial通信接口将数据发送到ESP32内置的蓝牙模块。 2. 在微信小程序,使用微信提供的蓝牙API接口,连接到ESP32的蓝牙模块,并接收来自ESP32的数据。例如,你可以使用wx.createBLEConnection()函数建立连接,使用wx.onBLECharacteristicValueChange()函数监听数据变化事件,以及使用wx.readBLECharacteristicValue()函数读取数据。 需要注意的是,蓝牙连接和数据传输的稳定性需要根据具体情况进行优化。同时,你需要确保ESP32和微信小程序之间的通信协议一致,例如数据格式、编码方式等。 ### 回答2: ESP32是一款功能强大的开发板,它支持蓝牙功能,并可以通过蓝牙将数据发送微信小程序进行接收。 在ESP32上,我们可以使用它内置的蓝牙模块来实现数据的发送。首先,我们需要在ESP32上启用蓝牙功能,并创建一个蓝牙服务,用于发送数据。可以使用ESP-IDF开发框架来实现这些功能。 接下来,在微信小程序,我们需要使用wx.startBluetoothDevicesDiscovery函数来启用蓝牙设备的搜索功能。然后,使用wx.onBluetoothDeviceFound函数来监听蓝牙设备的发现事件,并获取到ESP32的蓝牙设备信息。 一旦微信小程序找到了ESP32的蓝牙设备,我们可以使用wx.createBLEConnection函数来建立与ESP32蓝牙设备的连接。 连接建立之后,可以使用wx.onBLEConnectionStateChange函数来监听蓝牙连接状态的变化,并在连接成功后发送数据请求到ESP32。 在ESP32上,当接收到来自微信小程序的数据请求时,可以通过蓝牙通信协议进行通信。ESP32可以将需要发送的数据打包成特定格式的数据包,并通过蓝牙发送微信小程序。 在微信小程序,可以使用wx.onBLECharacteristicValueChange函数监听从ESP32接收到的数据,并进行处理。 总而言之,通过在ESP32上启用蓝牙功能,并在微信小程序使用蓝牙接口进行连接和数据接收处理,我们可以实现ESP32向微信小程序发送数据的功能。这样,我们就可以利用ESP32和微信小程序相互通信,实现更多有趣的功能。 ### 回答3: ESP32是一种高集成度的蓝牙Wi-Fi芯片,可以用于无线传输数据。要在ESP32上发送数据到微信小程序蓝牙接收端,需要经过以下几个步骤: 1. 配置ESP32的蓝牙模块:首先,需要在ESP32上配置蓝牙模块,使其能够与其他设备进行通信。可以使用Arduino编程语言来编写代码,在代码引入ESP32的蓝牙库,并设置蓝牙的名称和特性。 2. 连接微信小程序蓝牙接收端:在微信小程序,需要使用wx.getBLEDevice函数获取到ESP32的蓝牙设备对象。然后通过wx.createBLEConnection函数进行连接。 3. 发送数据:一旦连接建立,就可以使用ESP32的蓝牙发送函数发送数据。可以使用ESP32的蓝牙库提供的函数来发送字符串、数字或二进制数据。 4. 接收数据:在微信小程序,可以通过wx.onBLECharacteristicValueChange事件监听接收到的数据。当ESP32蓝牙发送数据时,该事件将被触发,从而可以获取到接收到的数据。 需要注意的是,ESP32和微信小程序蓝牙接收端的通信需要使用相同的数据格式和通信协议。通常情况下,可以使用文本字符串作为通信格式,例如发送JSON格式的数据。 总之,要实现ESP32蓝牙发送数据到微信小程序蓝牙接收端,需要先配置ESP32的蓝牙模块,然后在微信小程序建立连接并监听接收到的数据。通过这种方式,可以实现两者之间的无线数据传输。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员Mapy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值