CodeLab ❤ Siri

我们近期发布了一个新的 Adapter 插件: extension_http_eim.py (可在插件市场下载)

使用该插件,可将 Siri 接入到 Scratch,并于 CodeLab 可编程空间里的一切互动。

Demo

Scratch 相关源码

原理

原理其实很简单:

  • 构建一个接受 http 请求的 web server
  • 使用 Siri 的输入(语音识别结果)构建 http 请求

构建一个接受 http 请求的 web server

extension_http_eim.py 实际上是一个 web server,fork 自extension_webserver.py

插件运行之后,会打开一个新页面,显示当前计算机的 IP。

它有两个重要 API:

  • 接受来自 http://<IP>:18081/api/message/eim?message=hiGET请求, 并将请求参数 message 的值作为 eim 消息发送到 Scratch。
  • 接受来自 http://<IP>:18081/api/message/eimPOST请求, 并将请求参数 message 的值作为 eim 消息发送到 Scratch(json)

如果你的请求参数包含中文,建议使用 POST。

熟悉 Adapter 的朋友可能会发现,该插件的功能和 Adapter REST API相近,为何要写成独立插件?原因是 Adapter 默认采用 https,但 https 容易遇到各种安全机制问题, http api 则不会遇到这类问题。

使用 Siri 的输入(语音识别结果)构建 http 请求

利用 iOS 的快捷指令。我们可以在 iOS 里自定义一些任务。

以上自定义任务的功能是控制乐高, 当你说hey siri 控制乐高 这条任务就会被触发。


假设你选择了顺时针旋转, 该命令就会经由 http post 到 web server,再自动转化为 EIM 消息进入 Adapter。你在 CodeLab Scratch 中就能为乐高的顺时针旋转编写相应逻辑。

演示视频里的控制房间和控制小车也是同理。值得注意的是,通过使用快捷指令里的列表,你可以构建多轮对话。

快捷指令里还有很多有意思的构造积木。

进一步

如果你想对文本做进一步的语义处理,又不想使用云端 API,推荐使用Rasa_NLU_Chi,我近期计划基于它写一个 Adapter 语义解析插件。

NLU 的处理结果如何操控实物呢?ThingTalkWebThings 提供了很好的思路。

参考