持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第6天,点击查看活动详情
应用内聊天和跨应用聊天是一些toB的应用不可或缺的功能之一,极光IM借助极光推送的长链接通道,提供了一个IM一揽子解决方案 本文将以极光IM为例,实现一个小型机器人demo,机器人的注册有两种方式,一种是特定uid,一种是通过极光的实时消息路由。下面将会针对这两种方式,分别进行简要说明。
基于极光实时消息路由实现机器人
// 基于极光sdk进行机器人用户初始化
// sdk初始化
const JIM = new JMessage();
JIM.init({
"appkey" : "<appkey>",
"random_str" : "<random_str>",
"signature" : "<signature>",
"timestamp" : "<timestamp>",
"flag" : 0
}).onSuccess(function(data) {
//data.code 返回码
//data.message 描述
}).onFail(function(data) {
// 同上
});
这里为了接收极光实时消息路由,需要提供一个后台接口,本文为基于node的简单实现
const express = require('express')
const app = express()
const port = 3000
const https = require('https')
let baseurl = 'https://api.im.jpush.cn/'
function actionMsg (content) { return '对不起,我没理解你的意思。。。请再说一次' }
app.get('/jim/callback', (req, res) => {
let data = res.data
data.messages.map(v => {
if (actionMsg(v.content)) {
https.post(baseurl + '/v1/messages', {
"version": 1, "target_type": "single", "target_id": "ppppp", "from_type": "admin", "from_id": "admin_caiyh", "msg_type": "voice", "msg_body": { json define yourself }
})
}
})
res.send(JSON.stringify({code: 200, success:true}))
})
app.listen(port, () => {
console.log(`Example app listening on port ${port}`)
})
文档描述
Header(头)里加一个字段(Key/Value对):
Authorization: Basic base64_auth_string
其中 base64_auth_string 的生成算法为:base64(appKey:masterSecret)
即,对 appKey 加上冒号,加上 masterSecret 拼装起来的字符串,再做 base64 转换。
msg callback在请求的时候会带上Authorization: Basic base64_auth_string让开发者服务进行验证
https 接口采用post方法
Request header
Content-Type: application/json; charset=utf-8
Request Body
{
"total":1,
"messages":[
{
"target_type":"single",
"msg_type":"text",
"target_name":"JMessage",
"target_id":"10000002",
"from_id":"10000001",
"from_name":"JPush",
"from_type":"user",
"from_platform":"a",
"msg_body":{
"text":"text",
"extras":{
}
},
"create_time":1446016259,
"version":1,
"msgid":12345678,
"msg_level": 0,
"msg_ctime" : 1466866468352 // 服务器接收到消息的时间,单位毫秒
}
]
}
与REST Report历史消息获取的消息格式相同
msg callback 所需的成功响应
Response
HTTP/1.1 200
Content-Type: application/json; charset=utf-8
tips: 这种方式受限于域名,无法测试,故代码为伪代码