图灵机器人

2017/1/19 posted in  坏笔记不如好记性

偶然间发现居然有一家公司提供图灵机器人的 API(http://www.tuling123.com ),突然觉得可以做些好玩的东西,比如接入 DaoVoice。

在之前就在博客上接入 Voice,但是基本上没怎么用过,索性就拿自己的博客做个试验。

获得 API

图灵机器人 注册下,然后创建一个机器人拿到 APIkey:

然后可以使用官方提供的 API,进行简单的对话:

# POST /openapi/api

+ Request (application/json; charset=utf-8)

        {
            "key": "<APIKey>",
            "info": "hello",
            "userid": "<user_id>"
        }

+ Response 200

    + Headers

            Transfer-Encoding: chunked

    + Body

            {"code":100000,"text":"hi"}

这里的 info 就是发送的对话,而 response 里的 text 就是回复。

需要注明的就是这里的 userid,这是一个可以为空的字段,如果填写的话,可以对不同的用户的对话加些区分。

这个 api 可以做很多有趣的事情,不仅仅是简单的对话,还可以提供日常服务,比如问问天气讲个笑话之类的,用法的话可以见官方文档:http://www.tuling123.com/help/h_cent_webapi.jhtml?nav=doc

接入 DaoVoice

对于对话类的接入肯定是需要实时性,那么 Voice 提供的 Webhook 就可以满足需求,而 webhook 的详细内容可以看 Voice 的文档:http://docs.daovoice.io/api/#webhook

比如当收到用户回复的时候,主要关注 conversation_idconversation_parts 里的第一个信息的 body ,前者因为这是调用 Voice 回复 api 时要用的信息,后者是因为 conversation_parts 包含了整个对话,而第一个便是最新的回复。

当拿到这两个信息之后,把 body 里的内容,发给图灵机器人获得回复之后再把回复通过 回复对话API 发送给用户就可以了。

Docker image

因为程序非常简单,就是两个 API 来回倒腾,就几行代码的事情,索性 build 出一个镜像:https://hub.daocloud.io/repos/147ff5fa-dbdd-4f79-a489-546d2fc63e9c

部署

需要几个环境,变量,缺一不可。

KEY VALUE
VOICE_TOKEN DaoVoice 的 access_token
VOICE_API https://api.daovoice.io
VOICE_ADMIN_ID DaoVoice 用来回复的用户 admin_id
REBOT_API http://openapi.tuling123.com/openapi
REBOT_TOKEN 图灵机器人的 APIKey
docker run -d -p 80:4000 -e <上面的环境变量> daocloud.io/ihypo/robot

还有一个选填的环境变量:

KEY VALUE
SAY_HELLO 当用户创建回话的默认回复

使用

这个镜像开放两个 API

ping api,用来检查看有没有还活着:

# GET /_ping

hook api,直接把这个 api 添加到 DaoVoice 的 webhook 里就可以了:

# POST /hook

注意

只保证 tag:latest 能正常工作。

试玩

不用说太多,现在就点下右下角试玩下吧。