Skip to main content

消息

提示

本篇文档有视频教程,请点击这里查看

danger

如果服务端返回403,可能有两种情况

  1. 机器人跟用户还没有创建过会话,请先参见 上一章《创建单聊会话》
  2. 该用户可以禁止陌生人跟他联系了。这种情况只能让该用户解除禁止陌生人联系,或者让该用户添加机器人为好友

1. 发消息给单个用户#

1. 发送文字消息#

client.sendTextMsg('e8e8cd79-cd40-4796-8c54-3a13cfe50115', 'hello');
  1. 第一个参数是要发送对象的 user_id
  2. 第二个参数是要发送的文字

返回值

{  "type": "message",  "representative_id": "",  "quote_message_id": "",  "conversation_id": "dd219235-e83a-3b85-a13f-d0f20fa0e833",  "user_id": "11efbb75-e7fe-44d7-a14f-698535289310",  "session_id": "afad4c37-b90e-43c2-adc2-e6e1bd31ae94",  "message_id": "c81e774b-a762-49f8-9114-35900be2c90e",  "category": "PLAIN_TEXT",  "data": "aGVsbG8=",  "data_base64": "aGVsbG8",  "status": "",  "source": "CREATE_MESSAGE",  "silent": false,  "expire_in": 0,  "created_at": "2022-08-19T03:06:17.363215481Z",  "updated_at": "2022-08-19T03:06:17.363215481Z"}

消息的返回值差不多大同小异,以下就省略消息的返回值部分,只介绍调用部分。

2. 发送文章消息#

client.sendPostMsg('e8e8cd79-cd40-4796-8c54-3a13cfe50115', '# 一级标题\n## 二级标题\n 正文..');

3. 上传文件#

const fs = require('fs');const file = fs.readFileSync('./somefile');client.uploadFile(file);

返回值

{  "view_url": "https://mixin-assets-cn.zeromesh.net/mixin/attachments/1660891914-33073792652464c197de2ce934719a2d1224050d48bee89e41129e3088db50e1",  "attachment_id": "fbd7d403-3b39-4f8f-afcf-2b2aac42588f"}

注意这里返回的两个值,一个是文件的预览地址,一个是文件的唯一标识。后边所有关于文件发送都会用到这个 attachment_id

4. 发送图片消息#

