主动发送消息
在收到用户消息的48小时内,我们可以主动给用户发送消息(微信称之为客服消息)。
关于客服消息的接口说明,请参考:
https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Service_Center_messages.html
客服消息的为JSON格式,且必须提交access_token作为访问凭据。
主动发送文本消息
以下是主动发送文本消息的示例代码,你可以在命令窗口运行测试:
Dim
jo As
New
JObject
jo("touser")
= "ofjtFwBSZ5cNqTKLSKx2TNEAxfBI"
jo("msgtype")
= "text"
jo("text")
= New
JObject
jo("text")("content")
= "您好,我是Foxtable"
Dim
URL As
String =
"https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token={0}"
Dim
hc As
New HttpClient(CExp(URL, Functions.Execute("GetAccessToken")))
hc.Content
= jo.ToString()
jo =
JObject.Parse(hc.GetData())
If
jo("errcode")
= "0" Then
MessageBox.Show("消息发送成功")
Else
MessageBox.show("消息发送失败,原因:"
& vbcrlf
& jo("errmsg").ToString)
End
If
主动发送动态图文消息
下面是主动发送动态图文消息的示例,你可以在命令窗口运行测试:
Dim
jo As
New
JObject
Dim
ja As
New
JArray
jo("touser")
= "ofjtFwBSZ5cNqTKLSKx2TNEAxfBI"
jo("msgtype")
= "news"
For
i As
Integer = 1
To 1
'可以一次发送最多8个图文消息,这里只发送了1个
Dim ao
As New
JObject()
ao("title")
= "特朗普提名保守派大法官"
'标题
ao("description")
= "特朗普在白宫提名尼尔·戈萨奇为美国最高法院大法官"
'描述
ao("url")
= "http://news.ifeng.com/a/20170201/50640529_0.shtml"
'连接
ao("picurl")
=
"https://ss1.baidu.com/6ONXsjip0QIZ8tyhnq/it/u=1632653074,1222564348&fm=80&w=179&h=119&img.JPEG"
'图片
ja.Add(ao)
Next
jo("news")
= New JObject()
jo("news")("articles")
= ja
Dim
URL As
String =
"https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token={0}"
Dim
hc As
New HttpClient(CExp(URL,Functions.Execute("GetAccessToken")))
hc.Content
= jo.ToString()
jo =
JObject.Parse(hc.GetData())
If
jo("errcode")
= "0" Then
MessageBox.Show("消息发送成功")
Else
MessageBox.show("消息发送失败,原因:"
& vbcrlf
& jo("errmsg").ToString)
End
If
除了上面的动态图文消息,还有一种永久图文消息,永久图文消息是一种素材,需要事先上传到服务器,发送的时候,将素材ID发给客户即可。
准备素材
不管是被动回复还是主动发送,除了文本和动态图文消息,其它要发送给用户的消息,包括图片、视频、语音以及永久图文消息,都必须事先将相关文件上传到微信服务器。
因为微信服务器并不会直接给用户发送文件,而是发送一个素材ID(MediaId),每一个素材ID都对应者一个素材文件。
关于素材的管理,请参考后面的《素材接口》这一章。
主动发送图片消息
必须事先将要发送的图片上传到微信服务器,因为我们发送的只能是图片素材的ID,无法直接发送文件。
主动发送图片消息参考代码:
Dim
jo As
New
JObject
jo("touser")
= "oQdguwzDwS696vh5vnXU3u0aD9fk"
jo("msgtype")
= "image"
jo("image")
= New
JObject
jo("image")("media_id")
=
"eHDdfBQmRtOJ-PtkD6WENicqBE7-tFFczZ6p5ZUnz0k"
Dim
URL As
String =
"https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token={0}"
Dim
hc As
New HttpClient(CExp(URL,
Functions.Execute("GetAccessToken")))
hc.Content
= jo.ToString()
jo =
JObject.Parse(hc.GetData())
If
jo("errcode")
= "0" Then
MessageBox.Show("消息发送成功")
Else
MessageBox.show("消息发送失败,原因:"
& vbcrlf
& jo("errmsg").ToString)
End
If
主动发送视频消息
必须事先将要发送的视频上传到微信服务器,因为我们发送的只能是视频素材的ID,无法直接发送文件。
主动发送视频消息参考代码:
Dim
jo As
New JObject
jo("touser")
= "oQdguwzDwS696vh5vnXU3u0aD9fk"
jo("msgtype")
= "video"
jo("video")
= New JObject
jo("video")("media_id")
= "eHDdfBQmRtOJ-PtkD6WENoqiLnKOzd9llepgH1VioLM"
jo("video")("title")
= "视频标题"
jo("video")("description")
= "视频内容简介"
Dim
URL As
String =
"https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token={0}"
Dim
hc As
New HttpClient(CExp(URL,
Functions.Execute("GetAccessToken")))
hc.Content
= jo.ToString()
jo =
JObject.Parse(hc.GetData())
If
jo("errcode")
= "0" Then
MessageBox.Show("消息发送成功")
Else
MessageBox.show("消息发送失败,原因:"
& vbcrlf
& jo("errmsg").ToString)
End
If
主动发送语音消息
必须事先将要发送的语音上传到微信服务器,因为我们发送的只能是语音素材的ID,无法直接发送文件。
主动发送语音消息参考代码:
Dim
jo As
New JObject
jo("touser")
= "oQdguwzDwS696vh5vnXU3u0aD9fk"
jo("msgtype")
= "voice"
jo("voice")
= New JObject
jo("voice")("media_id")
= "eHDdfBQmRtOJ-PtkD6WENrp8gcW8NSKXkp9sOzn3NoQ"
Dim
URL As
String =
"https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token={0}"
Dim
hc As
New HttpClient(CExp(URL,
Functions.Execute("GetAccessToken")))
hc.Content
= jo.ToString()
jo =
JObject.Parse(hc.GetData())
If
jo("errcode")
= "0" Then
MessageBox.Show("消息发送成功")
Else
MessageBox.show("消息发送失败,原因:"
& vbcrlf
& jo("errmsg").ToString)
End
If
主动发送永久图文消息
和动态合成的图文消息不同,永久图文消息需要事先上传到服务器,之后将素材ID发送给用户。
主动发送永久图文消息的参考代码:
Dim
jo As
New JObject
jo("touser")
= "oQdguwzDwS696vh5vnXU3u0aD9fk"
jo("msgtype")
= "mpnews"
jo("mpnews")
= New JObject
jo("mpnews")("media_id")
= "eHDdfBQmRtOJ-PtkD6WENpJyI8iZ7Qy2l5SvQS58Jz0"
'素材ID
Dim
URL As
String =
"https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token={0}"
Dim
hc As
New HttpClient(CExp(URL,
Functions.Execute("GetAccessToken")))
hc.Content
= jo.ToString()
jo =
JObject.Parse(hc.GetData())
If
jo("errcode")
= "0" Then
MessageBox.Show("消息发送成功")
Else
MessageBox.show("消息发送失败,原因:"
& vbcrlf
& jo("errmsg").ToString)
End
If