发消息给单个客户或客户群
<h5>简要描述</h5>
<ul>
<li><font color="red">目前支持文本(普通文本、表情)、群公告、图片、链接、文件、小程序、语音、视频等类型的消息发送。发送消息数据结构见下方请求示例,具体字段描述及回调推送的详细消息结构参见“<a href="<a href="https://www.showdoc.com.cn/yunzhenji/11490690012909560">说明-聊天消息</a>”)</font>">https://www.showdoc.com.cn/yunzhenji/11490690012909560">说明-聊天消息</a>”)</font></a>;</li>
</ul>
<h5>请求URL</h5>
<ul>
<li><code>URL:/wechat/sendMessage</code></li>
</ul>
<h5>请求方式</h5>
<ul>
<li>POST </li>
</ul>
<h5>请求参数</h5>
<ul>
<li>数据为json字符串,各字段说明如下</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">必选</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">app_id</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>APP ID</td>
</tr>
<tr>
<td style="text-align: left;">access_token</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>Access Token</td>
</tr>
<tr>
<td style="text-align: left;">wxid</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>企微号wxid</td>
</tr>
<tr>
<td style="text-align: left;">target_wxid</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>客户wxid或客户群wxid</td>
</tr>
<tr>
<td style="text-align: left;">messages</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">array</td>
<td>消息数组,支持单次发送多条消息,单次最多5条。具体消息格式参见“<a href="<a href="https://www.showdoc.com.cn/yunzhenji/11490690012909560">说明-聊天消息</a>”章节">https://www.showdoc.com.cn/yunzhenji/11490690012909560">说明-聊天消息</a>”章节</a></td>
</tr>
<tr>
<td style="text-align: left;">messages[0].delayed_time</td>
<td style="text-align: left;">否</td>
<td style="text-align: left;">int</td>
<td>消息发送时间戳(默认0,需要实现消息间隔时可用该字段,指定某条消息的发送时间,取值如:1641280299,表示该条消息于2022-01-04 15:11:39发送);另外为了避免企微号频繁发消息被限制,也可用该字段错开消息发送时间</td>
</tr>
<tr>
<td style="text-align: left;">messages[0].api_send_id</td>
<td style="text-align: left;">否</td>
<td style="text-align: left;">int或string</td>
<td>用于通过API发送消息的消息记录与系统回调消息的关联,此处带了该参数,<a href="<a href="https://www.showdoc.com.cn/yunzhenji/11490693160849765">消息回调</a>会带回">https://www.showdoc.com.cn/yunzhenji/11490693160849765">消息回调</a>会带回</a>。</td>
</tr>
</tbody>
</table>
<h5>请求示例</h5>
<pre><code>POST /wechat/sendMessage HTTP/1.1
Host:oapi-yzj.miaokol.com
Content-Type: application/json; charset=UTF-8
{
&quot;app_id&quot;: &quot;xxx&quot;,
&quot;access_token&quot;: &quot;xxx&quot;,
&quot;wxid&quot;: &quot;16xxx&quot;,
&quot;target_wxid&quot;: &quot;7xxx&quot;,
&quot;messages&quot;: [//数组,支持单次发送多条消息,单次最多5条,下面仅为说明发送消息的字段、格式。
{
&quot;msg_type&quot;: &quot;text&quot;,//文本,type类型说明,参见参见“说明-聊天消息”部分
&quot;content&quot;: {
&quot;items&quot;: [
{
&quot;type&quot;: &quot;text&quot;,
&quot;text&quot;: &quot;test&quot;
}
]
},
&quot;delayed_time&quot;: 1641280299
},
{
&quot;msg_type&quot;: &quot;announcement&quot;,//群公告
&quot;content&quot;: {
&quot;text&quot;: &quot;xxx&quot;
},
&quot;delayed_time&quot;: 1641280299
},
{
&quot;msg_type&quot;: &quot;picture&quot;,//图片
&quot;content&quot;: {
&quot;url&quot;: &quot;xxxxxxxxx&quot;
},
&quot;delayed_time&quot;: 1641280299
},
{
&quot;msg_type&quot;: &quot;link&quot;,//链接
&quot;content&quot;: {
&quot;cover&quot;: &quot;xx&quot;,
&quot;desc&quot;: &quot;xxx&quot;,
&quot;title&quot;: &quot;xx&quot;,
&quot;url&quot;: &quot;xxxx&quot;
},
&quot;delayed_time&quot;: 1641280299
},
{
&quot;msg_type&quot;: &quot;file&quot;,//文件
&quot;content&quot;: {
&quot;title&quot;: &quot;xx&quot;,
&quot;url&quot;: &quot;xxxx&quot;
},
&quot;delayed_time&quot;: 1641280299
},
{
&quot;msg_type&quot;:&quot;voice&quot;,//发语音需要使用微信的语音消息:1、收录在素材库里的语音;2、推送或主动拉取的来自企微上报聊天消息里的语音;
&quot;content&quot;:{
&quot;url&quot;:&quot;xxxxx.mp3&quot;,
&quot;duration&quot;:60,//语音时长,1-60整数
&quot;org_content&quot;:&quot;&quot;//来自微信语音消息
},
&quot;delayed_time&quot;: 1641280299
}
]
}
</code></pre>
<h5>响应示例</h5>
<pre><code>HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
{
&quot;data&quot;:[//数组,数组长度同messages
{
&quot;idx&quot;:0,//0表示messages中的第一条消息,以此类推
&quot;api_send_svrid&quot;:&quot;168xxx,7xxx,1675997660116ABKocO&quot;,//系统生成的发送消息ID
&quot;api_send_id&quot;:&quot;116&quot;//发送时带了该参数,此处才有返回
}
],
&quot;errcode&quot;:0
}
</code></pre>
<h5>响应说明</h5>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">errcode</td>
<td style="text-align: left;">int</td>
<td>0表示经过了数据初步校验,不表示消息已经发送成功;非0表示初步校验不通过,错误信息见message字段</td>
</tr>
<tr>
<td style="text-align: left;">data</td>
<td style="text-align: left;">object[]</td>
<td>响应数据</td>
</tr>
<tr>
<td style="text-align: left;">data[x].idx</td>
<td style="text-align: left;">int</td>
<td>0表示messages中的第一条消息,以此类推</td>
</tr>
<tr>
<td style="text-align: left;">data[x].api_send_svrid</td>
<td style="text-align: left;">string</td>
<td>系统生成的发送消息ID</td>
</tr>
<tr>
<td style="text-align: left;">data[x].api_send_id</td>
<td style="text-align: left;">string</td>
<td>发送时带了该参数,此处才有返回</td>
</tr>
</tbody>
</table>
<p><font color="red">注意:</font>
1、此处errcode返回0,不表示消息已经发送成功了,只有data中返回的idx个数与请求参数messages的个数一致时,才表示请求参数通过了初步校验,消息已经异步交给企微客户端执行;messages中的多条消息,是每条单独执行发送的。</p>
<p>2、消息经过第一步校验成功交给企微客户端执行之后,默认发送成功,但真正要判断成功与否,要依赖回调事件“聊天消息发送失败 (chatMsgSendFail)”,有失败回调表示失败,否则表示成功。消息文档地址见:<a href="<a href="https://www.showdoc.com.cn/yunzhenji/11490693160849765">https://www.showdoc.com.cn/yunzhenji/11490693160849765</a>">https://www.showdoc.com.cn/yunzhenji/11490693160849765">https://www.showdoc.com.cn/yunzhenji/11490693160849765</a></a>;。</p>
<p>3、关于回调事件“聊天消息(chatMsg)”和“聊天消息发送失败 (chatMsgSendFail)”
只要经过了第一步的校验,消息交给了企微客户端执行,无论企微客户端执行成功与否,都会有回调事件“聊天消息(chatMsg)”,所以有该回调不代表消息发送成功,只是默认发送成功。只有当后续没有收到“聊天消息发送失败 (chatMsgSendFail)”的回调才能表示消息真正发送成功。这2个回调都有参数api_send_svrid和api_send_id(请求时传了才有),可以用于与接口请求时的用户端的发送记录做关联。</p>