作为 Google Chat 应用开发者,您可能需要调试代码,以测试更改效果或排查复杂的问题。调试 Chat 应用可以通过多种不同的方式完成,具体取决于您应用的架构、用途、部署方式以及您自己的偏好。
本页介绍了如何使用 ngrok 调试 HTTP Chat 应用。ngrok 是一种统一的入站流量平台,可用于测试本地开发环境。在本指南中,您将在本地环境中测试代码更改,并排查远程环境中的问题。
通过本地开发环境进行调试
在本部分中,您将与在本地环境中执行的 Chat 应用互动。
图 1. 在本地开发环境中调试。
研讨会
Node.js
Python
Java
前提条件
Node.js
- 本地环境中已安装的最新版
node
和npm
。 本地环境中安装的最新版
nodemon
,用于自动重新加载:npm install -g nodemon
已配置为可进行消息传递的 HTTP Chat 应用。您可以按照快速入门指南中的前提条件、设置环境和将应用发布到 Google Chat 部分进行操作。唯一的区别在于,您需要将应用名称设置为
Debug App
,并将 HTTP 端点网址设置为任意网址,例如http://example.com
。在本地环境中设置的可以调试的 IDE。在本指南中,我们使用
Visual Studio Code
IDE 及其默认调试功能进行说明。Git
已安装 在本地环境中。ngrok
账号。
Python
- 本地环境中已安装的
python3
最新版本。 - 本地环境中安装的最新版
pip
和virtualenv
,分别用于管理 Python 软件包和虚拟环境。 - 已配置为可进行消息传递的 HTTP Chat 应用。您可以按照快速入门指南中的前提条件、设置环境和将应用发布到 Google Chat 部分进行操作。唯一的区别在于,您需要将应用名称设置为
Debug App
,并将 HTTP 端点网址设置为任意网址,例如http://example.com
。 - 在本地环境中设置的可以调试的 IDE。在本指南中,我们使用
Visual Studio Code
IDE 及其默认调试功能进行说明。 Git
已安装 在本地环境中。ngrok
账号。- 在本地环境中安装并初始化了最新版本的
gcloud
。
Java
- 本地环境中已安装的
Java SE 11's JDK
的最新稳定版本。 - 本地环境中安装的最新版
Apache Maven
,用于管理 Java 项目。 - 已配置为可进行消息传递的 HTTP Chat 应用。您可以按照快速入门指南中的前提条件、设置环境和将应用发布到 Google Chat 部分进行操作。唯一的区别在于,您需要将应用名称设置为
Debug App
,并将 HTTP 端点网址设置为任意网址,例如http://example.com
。 - 在本地环境中设置的可以调试的 IDE。在本指南中,我们使用
Visual Studio Code
IDE 及其默认调试功能进行说明。 Git
已安装 在本地环境中。ngrok
账号。- 在本地环境中安装并初始化了最新版本的
gcloud
。
公开提供本地主机服务
您需要将本地环境连接到互联网,以便 Chat 应用可以访问该环境。ngrok
应用用于将向公共网址发出的 HTTP 请求重定向到本地环境。
- 在本地环境的浏览器中,登录您的
ngrok
账号。 - 安装应用并在本地环境中设置
authtoken
。 - 在您的
ngrok
账号中创建一个静态网域,在本指南的说明中,该网域称为NGROK_STATIC_DOMAIN
。
配置 Chat 应用
将 Chat 应用配置为将其所有 HTTP 请求发送到您的静态网域。
在 Google Cloud 控制台中,打开 Google Chat API 页面:
点击配置标签页。
依次前往互动功能 > 连接设置,并将文本字段 HTTP 端点网址的值设置为:
https://NGROK_STATIC_DOMAIN
将
NGROK_STATIC_DOMAIN
替换为ngrok
账号中的静态网域。点击保存。
图 2. 聊天应用将其所有 HTTP 请求发送到静态网域。ngrok
公共服务充当 Chat 应用与在本地执行的应用代码之间的桥梁。
测试 Chat 应用
您可以在本地部署、配置、测试、调试和自动重新加载 Chat 应用。
Node.js
将
googleworkspace/google-chat-samples
代码库从 GitHub 克隆到本地环境,其中包含要执行的应用代码:git clone https://github.com/googleworkspace/google-chat-samples.git
在本地环境中安装的
Visual Studio Code
IDE 中,执行以下操作:- 在新窗口中,打开文件夹
google-chat-samples/node/basic-app
。 通过在
package.json
文件中添加两个脚本,将应用配置为自动重新加载调试:{ ... "scripts": { ... "debug": "node --inspect index.js", "debug-watch": "nodemon --watch ./ --exec npm run debug" } ... }
从根目录安装应用:
npm install
通过在根目录中创建文件
.vscode/launch.json
,创建并配置名为Debug Watch
的启动,以触发脚本debug-watch
:{ "version": "0.2.0", "configurations": [{ "type": "node", "request": "launch", "name": "Debug Watch", "cwd": "${workspaceRoot}", "runtimeExecutable": "npm", "runtimeArgs": ["run-script", "debug-watch"] }] }
在
index.js
文件中添加一个会暂停 HTTP 请求处理的断点,然后使用之前添加的Debug Watch
配置开始运行和调试。应用现已运行,并在端口9000
上侦听 HTTP 请求。图 3. 应用正在运行,并监听端口
9000
上的 HTTP 请求。
- 在新窗口中,打开文件夹
在本地环境中启动
ngrok
应用:ngrok http --domain=NGROK_STATIC_DOMAIN 9000
将
NGROK_STATIC_DOMAIN
替换为ngrok
账号中的静态网域。所有请求现在都会重定向到本地环境和应用使用的端口。图 4. 运行并重定向
ngrok
服务器的终端。ngrok
应用也会在本地主机上启动一个 Web 界面,您可以在浏览器中打开该界面来监控所有活动。图 5. 由
ngrok
应用托管的 Web 界面,未显示任何 HTTP 请求。通过向 Chat 应用发送私信来测试该应用:
打开 Google Chat。
点击发起新聊天图标
。在对话框中,输入您的 Chat 应用的名称。
在搜索结果中,找到 Chat 应用,依次点击添加 > 聊天。
在私信对话中,输入
Hello
,然后按enter
。您的 Chat 应用未回复,因为该应用正在进行积极的调试。
在本地环境的
Visual Studio Code
中,您可以看到执行在设置的断点处暂停。图 6. 执行在设置的断点处暂停。
当您从调试器恢复执行
Visual Studio Code
时,在 Google Chat 使 Chat 应用超时之前,Chat 应用会回复Your message : Hello
。您可以通过本地环境中由
ngrok
应用托管的 Web 界面查看 HTTP 请求和响应日志。图 7. 由
ngrok
应用托管的 Web 界面发出的 HTTP 请求。如需更改应用行为,请将
Your message
替换为index.json
的内嵌35
Here was your message
。保存文件时,nodemon
会自动重新加载应用并使用更新后的源代码,而Visual Studio Code
仍处于调试模式。图 8. 应用正在运行,并监听端口
9000
上的 HTTP 请求,同时加载了代码更改。这次,您无需在聊天室中发送第二条消息
Hello
,只需在本地环境中由ngrok
应用托管的 Web 界面上选择最后记录的 HTTP 请求,然后点击Replay
即可。与上次一样,由于 Chat 应用正在进行调试,因此不会回复。当您从
Visual Studio Code
的调试器恢复执行时,您会看到本地环境中的ngrok
应用托管的 Web 界面显示,该应用会生成包含更新版消息Here was your message : Hello
的响应。
Python
获取新的用户凭据,以用于应用默认凭据:
gcloud config set project PROJECT_ID
gcloud auth application-default login
将
PROJECT_ID
替换为应用的 Cloud 项目的项目 ID。将
googleworkspace/google-chat-samples
代码库从 GitHub 克隆到本地环境,其中包含应用代码:git clone https://github.com/googleworkspace/google-chat-samples.git
在本地环境中安装的
Visual Studio Code
IDE 中,执行以下操作:- 在新窗口中,打开文件夹
google-chat-samples/python/avatar-app
。 为 Python
env
创建新的虚拟环境并将其激活:virtualenv env
source env/bin/activate
在虚拟环境中使用
pip
安装所有项目依赖项:pip install -r requirements.txt
在根目录中创建文件
.vscode/launch.json
,并配置一个名为Debug Watch
的启动,该启动在调试模式下从模块functions-framework
触发端口9000
上的应用,该应用位于虚拟环境env
中:{ "version": "0.2.0", "configurations": [{ "type": "python", "request": "launch", "name": "Debug Watch", "python": "${workspaceFolder}/env/bin/python3", "module": "functions_framework", "args": [ "--target", "avatar_app", "--port", "9000", "--debug" ] }] }
在
main.py
文件中添加一个会暂停 HTTP 请求处理的断点,然后使用之前添加的Debug Watch
配置开始运行和调试。应用现已运行,并在端口9000
上侦听 HTTP 请求。图 3. 应用正在运行,并监听端口
9000
上的 HTTP 请求。
- 在新窗口中,打开文件夹
在本地环境中启动
ngrok
应用:ngrok http --domain=NGROK_STATIC_DOMAIN 9000
将
NGROK_STATIC_DOMAIN
替换为ngrok
账号中的静态网域。所有请求现在都会重定向到本地环境和应用使用的端口。图 4. 运行并重定向
ngrok
服务器的终端。ngrok
应用也会在本地主机上启动一个 Web 界面,您可以在浏览器中打开该界面来监控所有活动。图 5. 由
ngrok
应用托管的 Web 界面,未显示任何 HTTP 请求。通过向 Chat 应用发送私信来测试该应用:
打开 Google Chat。
点击发起新聊天图标
。在对话框中,输入您的 Chat 应用的名称。
在搜索结果中,找到 Chat 应用,依次点击添加 > 聊天。
在私信对话中,输入
Hey!
,然后按enter
。您的 Chat 应用因正在进行积极调试而未回复。
在本地环境的
Visual Studio Code
中,您可以看到执行在设置的断点处暂停。图 6. 执行在设置的断点处暂停。
当您从调试器恢复执行
Visual Studio Code
时,在 Google Chat 超时之前,聊天应用会在消息中回复您的姓名和头像照片。您可以通过本地环境中由
ngrok
应用托管的 Web 界面查看 HTTP 请求和响应日志。图 7. 由
ngrok
应用托管的 Web 界面发出的 HTTP 请求。如需更改应用行为,请将
Hello
替换为main.py
文件的内嵌51
Hey
。保存文件时,Visual Studio Code
会自动重新加载应用,并使用更新后的源代码保持在调试模式下。图 8. 应用正在运行,并监听端口
9000
上的 HTTP 请求,同时加载了代码更改。这次,您无需在聊天室中发送第二条消息
Hey!
,只需在本地环境中由ngrok
应用托管的 Web 界面上选择最后记录的 HTTP 请求,然后点击Replay
即可。与上次一样,由于 Chat 应用正在进行调试,因此不会回复。当您从
Visual Studio Code
的调试器恢复执行时,您会看到本地环境中的ngrok
应用托管的 Web 界面显示,该应用会生成包含更新后消息版本的响应。
Java
获取新的用户凭据,以用于应用默认凭据:
gcloud config set project PROJECT_ID
gcloud auth application-default login
将
PROJECT_ID
替换为应用的 Cloud 项目的项目 ID。在本地环境中从 GitHub 克隆
googleworkspace/google-chat-samples
代码库,其中包含应用代码:git clone https://github.com/googleworkspace/google-chat-samples.git
在本地环境中安装的
Visual Studio Code
IDE 中,执行以下操作:- 在新窗口中,打开文件夹
google-chat-samples/java/avatar-app
。 通过在
pom.xml
文件中添加 Cloud Functions 框架 build 插件function-maven-plugin
,将 Maven 项目配置为在本地端口9000
上运行应用App
:... <plugin> <groupId>com.google.cloud.functions</groupId> <artifactId>function-maven-plugin</artifactId> <version>0.11.0</version> <configuration> <functionTarget>App</functionTarget> <port>9000</port> </configuration> </plugin> ...
您现在可以在本地以调试模式启动它:
mvnDebug function:run Preparing to execute Maven in debug mode Listening for transport dt_socket at address: 8000
在根目录中创建文件
.vscode/launch.json
,并配置一个名为Remote Debug Watch
的启动,该启动会附加到之前使用端口8000
启动的应用:{ "version": "0.2.0", "configurations": [{ "type": "java", "request": "attach", "name": "Remote Debug Watch", "projectName": "http-function", "hostName": "localhost", "port": 8000 }] }
在
App.java
文件中添加一个会暂停 HTTP 请求处理的断点,然后使用之前添加的Remote Debug Watch
配置开始附加和调试。应用现在正在运行,并侦听端口9000
上的 HTTP 请求。图 3. 应用正在运行,并监听端口
9000
上的 HTTP 请求。
- 在新窗口中,打开文件夹
在本地环境中启动
ngrok
应用:ngrok http --domain=NGROK_STATIC_DOMAIN 9000
将
NGROK_STATIC_DOMAIN
替换为ngrok
账号中的静态网域。所有请求现在都会重定向到本地环境和应用使用的端口。图 4. 运行并重定向
ngrok
服务器的终端。ngrok
应用也会在本地主机上启动一个 Web 界面,您可以在浏览器中打开该界面来监控所有活动。图 5. 由
ngrok
应用托管的 Web 界面,未显示任何 HTTP 请求。通过向 Chat 应用发送私信来测试该应用:
打开 Google Chat。
点击发起新聊天图标
。在对话框中,输入您的 Chat 应用的名称。
在搜索结果中,找到 Chat 应用,依次点击添加 > 聊天。
在私信对话中,输入
Hey!
,然后按enter
。您的 Chat 应用因正在进行积极调试而未回复。
在本地环境的
Visual Studio Code
中,您可以看到执行在设置的断点处暂停。图 6. 执行在设置的断点处暂停。
当您从调试器恢复执行
Visual Studio Code
时,在 Google Chat 超时之前,聊天应用会在消息中回复您的姓名和头像照片。您可以通过本地环境中由
ngrok
应用托管的 Web 界面查看 HTTP 请求和响应日志。图 7. 由
ngrok
应用托管的 Web 界面发出的 HTTP 请求。如需更改应用行为,请将
Hello
替换为App.java
文件的内嵌55
中的Hey
,重启mvnDebug
进程,然后重新启动Remote Debug Watch
以重新附加并重启调试。这次,您无需在聊天室中发送第二条消息
Hey!
,只需在本地环境中由ngrok
应用托管的 Web 界面上选择最后记录的 HTTP 请求,然后点击Replay
即可。与上次一样,由于 Chat 应用正在进行调试,因此不会回复。当您从
Visual Studio Code
的调试器恢复执行时,您会看到本地环境中的ngrok
应用托管的 Web 界面显示,该应用会生成包含更新后消息版本的响应。
从远程环境进行调试
在本部分中,您将与在远程环境中执行的聊天应用互动。
图 9. 从远程环境进行调试。
前提条件
- 与 Chat 应用之间的私信聊天室。您可以按照快速入门指南的测试 Chat 应用部分中的说明,搜索您的 Chat 应用以开始测试。
- 在远程环境中运行的应用,调试器已在给定端口上启用,在本指南的说明中,该应用称为
REMOTE_DEBUG_PORT
。 - 本地环境可以
ssh
到远程环境。 - 在本地环境中设置的可以调试的 IDE。在本指南中,我们将使用
Visual Studio Code
IDE 及其默认的调试功能进行说明。
连接本地环境和远程环境
在您要从中启动调试客户端连接的本地环境中,设置 SSH 隧道:
ssh -L LOCAL_DEBUG_PORT:localhost:REMOTE_DEBUG_PORT REMOTE_USERNAME@REMOTE_ADDRESS
替换以下内容:
LOCAL_DEBUG_PORT
:本地环境中的调试端口。REMOTE_USERNAME
:远程环境中的用户名。REMOTE_ADDRESS
:远程环境的地址。REMOTE_DEBUG_PORT
:远程环境中的调试端口。
本地环境中的调试端口现已关联到远程环境中的调试端口。
开始调试
在本地环境中安装的 Visual Studio Code
IDE 中,执行以下操作:
- 在新窗口中,打开应用的源代码。
在根目录中创建文件
.vscode/launch.json
,并配置一个名为Debug Remote
的启动,该启动会附加到本地环境中的调试端口:Node.js
{ "version": "0.2.0", "configurations": [{ "type": "node", "request": "attach", "name": "Debug Remote", "address": "127.0.0.1", "port": LOCAL_DEBUG_PORT }] }
Python
{ "version": "0.2.0", "configurations": [{ "type": "python", "request": "attach", "name": "Debug Remote", "connect": { "host": "127.0.0.1", "port": LOCAL_DEBUG_PORT } }] }
Java
{ "version": "0.2.0", "configurations": [{ "type": "java", "request": "attach", "name": "Debug Remote", "hostName": "127.0.0.1", "port": LOCAL_DEBUG_PORT }] }
将
LOCAL_DEBUG_PORT
替换为本地环境中的调试端口。在应用的源代码中添加一个会暂停 HTTP 请求处理的断点,然后使用之前添加的
Debug Remote
配置开始运行和调试。
在与 Chat 应用来往的私信聊天室中,输入您要测试的任何内容,然后按 enter
。您的 Chat 应用未回复,因为该应用正在 Visual Studio Code
IDE 中进行调试。
相关主题
- 了解如何启用和查询错误日志。
- 了解如何修正 Google Chat 应用错误,例如“应用未响应”“Google Chat API 仅适用于 Google Workspace 用户”或“用户可被排除在聊天室之外”。
- 了解如何修正卡片错误,例如卡片消息、对话框或链接预览未按预期呈现或运行。