目录

  • 一、目的
  • 一、核心代码
  • 二、可能遇到
    • 1.不起眼的小字
    • 2.不起眼的小字(版本限制)
    • 3.不起眼的小字(jsApiList)
    • 4.不起眼的小字(判断入口环境)
    • 5.不起眼的小字(后台配置)
    • 6.不起眼的小字(agentid)
    • 7.不起眼(巨大)的BUG

一、目的

将图片,视频,商品,文字,文章等直接分享给当前会话客户

一、核心代码

官网链接:企业微信API文档

API: 聊天工具栏分享消息到会话 (sendChatMessage)
这里不知为何唯独缺少对音频的支持

 wx.invoke('sendChatMessage', {msgtype:"text", //消息类型,必填text: {content:"你好", //文本内容},image:{mediaid: "", //图片的素材id},video:{mediaid: "", //视频的素材id},file:{mediaid: "", //文件的素材id},news:{link: "", //H5消息页面url 必填title: "", //H5消息标题desc: "", //H5消息摘要imgUrl: "", //H5消息封面图片URL},miniprogram:{appid: "wx8bd80126147df384",//小程序的appidtitle: "this is title", //小程序消息的titleimgUrl:"https://search-operate.cdn.bcebos.com/d054b8892a7ab572cb296d62ec7f97b6.png",//小程序消息的封面图。必须带http或者https协议头,否则报错 $apiName$:fail invalid imgUrlpage:"/index/page.html", //小程序消息打开后的路径,注意要以.html作为后缀,否则在微信端打开会提示找不到页面},}, function(res) {if (res.err_msg == 'sendChatMessage:ok') {//发送成功}})

API: 获取当前外部联系人userid (getCurExternalContact)

 wx.invoke('getCurExternalContact', {}, function(res){if(res.err_msg == "getCurExternalContact:ok"){userId  = res.userId //返回当前外部联系人userId}else {console.log('错误信息', res) //错误处理}});

API: 获取当前客户群的群ID (getCurExternalChat)

 wx.invoke('getCurExternalChat', {}, function(res){if(res.err_msg == "getCurExternalChat:ok"){chatId  = res.chatId ; //返回当前客户群的群聊ID}else {console.log('错误信息', res) //错误处理}});

1.一般获取外部联系人和外部群id两个API会同时用到的
2.外部联系人和外部群id主要是给接口留下分享记录用的

二、可能遇到

1.不起眼的小字

文档中的下方小字:
1.此接口仅在企业微信2.5.8及以后版本支持,微信端不支持(微信开发者工具也不支持)

2.必须先成功调用agentConfig,否则调用时会报“no permission”错误

3.需要从外部联系人的profile或聊天工具栏进入页面才能获取,否则会报错:without context of external contact,可先通过调用getContext接口来判断进入页面的入口

4.当前成员必须配置了客户联系功能

5.agentConfig中所填agentid对应应用,需有配置客户联系功能权限

当调用不成功时,以上的每一条都有可能中招
下面具体将以上提到的几条信息:

2.不起眼的小字(版本限制)

1.此接口仅在企业微信2.5.8及以后版本支持,微信端不支持(微信开发者工具也不支持)
查看企业微信版本
PC版为例,最左边的菜单->更多->关于

3.不起眼的小字(jsApiList)

2.必须先成功调用agentConfig,否则调用时会报“no permission”错误
在文档的目录中“基础接口”有具体讲到wx.agentConfig

 wx.agentConfig({corpid: '', // 必填,企业微信的corpid,必须与当前登录的企业一致agentid: '', // 必填,企业微信的应用id (e.g. 1000247)timestamp: , // 必填,生成签名的时间戳nonceStr: '', // 必填,生成签名的随机串signature: '',// 必填,签名,见附录-JS-SDK使用权限签名算法jsApiList: [''], //必填,传入需要使用的接口名称success: function(res) {}, // 回调fail: function(res) {if(res.errMsg.indexOf('function not exist') > -1){alert('版本过低请升级')}}});

!!企业微信的基础接口相关的登录操作日后再讲,这里需要关注的是经常会遗忘需要在该接口的 jsApiList 数组中传入需要调用的接口名称,比如这里我们用到的:

jsApiList: ['sendChatMessage','getCurExternalContact', 'getCurExternalChat']

4.不起眼的小字(判断入口环境)

3.需要从外部联系人的profile或聊天工具栏进入页面才能获取,否则会报错:without context of external contact,可先通过调用getContext接口来判断进入页面的入口。

// 返回进入H5页面的入口类型
// 目前有normal、contact_profile、single_chat_tools、group_chat_tools
wx.invoke('getContext', {}, function(res){if(res.err_msg == "getContext:ok"){entry  = res.entry}else {//错误处理}
});

!!如果入口环境为 single_chat_tools 相应的应调用获取外部联系人id
如果入口环境为 group_chat_tools 相应的应调用获取外部群id
这里的ID为接口留存分享记录用

5.不起眼的小字(后台配置)

4.当前成员必须配置了客户联系功能(该功能的入口位置非常隐秘)
!!服务商的管理后台页面配置应用权限(很容易遗忘)

6.不起眼的小字(agentid)

5.agentConfig中所填agentid对应应用,需有配置客户联系功能权限(这个一般不会遗忘,位于 服务商的管理后台页面 应用管理模块 创建应用 可获得AgentId)

7.不起眼(巨大)的BUG

最后的最后,我遇到的了:
分享时“申请获得当前外部联系人信息”弹窗一闪而过的现象
最后在论坛的帮助下找到原因:
调用获取外部联系人id(getCurExternalContact)或
获取外部群id(getCurExternalChat) 的接口
不应在 聊天工具栏分享消息到会话(sendChatMessage) 后调用
或者不应调用间隔过近

正确做法:先调用 获取外部idAPI 后调用 分享会话API
如:

 // 假定已经判断了入口环境(single_chat_tools)发送给个人时wx.invoke('getCurExternalContact', {}, function(res){if(res.err_msg == "getCurExternalContact:ok"){userId  = res.userId //返回当前外部联系人userId// 调用分享接口wx.invoke('sendChatMessage', {msgtype:"text", //消息类型,必填text: {content:"你好", //文本内容}}, function(res) {if (res.err_msg == 'sendChatMessage:ok') {//发送成功 给接口留下被发送人id等信息// this.http.post('xxx', {}).then().catch()}})}else {console.log('错误信息', res) //错误处理}});

这是个多么新鲜又不容易发现的BUG,啊
调完一连串接口,配置完一连串信息,就好像自己玩了一场特工游戏

企业微信自建应用(JS-SDK):聊天工具栏分享消息到会话相关推荐

  1. 企业微信自建应用审批接口开发

    再说一次,企业微信开发文档很坑,特别坑,坑成鬼了. 有时候浪费很长时间改bug,查来查去,都没有发现到底哪里错了,查资料,搜资料,询问大神,都没有发现bug.改到最后都抑郁了,才发现用浏览器访问根本就 ...

  2. 企业微信自建应用获取用户信息

    记录一下企业微信自建应用获取用户信息开发过程: 1.第一步,获取授权code,这个在原来首页开发不太合适,在进入首页前新建页面进行授权,点击页面按钮进行授权.需要拼接的授权url.其中corpid是企 ...

  3. 企业微信-自建应用一:介绍与创建

    什么是自建应用? 一句话概括就是企业内部自用的应用 创建自建应用 登录企业微信桌面版,点击"开发者中心" 进入到开发者中心,点击"立即创建" 登录企业微信管理后 ...

  4. 企业微信自建应用通过PHP进行收发消息

    我们在企业微信的使用中肯定会用到自建应用,自建应用使用最多的功能就是消息的推送,使用的场景也有很多,例如:在公司内网的程序,可以监控员工在什么时候进行了敏感操作,比如某管理员删除了帐号或者其他内容,可 ...

  5. 通过企业微信内建应用,python搭建重置域账户密码

    企业微信重置域账户密码 1.打开企业微信应用,发送用户名,等待几秒,后台重置完密码,自动返回新密码 2.工作原理: 1.企业微信自建应用程序 2.设置应用api信息 3.防火墙映射服务端IP地址,后端 ...

  6. JS实现聊天接收到消息语言自动提醒(您有新的消息请注意查收)

    综述 最近在开发一个网页端的客服系统,需求要求聊天双方接收到消息能有语音提醒,并且客服端如果存在未读消息要求每隔五分钟给客服语音提醒一下.客服聊天系统使用PHP的Workerman框架进行开发,由于语 ...

  7. 企业微信自建应用开发初探

    企业微信是腾讯推出的一个新的办公协作平台,通过与微信一致的沟通体验,为企业员工提供最基础和最实用的办公服务.同时企业微信作为一个开发平台,企业可以根据需要开发定制自己的企业应用集成到企业微信上.ABC ...

  8. 实现【企业微信自建应用使用uni-app H5 开发】,并解决【uni-app集成微信JSSDK(wx、jWeixin)变量冲突问题】

    目录 企业微信的开发与调试 企业微信应用主体逻辑 登录(构造网页授权链接) 企业微信SDK配置 demo案例 重要bug修复方法 总结 企业微信的开发与调试 在本地开发基础代码和UI 发布到测试环境进 ...

  9. 企业微信自建应用审批流程踩坑全过程(uni-app)

    1. 引入企业微信sdk: 1-1. 因为uni-app遵循Vue的单文件组件 (SFC) 规范,不能直接在页面上引入 在index.html中引入: <script src="htt ...

最新文章

  1. XML 与DataSet 对象的关系
  2. linux脚本数字加,linux-在bash脚本中添加数字表示“未找到”
  3. 计算机专业英语第2版郭涛翻译,计算机专业英语
  4. MaxKey单点登录认证系统 v2.4.0 RC
  5. CSS3 -- display:flex
  6. 为什么川渝的超市要求顾客必须“要有妈”?
  7. 工具的使用 —— 搜狗输入法(二)
  8. 盘点前端HTML基础知识
  9. 神策分析 Android SDK 架构解析
  10. springboot基于web的游泳馆信息管理系统毕业设计源码281444
  11. 电路第五版课后完全答案百度扫描(免费)
  12. 中文汉字和英文数字的unicode编码范围
  13. Foxmail设置方法
  14. 计算机登录界面没有用户显示不出来,win7让administrator账户不出现在登陆界面方法...
  15. java十大经典排序
  16. 五步打造APP节日主题设计:以Lofter新年图标设计为例
  17. 一个有意思的echarts3D树状图
  18. SpringBoot整合MybatisPlus实战动态SQL,java分布式架构
  19. [运算放大器]佛朗哥笔记 - 电阻性反馈电路 - 差分放大器与仪表放大器
  20. android 很多牛叉布局github地址

热门文章

  1. maven 系列 02 - packing 类型
  2. codeup之沙漏图形
  3. DSP ccs2 C5000编译SUBC指令实现除法
  4. 开卷有益 今天你读书了么?
  5. android禁止手机访问某个ip,如何禁止手机访问某个网站
  6. lua和go混合调用调试记录支持跨平台(通过C和LuaJit进行实现)
  7. 【物联网初探】- 09 - 基于 ESP32 和微信小程序的土壤湿度监测【完结篇】
  8. 从毛衣到西装 - 硅谷CEO穿衣进化史
  9. 使用Python+OpenCV+Tensorflow+Flask实现检测X光图像中的COVID-19(新冠病毒)
  10. Spring中DAO层、Service层、Controller层的定义