基于极光消息JMessage实现一个智能(智障)机器人小助手【系列二】

134 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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: 这种方式受限于域名,无法测试,故代码为伪代码