偶然间发现居然有一家公司提供图灵机器人的 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_id
和 conversation_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
能正常工作。
试玩
不用说太多,现在就点下右下角试玩下吧。