收藏
回答

在云函数中如何处理公众号的语音消息?

https://developers.weixin.qq.com/minigame/dev/wxcloud/basis/message-push.html#option-cloud

我根据上面这个教程,我使用小程序A共享了云环境给公众号B,使用一个云函数来处理用户给公众号发的消息,现在的情况是

文字消息可以接收并处理

但语音消息只能拿到 mediaid,无法再往下处理了,尝试了各种接口比如,获取临时素材,以及公众号接口云调用都不行

尝试过的做法

const result = await cloud.openapi.customerServiceMessage.getTempMedia({
      mediaId: event.mediaId });// 从消息事件中获取的媒体IDh

还有

const c = new cloud.Cloud({
      appid: '---',
      resourceAppid: '--',
      resourceEnv: 'cloud1-xxx',
    })   
const response = await cloud.openapi({
      appid: '---'
    }).officialAccount.media.get({
      media_id: event.mediaId
    })

还有只有使用 http 请求,但是没有 access token

const url = `https://api.weixin.qq.com/cgi-bin/media/get?access_token=${access_token}&media_id=${media_id}`
const response = await axios({
      method: 'get',
      url: url,
      responseType: 'arraybuffer' // 处理二进制数据
    })
回答关注问题邀请回答
收藏

3 个回答

  • showms
    showms
    03-31
    const result = await cloud.openapi({
          appid: '公众号的appid'
        }).customerServiceMessage.getTempMedia({
          mediaId: event.mediaId });
    
    

    首先云环境共享的情况下,云调用写法需要带入appid才行。比如这句应该这么写。


    但是这个api是小程序内获取客服消息临时素材不确定行不行。你可能是得调公众号的获取素材接口。https://developers.weixin.qq.com/doc/offiaccount/Asset_Management/Get_temporary_materials.html


    如果接口不支持云调用且没有accessToken,那么就需要你在云函数里面开一个触发器专门用来获取公众号的accessToken


    03-31
    有用
    回复 2
  • 跨商通
    跨商通
    03-29

    每个接口文档里,有标注支持云调用的,才可以在云函数中免鉴权调用openapi,否则必须通过http调用。没有access_toke,当然需要去通过接口获取了。

    03-29
    有用
    回复 2
    • 华子
      华子
      03-29
      谢谢回答,但是我尝试的这几个接口都是支持云调用的,就是没法办获取语音消息的内容
      03-29
      回复
    • 跨商通
      跨商通
      03-29回复华子
      不应该贴一下该接口的文档链接吗?
      03-29
      回复
  • 智能回答 智能回答 该问答由AI生成
    03-29
    有用
登录 后发表内容