会话协议

连接 websocket 之后,需要创建会话(session),在会话中与情感云计算平台进行数据交互。针对会话的操作如下:

服务 操作 备注
session create 认证并创建会话
restore 恢复会话
close 结束会话

创建并认证会话(Session Create & Authentication)

创建并认证会话。

[!WARNING] 请求所有情感云计算的服务必须先进行会话认证。

认证并创建对话的 Request

{
    "services": "session",
    "op": "create",
    "kwargs": {
        "app_key": app_key, # 云后台生成的APP Key
        "user_id": userid,    # 会话关联的唯一用户 id 的 md5 哈希值
        "timestamp": timestamp,  # 实时时间戳
        "sign": sign   # 详见sign步骤
    }
}

sign 步骤(v1版本)

  • 从后台获取 app_secret
  • 将待签名字符串要求按照参数名进行排序;(首先比较所有参数名的第一个字母,按abcd顺序排列,若遇到相同首字母,则看第二个字母,以此类推)
  • 将排好序后的参数拼接成字符串;
  • 然后对拼接好后的字符串做 md5;
  • md5 后的值全部转为大写。

例如:对于如下的参数进行签名:

app_key = "c821db84-6fbd-11e4-a9e3-c86000d36d7c",
app_secret = "b1a071f0d3f119de465a6d8c9a8c0e7f",
timestamp = 1566971668,  # 实时时间戳
user_id = "098f6bcd4621d373cade4e832627b4f6"

sign_str = "app_key={}&app_secret={}&timestamp={}&user_id={}".format(
    app_key, app_secret, timestamp, user_id
) # 将待签名字符串要求按照参数名进行排序(首先比较所有参数名的第一个字母,按 abcd 顺序排列,若遇到相同首字母,则看第二个字母,以此类推)

sign = hashlib.md5(sign_str).hexdigest().upper()  # sign 即为签名值(需全大写)

user_id

user_id 为开发者 app 内的唯一用户 id 经过 md5 哈希之后的值。user_id 可用于定位会话用户归属,可用于后期数据关联查询和错误追踪。

[!TIP]

  • App 内的唯一用户 id 可为手机号、邮箱、用户 id、账户名等,但需要保证唯一性。
  • 我们保存的仅为 md5 之后的值,不会知道 app 内用户的原始 id。
  • 用户上传的 user_id 必须为 md5 值,且通过验证接口上传的 timestampuser_id 必须和参与签名的完全一致。

认证并创建对话的 Response

{
    "code": 0,
    "request": {
        "services": "session",
        "op": "start"
    },
    "data": {
        "session_id": session_id    # 会话 ID,每次 Start 连接会生成唯一 ID, 可以用来做会话恢复
    }
}

恢复会话(Session Restore)

恢复会话。会话因为网络条件不好而中断,可以选择恢复。

[!NOTE]

  • 会话保留时间为 10 分钟,10 分钟内可以根据 session_id 来恢复会话,超过 10 分钟会话将会被销毁。
  • 测试应用的保留时间为 2 分钟。

恢复会话的 Request

{
    "services": "session",
    "op": "restore",
    "kwargs": {
        "app_key": app_key, # 云后台生成的 APP Key
        "session_id": session_id,    # 会话 ID,由 Session Start 生成
        "user_id": userid,    # 会话关联的唯一用户 id 的 md5 哈希值
        "timestamp": timestamp,  # 实时时间戳
        "sign": sign   # 详见 sign 步骤
    }
}

恢复会话的 Response

{
    "code": 0,
    "request": {
        "services": "session",
        "op": "restore"
    }
}

结束会话(Session Close)

结束会话。

[!WARNING] 会话结束后一定要调用 session close,不然服务端仍然会保留会话,并产生费用。

结束会话的 Request

{
    "services": "session",
    "op": "close"
}

结束会话的 Response

{
    "code": 0,
    "request": {
        "services": "session",
        "op": "close"
    }
}
© Entertech 2019 all right reserved,powered by Gitbook该文件修订时间: 2019-11-29 06:38:15

results matching ""

    No results matching ""