0.1.7 • Published 2 years ago

rcs-sdk v0.1.7

Weekly downloads
-
License
MIT
Repository
-
Last release
2 years ago

封装客户端应用与 5G 消息平台间的相互调用功能。

使用 SDK

完整代码示例请查看单元测试文件test/sdk.test.js

初始化

rcs-sdk默认不安装JsSIPWebSocket,需要由使用 sdk 的应用自己进行安装。浏览器环境中不需要安装WebSocket

import * as JsSIP from 'jssip'
import * as WebSocket from 'ws'
import { RcsIMSDK } from 'rcs-sdk'

const rcssdk = await RcsIMSDK.formDM({JsSIP, WebSocket}

//或者

RcsIMSDK.formDM({JsSIP, WebSocket}.then((rcssdk) => { }).catch(e => { })

登录和注册

await rcssdk.login(userid, password)

//或者

rcssdk.login(username, password).then(async (sdkrst) => {
  /**
   * 获取账户基本信息
   */
  let { account } = sdkrst.data
  let { userid, nickname, nameAddr } = account
})

/*账号信息*/
expect(rcssdk.account.userid).toBe(userid)
expect(rcssdk.account.nickname).toBe('alice')
expect(rcssdk.account.nameAddr.toString()).toBe('<sip:alice@rcs-sdk.com>')

发送消息

发送消息要先新建消息再发送。

发送文本消息

/*新建文本消息对象*/
let sdkrst = await rcssdk.createTextMessage(ConverstionId, recipient, Text)
let rcsmsg = sdkrst.data
expect(rcsmsg.content).toBe(Text)
/*新建的消息处于发送状态*/
expect(rcsmsg.processingNotification).toBe('sending')

sdkrst = await rcssdk.sendMessage(rcsmsg)
rcsmsg = sdkrst.data
/*消息处于已发送状态*/
expect(rcsmsg.processingNotification).toBe('sent')

发送文件消息

/**
 * 1 - 新建文件消息对象
 */
let sdkrst = await rcssdk.createFileMessage(ConverstionId, recipient, rawFile)
let rcsmsg = sdkrst.data
let { file, thumbnail } = rcsmsg.content
/*文件消息对象中记录了文件的基本信息*/
expect(file.name).toBe(rawFile.name)
expect(file.size).toBe(rawFile.size)
expect(file.type).toBe(rawFile.type)
//缩略图信息空的,不可用
expect(rcsmsg.thumbnailValid).toBeFalsy()
/*新建的消息处于发送状态*/
expect(rcsmsg.processingNotification).toBe('sending')
/**
 * 2 - 上传文本消息对象
 */
/* 文件消息创建后,需要执行上传文件,获得文件存储信息 */
sdkrst = await rcssdk.uploadFile(rcsmsg, rawFile)
rcsmsg = sdkrst.data
expect(file.name).toBe(rawFile.name)
expect(file.size).toBe(rawFile.size)
expect(file.type).toBe(rawFile.type)
expect(file.data).toMatchObject({
  url: 'http://files.rcs-sdk.com/file-1.png',
  until: '2017-04-25T12:17:07Z',
})
// 文件上传服务不保证对所有类型的文件都提供缩略图,所以需要检查消息中是否包含了有效的缩略图信息
let thumbnailValid = rcsmsg.content.thumbnailValid
expect(thumbnailValid).toBeTruthy()
expect(thumbnail.size).toBe(100)
expect(thumbnail.type).toBe('image/png')
expect(thumbnail.data).toMatchObject({
  url: 'http://files.rcs-sdk.com/thumbnail-1.png',
  until: '2017-04-25T12:17:07Z',
})
/**
 * 3 - 发送文件消息对象
 */
sdkrst = await rcssdk.sendMessage(rcsmsg)
rcsmsg = sdkrst.data
/*消息处于已发送状态*/
expect(rcsmsg.processingNotification).toBe('sent')

发送建议回复

/*新建文本消息对象*/
let sdkrst = await rcssdk.createSugRspMessage(ConverstionId, recipient, Sug)
let rcsmsg = sdkrst.data
/*新建的消息处于发送状态*/
expect(rcsmsg.processingNotification).toBe('sending')

sdkrst = await rcssdk.sendMessage(rcsmsg)
rcsmsg = sdkrst.data
/*消息处于已发送状态*/
expect(rcsmsg.processingNotification).toBe('sent')

接收消息

通过在 sdk 上注册监听事件CbEvents.ONRECVNEWMESSAGE接收新消息。

rcssdk.on(CbEvents.ONRECVNEWMESSAGE, (sdkrst) => {
  let rcsmsg = sdkrst.data
  expect(rcsmsg.initialContentType.fulltype).toBe(Message_Content_Type.text)
  expect(rcsmsg.content).toBe('hello')
  expect(rcsmsg.from.toString()).toBe(from)
  expect(rcsmsg.to.toString()).toBe(to)
  expect(rcsmsg.conversationId).toBe(conversationId)
  expect(rcsmsg.contributionId).toBe(contributionId)
  expect(rcsmsg.messageId).toBe(messageId)
  expect(rcsmsg.dateTime.value).toBe(dateTimeStr)
  resolve()
})

获得会话列表

const sdkrst = await rcssdk.getAllConversationList()

//会话对象的数组
const convarr = sdkrst.data
expect(convarr).toHaveLength(1)

//会话对象
let conv = convarr[0]
expect(conv.id).toBe('1')
expect(conv.viewer.toString()).toBe('<sip:alice@rcs-sdk.com>')
expect(conv.peer.toString()).toBe('<tel:+8617928222350>')
expect(conv.content).toBe('hello world')

获得会话消息列表

const ConversationID = '指定的会话ID'
const sdkrst = await rcssdk.getHistoryMessageList(ConversationID)

/* 会话里有5条消息 */
const msgarr = sdkrst.data
expect(msgarr).toHaveLength(5)
/* 依次是:文本,文本加建议,卡片,卡片加建议,文件 */
/* 消息是RcsMsg的实例 */
let [text, textAndSugs, card, cardAndSugs, file] = msgarr
/**
 * 1 - 文本消息
 */
expect(text.initialContentType.fulltype).toBe(Message_Content_Type.text)
/*消息内容*/
expect(text.content).toBe('hello world')
/*消息ID*/
expect(text.messageId).toBe('1')
/*发送人*/
expect(text.from.toString()).toBe('<sip:alice@rcs-sdk.com>')
/*接收人*/
expect(text.to.toString()).toBe('<sip:bob@rcs-sdk.com>')
/*消息生成时间*/
expect(text.dateTime.value).toBe('2012-09-01T11:46:43.350+08:00')
/*递送状态*/
expect(text.deliveryNotification).toBe('delivered')
expect(text.displayNotification).toBe('displayed')
expect(text.processingNotification).toBe('stored')

获得联系人列表

const sdkrst = await rcssdk.getContactList()

获得联系人详情

const sdkrst = await rcssdk.getContactDetail(userid)

获得 Chatbot 应用列表

const sdkrst = await rcssdk.getChatbotList()

获得 Chatbot 应用详情

const sdkrst = await rcssdk.getChatbotDetail(chatbotid)

环境变量

服务地址

环境变量用途说明默认值
RCS_SDK_AUTH_API_SERVER提供用户认证服务相关 API 的服务访问地址。
RCS_SDK_AUTH_API_PIN认证服务需要的万能验证码
RCS_SDK_AUTH_TYPE认证方式 apply(appkey、secret)方式 和 账号密码方式
RCS_SDK_AUTH_API_TIMEOUT认证服务 API 超时时间
RCS_SDK_MSG_API_SERVER提供消息服务相关 API 的服务访问地址。
RCS_SDK_MSG_API_TIMEOUT消息服务 API 访问超时时间。
RCS_SDK_CONTACT_API_SERVER提供联系人服务相关 API 的服务访问地址。
RCS_SDK_CONTACT_API_TIMEOUT联系人服务 API 访问超时时间。
RCS_SDK_CHATBOT_API_SERVER提供 Chatbot 获取服务相关 API 的服务访问地址。
RCS_SDK_CHATBOT_API_TIMEOUTChatbot 获取服务 API 访问超时时间。
RCS_SDK_UPLOAD_API_SERVER提供文件上传服务相关 API 的服务访问地址。
RCS_SDK_UPLOAD_API_TIMEOUT文件上传服务 API 访问超时时间。
RCS_SDK_SIP_SERVER提供消息收发服务的 SIP 服务访问地址。

模拟数据

支持通过环境变量指定服务接口返回模拟数据的存储位置。

环境变量用途说明默认值
RCS_SDK_SKIP_AUTH设置 SIP 服务是否检查用户认证状态。false
RCS_SDK_MOCK_FILE_PATH_GET_TOKEN指定模拟返回当前用户登录成功后获得的 token 数据的存储位置。
RCS_SDK_MOCK_FILE_PATH_GET_ACCOUNT指定模拟返回当前用户账户数据的存储位置。
RCS_SDK_MOCK_FILE_PATH_CONVERSATION_LIST指定模拟返回当前用户会话列表数据的存储位置。
RCS_SDK_MOCK_FILE_PATH_CONTACT_LIST指定模拟返回当前用户联系人列表数据的存储位置。
RCS_SDK_MOCK_FILE_PATH_UPLOAD_FILE指定模拟返回当前用户上传文件接口返回数据的存储位置。

单元测试

可以通过指定环境变量使用模拟测试数据和输出调试日志。

使用模拟数据

通过环境变量MOCK控制服务接口访问真实服务还是使用指定的模拟数据。模拟数据的获取位置通过RCS_SDK_MOCK_开通的环变量指定。

MOCK=auth,sip,conversation,message,uploader npm test sdk.test.js
npm test user.test.js
MOCK=message,uploader npm test message
MOCK=conversation npm test conversation
MOCK=contact npm test contact

输出日志

通过环境变量DEBUG控制输出日志。

DEBUG=rcssdk:* MOCK=auth,sip,conversation,message npm test sdk.test.js

0.1.7

2 years ago

0.1.6

2 years ago

0.1.5

2 years ago

0.1.4

2 years ago

0.1.3

2 years ago

0.1.2

2 years ago

0.1.1

2 years ago

0.1.0

2 years ago