如何使用断点在 Google 的 Java 实现上本地调试 Actions?

How to debug locally Actions on Google's Java fulfillment using breakpoints?

我正在使用 IntelliJ 社区和 Java/Kotlin 客户端库为 Google 助手开发我的第一个 Action,以开发实现代码。有没有办法以典型方式(使用断点)在本地调试它?

由于代码将 运行 远程保存在服务器上,因此您无法以典型方式在本地进行调试。一种调试方法是使用日志记录、打印出关键变量并检查它们以了解 values/flow.

但是,如果您使用的是 Google 云,则可以考虑使用 Stackdriver Debug Snapshots。它不会停止执行,但会拍摄当时应用程序状态的快照,以便您可以返回并查看您的变量在哪一行。

我没有放弃,我做到了。 可以以典型方式在本地对 Google 的 fullfilment 进行调试操作。

为此,我使用了:IntelliJ Community Edition 和 ngrok

  1. 在本地 AppEngine 服务器 (guide) 上部署并run/debug 完成。
  2. 运行 ngrok 获取 public URL 以公开您的本地应用程序(使用命令行 "ngrok.exe http {portNumber}")。
  3. 将 https URL 复制并粘贴到 Dialogflow > Fullfilment > Webhook > URL。
  4. 在操作控制台上测试您的操作。

当您的 fullfilment 收到来自 DialogFlow 的 Post 请求时,您的应用程序将在断点处停止,您将能够以典型方式进行调试。

此解决方案的唯一缺点是 Google Assistant 等待 fullfilment 响应的时间有限,因此在您调试时,有时您的 Action 可能会停止显示消息 "YourApp isn't responding right now. Try again soon.". 但是,这个解决方案允许非常快速的部署和调试,我个人在开发阶段非常欣赏它。