client.sendImageMsg('e8e8cd79-cd40-4796-8c54-3a13cfe50115', {  attachment_id: '', // 文件的唯一标识  mime_type: '', // 图片的类型,如:image/jpeg  width: 300, // 图片的宽度  height: 300, // 图片的高度  size: 300, // 图片的大小,单位是字节  thumbnail: '', // 可选,缩略图的 base64});

5. 发送文件消息#

client.sendDataMsg('e8e8cd79-cd40-4796-8c54-3a13cfe50115', {  attachment_id: '', // 文件的唯一标识  mime_type: '', // 图片的类型,如:image/jpeg  size: 300, // 图片的大小,单位是字节  name: '', // 文件显示的名字});

6. 发送贴纸消息#

client.sendStickerMsg('e8e8cd79-cd40-4796-8c54-3a13cfe50115', {  sticker_id: '', // 贴纸的唯一标识  name: '', // 可选,贴纸的名字  album_id: '', // 可选,贴纸的所属相册});

7. 发送联系人消息#

client.sendContactMsg('e8e8cd79-cd40-4796-8c54-3a13cfe50115', {  user_id: '',});

8. 发送卡片消息#

client.sendAppCardMsg('e8e8cd79-cd40-4796-8c54-3a13cfe50115', {  app_id: '', // 一般直接使用自己机器人的 client_id  icon_url: '', // 卡片的图标链接  title: '', // 卡片的标题  description: '', // 卡片的描述  action: '', // 卡片的跳转链接  shareable: false, // 可选,是否可分享});

9. 发送音频消息#

client.sendAudioMsg('e8e8cd79-cd40-4796-8c54-3a13cfe50115', {  attachment_id: '', // 文件的唯一标识  mime_type: '', // 音频的类型,目前只支持:audio/ogg  size: 300, // 音频的大小,单位是字节  duration: 300, // 音频的时长,单位是毫秒  wave_form: '', // 可选,音频轨迹 base64});

10. 发送直播消息#

client.sendLiveMsg('e8e8cd79-cd40-4796-8c54-3a13cfe50115', {  width: 300, // 直播卡片的宽度  height: 300, // 直播卡片的高度  thumb_url: '', // 直播卡片的缩略图链接  url: '', // 直播卡片的视频地址  shareable: false, // 可选,是否可分享});

11. 发送视频消息#

client.sendVideoMsg('e8e8cd79-cd40-4796-8c54-3a13cfe50115', {  attachment_id: '', // 文件的唯一标识  mime_type: '', // 视频的类型,目前只支持:video/mp4  size: 300, // 视频的大小,单位是字节  duration: 300, // 视频的时长,单位是秒  width: 300, // 视频的宽度  height: 300, // 视频的高度  thumbnail: '', // 可选,视频的缩略图 base64});

12. 发送位置消息#

client.sendLocationMsg('e8e8cd79-cd40-4796-8c54-3a13cfe50115', {  latitude: '', // 纬度  longitude: '', // 经度  address: '', // 可选  name: '', // 可选});

13. 发送按钮消息#

client.sendAppButtonMsg('e8e8cd79-cd40-4796-8c54-3a13cfe50115', [  {    label: '', // 按钮的文本内容    color: '', // 16进制按钮的颜色,如: #FF0000    action: '', // 按钮的跳转链接  },]);

14. 发送撤回消息#

client.sendRecallMsg('e8e8cd79-cd40-4796-8c54-3a13cfe50115', {  message_id: '', // 消息的唯一标识});

15. 自行构建消息#

client.sendMessage({  conversation_id: '', // 会话的唯一标识  message_id: '', // 消息的唯一标识  category: '', // 消息的类型,详细的类型请查看 SDK  data: '', // base64 的消息内容  recipient_id: '', // 可选,消息的接收者,发给群聊时,不带这个参数就会发给群聊的每一个人。带上的话,就只会发给群聊的某一个人  representative_id: '', // 可选,消息的发送者,  quote_message_id: '', // 可选,被引用的消息的唯一标识});

以上消息都封装了这个接口。

16. 发送 ack 消息#

client.sendAcknowledgement({  message_id: '', // 接收到的消息标识  status: '', // 消息的状态, 'READ' 表示已读, 'DELIVERED' 表示已送达});
tip
  1. ack 消息是用来告诉服务器,消息已经被读取或者送达了,这样服务器才会把消息的状态改为已读或者已送达。
  2. DELIVERED 表示消息已经送达,在 Mixin Messenger 上标识为灰色双勾。
  3. READ 表示消息已经读取,在 Mixin Messenger 上标识为蓝色双勾。

17. 批量发送 ack 消息#

client.sendAcknowledgements([  {    message_id: '', // 接收到的消息标识    status: '', // 消息的状态, 'READ' 表示已读, 'DELIVERED' 表示已送达  },]);
tip
  1. 数组长度最多为 100.

2. 文件操作#

1. 上传文件#

client.uploadFile(file);

返回值

{  "view_url": "xxx",  "attachment_id": "xxx"}
tip
  1. file 是一个 File 对象,可以通过 fs.readFileSync 来获取。
  2. 返回值 view_url 是文件的下载地址。
  3. 返回值 attachment_id 可以用作发消息。

2. 获取文件#

解析出消息之后,会获得 attachment_id,通过 attachment_id 可以获取文件。

client.showAttachment(attachment_id);

返回值

{  "view_url": "xxx",  "attachment_id": "xxx"}

3. 发送多条消息#

client.sendMessages([  {    conversation_id: '', // 会话的唯一标识    message_id: '', // 消息的唯一标识    category: '', // 消息的类型,详细的类型请查看 SDK    data: '', // base64 的消息内容    recipient_id: '', // 可选,消息的接收者,发给群聊时,不带这个参数就会发给群聊的每一个人。带上的话,就只会发给群聊的某一个人    representative_id: '', // 可选,消息的发送者,    quote_message_id: '', // 可选,被引用的消息的唯一标识  },]);
  1. 最大限制为 100 条。
  2. 整条消息最大限制为 1MB 。
  3. 超过上述限制,会发送失败。
  4. 如果调用此接口给同一个用户发送多条消息,那么消息送达顺序无法保证。如果需要保证消息发送顺序,请逐条发送。