Отладка приложений Google Chat

Как разработчик приложений Google Chat, вам может потребоваться отладка кода для тестирования изменений или устранения сложных неполадок. Отладка приложений Google Chat может осуществляться различными способами в зависимости от архитектуры вашего приложения, его функций, способа развертывания и ваших предпочтений.

На этой странице объясняется, как отлаживать приложение HTTP-чата с помощью ngrok — унифицированной платформы Ingress, которую можно использовать для тестирования локальных сред разработки. В этом руководстве вы протестируете изменения кода в локальной среде и устраните неполадки в удалённой среде.

Отладка из локальной среды разработки

В этом разделе вы взаимодействуете с приложением чата, которое выполняется в вашей локальной среде.

Отладка из локальной среды разработки

Рисунок 1. Отладка в локальной среде разработки.

Мастерская

Node.js

Питон

Ява

Предпосылки

Node.js

Питон

Ява

Сделать службу localhost общедоступной

Вам необходимо подключить вашу локальную среду к Интернету, чтобы приложение Chat могло к ней получить доступ. Приложение ngrok используется для перенаправления HTTP-запросов, отправленных на общедоступный URL, в вашу локальную среду.

  1. В браузере локальной сети войдите в свою учетную запись ngrok .
  2. Установите приложение и настройте свой authtoken в локальной среде.
  3. Создайте статический домен в своей учетной записи ngrok , в инструкциях этого руководства он обозначается как NGROK_STATIC_DOMAIN .

Настройте приложение чата

Настройте приложение чата на отправку всех HTTP-запросов на ваш статический домен.

  1. В консоли Google Cloud откройте страницу Google Chat API:

    Перейти на страницу API Google Chat

  2. Откройте вкладку «Конфигурация» .

  3. Перейдите в раздел Интерактивные функции > Настройки подключения и задайте для текстового поля URL-адрес конечной точки HTTP следующее значение:

    https://NGROK_STATIC_DOMAIN
    

    Замените NGROK_STATIC_DOMAIN на статический домен в вашей учетной записи ngrok .

  4. Нажмите «Сохранить» .

Приложение чата отправляет все свои HTTP-запросы на статический домен

Рисунок 2. Приложение Chat отправляет все свои HTTP-запросы статическому домену. Публичный сервис ngrok выступает в качестве моста между приложением Chat и кодом приложения, который выполняется локально.

Протестируйте приложение чата

Вы можете локально развернуть, настроить, протестировать, отладить и автоматически перезагрузить свое приложение Chat.

Node.js

  1. Клонируйте репозиторий googleworkspace/google-chat-samples из GitHub в свою локальную среду. Он содержит код приложения для выполнения:

    git clone https://github.com/googleworkspace/google-chat-samples.git
  2. В среде Visual Studio Code IDE, установленной в вашей локальной среде, выполните следующие действия:

    1. В новом окне откройте папку google-chat-samples/node/basic-app .
    2. Настройте приложение для отладки с автоматической перезагрузкой, добавив два скрипта в файл package.json :

      {
          ...
          "scripts": {
              ...
              "debug": "node --inspect index.js",
              "debug-watch": "nodemon --watch ./ --exec npm run debug"
          }
          ...
      }
      
    3. Из корневого каталога установите приложение:

      npm install
    4. Создайте и настройте запуск с именем Debug Watch , который запускает скрипт debug-watch , создав файл .vscode/launch.json в корневом каталоге:

      {
          "version": "0.2.0",
          "configurations": [{
              "type": "node",
              "request": "launch",
              "name": "Debug Watch",
              "cwd": "${workspaceRoot}",
              "runtimeExecutable": "npm",
              "runtimeArgs": ["run-script", "debug-watch"]
          }]
      }
      
    5. Добавьте точку останова, которая приостанавливает обработку HTTP-запроса в файле index.js , и запустите запуск и отладку с ранее добавленной конфигурацией Debug Watch . Приложение теперь запущено и прослушивает HTTP-запросы на порту 9000 .

      Приложение запущено и прослушивает HTTP-запросы на порте `9000`.

      Рисунок 3. Приложение запущено и прослушивает HTTP-запросы на порту 9000 .

  3. Запустите приложение ngrok в вашей локальной среде:

    ngrok http --domain=NGROK_STATIC_DOMAIN 9000

    Замените NGROK_STATIC_DOMAIN статическим доменом в вашей учётной записи ngrok . Теперь все запросы будут перенаправляться в вашу локальную среду и на порт, используемый приложением.

    Терминал с запущенным сервером `ngrok` и перенаправлением

    Рисунок 4. Терминал с запущенным сервером ngrok и перенаправлением.

  4. Веб-интерфейс также запускается на вашем локальном хосте приложением ngrok ; вы можете отслеживать все действия, открыв его в браузере.

    Веб-интерфейс, размещенный в приложении `ngrok`, не отображает HTTP-запросы.

    Рисунок 5. Веб-интерфейс, размещенный приложением ngrok , не отображает HTTP-запросы.

  5. Протестируйте свое приложение Chat, отправив ему личное сообщение:

    • Откройте Google Чат.

      Перейти в Google Чат

    • Нажмите новый чат .

    • В диалоговом окне введите название вашего чат-приложения.

    • В результатах поиска найдите приложение Chat, нажмите Добавить > Чат .

    • В поле для личных сообщений введите Hello и нажмите enter . Ваше приложение Chat не отвечает, поскольку оно находится в процессе отладки.

  6. В Visual Studio Code в вашей локальной среде вы можете увидеть, что выполнение приостановлено на установленной точке останова.

    Выполнение приостанавливается на точке останова, которая была установлена

    Рисунок 6. Выполнение приостанавливается на установленной точке останова.

  7. При возобновлении выполнения из отладчика Visual Studio Code до истечения времени ожидания Google Chat приложение Chat отвечает Your message : Hello .

  8. Вы можете проверить журналы HTTP-запросов и ответов из веб-интерфейса, размещенного приложением ngrok в вашей локальной среде.

    HTTP-запрос от веб-интерфейса, размещенного в приложении `ngrok`

    Рисунок 7. HTTP-запрос от веб-интерфейса, размещенного приложением ngrok .

  9. Чтобы изменить поведение приложения, замените Your message Here was your message в строке 35 файла index.json . При сохранении файла nodemon автоматически перезагружает приложение с обновлённым исходным кодом, а Visual Studio Code остаётся в режиме отладки.

    Приложение запущено и прослушивает HTTP-запросы на порту `9000` с загруженным изменением кода.

    Рисунок 8. Приложение запущено и прослушивает HTTP-запросы на порту 9000 с загруженным изменением кода.

  10. На этот раз вместо отправки второго сообщения Hello в поле «Здравствуйте», вы можете выбрать последний HTTP-запрос, зарегистрированный в веб-интерфейсе, размещенном приложением ngrok в вашей локальной среде, и нажать Replay . Как и в прошлый раз, ваше приложение Chat не отвечает, поскольку оно находится в процессе активной отладки.

  11. При возобновлении выполнения из отладчика Visual Studio Code вы можете увидеть в веб-интерфейсе, размещенном приложением ngrok в вашей локальной среде, что приложение генерирует ответ с обновленной версией сообщения Here was your message : Hello .

Питон

  1. Получите новые учетные данные пользователя для использования в качестве учетных данных приложения по умолчанию :

    gcloud config set project PROJECT_ID
    gcloud auth application-default login

    Замените PROJECT_ID на идентификатор облачного проекта приложения.

  2. Клонируйте репозиторий googleworkspace/google-chat-samples из GitHub в свою локальную среду. Он содержит код приложения:

    git clone https://github.com/googleworkspace/google-chat-samples.git
  3. В среде Visual Studio Code IDE, установленной в вашей локальной среде, выполните следующие действия:

    1. В новом окне откройте папку google-chat-samples/python/avatar-app .
    2. Создайте новую виртуальную среду для Python env и активируйте ее:

      virtualenv env
      source env/bin/activate
    3. Установите все зависимости проекта с помощью pip в виртуальной среде:

      pip install -r requirements.txt
    4. Создайте файл .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"
              ]
          }]
      }
      
    5. Добавьте точку останова, которая приостанавливает обработку HTTP-запроса в файле main.py , и запустите запуск и отладку с ранее добавленной конфигурацией Debug Watch . Приложение теперь работает и прослушивает HTTP-запросы на порту 9000 .

      Приложение запущено и прослушивает HTTP-запросы на порте `9000`.

      Рисунок 3. Приложение запущено и прослушивает HTTP-запросы на порту 9000 .

  4. Запустите приложение ngrok в вашей локальной среде:

    ngrok http --domain=NGROK_STATIC_DOMAIN 9000

    Замените NGROK_STATIC_DOMAIN статическим доменом в вашей учётной записи ngrok . Теперь все запросы будут перенаправляться в вашу локальную среду и на порт, используемый приложением.

    Терминал с запущенным сервером `ngrok` и перенаправлением

    Рисунок 4. Терминал с запущенным сервером ngrok и перенаправлением.

  5. Веб-интерфейс также запускается на вашем локальном хосте приложением ngrok ; вы можете отслеживать все действия, открыв его в браузере.

    Веб-интерфейс, размещенный в приложении `ngrok`, не отображает HTTP-запросы.

    Рисунок 5. Веб-интерфейс, размещенный приложением ngrok , не отображает HTTP-запросы.

  6. Протестируйте свое приложение Chat, отправив ему личное сообщение:

    • Откройте Google Чат.

      Перейти в Google Чат

    • Нажмите новый чат .

    • В диалоговом окне введите название вашего чат-приложения.

    • В результатах поиска найдите приложение Chat, нажмите Добавить > Чат .

    • В поле для личных сообщений введите Hey! и нажмите enter . Ваше приложение чата не отвечает, поскольку оно находится в процессе отладки.

  7. В Visual Studio Code в вашей локальной среде вы можете увидеть, что выполнение приостановлено на установленной точке останова.

    Выполнение приостанавливается на точке останова, которая была установлена

    Рисунок 6. Выполнение приостанавливается на установленной точке останова.

  8. При возобновлении выполнения из отладчика Visual Studio Code до истечения времени ожидания Google Chat приложение Chat отвечает вашим именем и аватаром в сообщении.

  9. Вы можете проверить журналы HTTP-запросов и ответов из веб-интерфейса, размещенного приложением ngrok в вашей локальной среде.

    HTTP-запрос от веб-интерфейса, размещенного в приложении `ngrok`

    Рисунок 7. HTTP-запрос от веб-интерфейса, размещенного приложением ngrok .

  10. Чтобы изменить поведение приложения, замените Hello на Hey в строке 51 файла main.py При сохранении файла Visual Studio Code автоматически перезагружает приложение с обновлённым исходным кодом и остаётся в режиме отладки.

    Приложение запущено и прослушивает HTTP-запросы на порту `9000` с загруженным изменением кода.

    Рисунок 8. Приложение запущено и прослушивает HTTP-запросы на порту 9000 с загруженным изменением кода.

  11. На этот раз вместо отправки второго сообщения Hey! в поле «Внимание!» вы можете выбрать последний HTTP-запрос, зарегистрированный в веб-интерфейсе, размещенном приложением ngrok в вашей локальной среде, и нажать Replay . Как и в прошлый раз, ваше приложение чата не отвечает, поскольку оно находится в процессе активной отладки.

  12. При возобновлении выполнения из отладчика Visual Studio Code вы можете увидеть в веб-интерфейсе, размещенном приложением ngrok в вашей локальной среде, что приложение генерирует ответ с обновленной версией сообщения.

Ява

  1. Получите новые учетные данные пользователя для использования в качестве учетных данных приложения по умолчанию :

    gcloud config set project PROJECT_ID
    gcloud auth application-default login

    Замените PROJECT_ID на идентификатор облачного проекта приложения.

  2. Клонируйте репозиторий googleworkspace/google-chat-samples из GitHub в своей локальной среде, он содержит код приложения:

    git clone https://github.com/googleworkspace/google-chat-samples.git
  3. В среде Visual Studio Code IDE, установленной в вашей локальной среде, выполните следующие действия:

    1. В новом окне откройте папку google-chat-samples/java/avatar-app .
    2. Настройте проект Maven для локального запуска приложения App на порту 9000 , добавив плагин сборки Cloud Functions Framework function-maven-plugin в файл pom.xml :

      ...
      <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>
      ...
      
    3. Теперь вы можете запустить его локально в режиме отладки:

      mvnDebug function:run
      Preparing to execute Maven in debug mode
      Listening for transport dt_socket at address: 8000
    4. Создайте файл .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
          }]
      }
      
    5. Добавьте точку останова, которая приостанавливает обработку HTTP-запроса в файле App.java , и начните подключение и отладку с ранее добавленной конфигурацией Remote Debug Watch . Приложение теперь запущено и прослушивает HTTP-запросы на порту 9000 .

      Приложение запущено и прослушивает HTTP-запросы на порте `9000`.

      Рисунок 3. Приложение запущено и прослушивает HTTP-запросы на порту 9000 .

  4. Запустите приложение ngrok в вашей локальной среде:

    ngrok http --domain=NGROK_STATIC_DOMAIN 9000

    Замените NGROK_STATIC_DOMAIN статическим доменом в вашей учётной записи ngrok . Теперь все запросы будут перенаправляться в вашу локальную среду и на порт, используемый приложением.

    Терминал с запущенным сервером `ngrok` и перенаправлением

    Рисунок 4. Терминал с запущенным сервером ngrok и перенаправлением.

  5. Веб-интерфейс также запускается на вашем локальном хосте приложением ngrok ; вы можете отслеживать все действия, открыв его в браузере.

    Веб-интерфейс, размещенный в приложении `ngrok`, не отображает HTTP-запросы.

    Рисунок 5. Веб-интерфейс, размещенный приложением ngrok , не отображает HTTP-запросы.

  6. Протестируйте свое приложение Chat, отправив ему личное сообщение:

    • Откройте Google Чат.

      Перейти в Google Чат

    • Нажмите новый чат .

    • В диалоговом окне введите название вашего чат-приложения.

    • В результатах поиска найдите приложение Chat, нажмите Добавить > Чат .

    • В поле для личных сообщений введите Hey! и нажмите enter . Ваше приложение чата не отвечает, поскольку оно находится в процессе отладки.

  7. В Visual Studio Code в вашей локальной среде вы можете увидеть, что выполнение приостановлено на установленной точке останова.

    Выполнение приостанавливается на точке останова, которая была установлена

    Рисунок 6. Выполнение приостанавливается на установленной точке останова.

  8. При возобновлении выполнения из отладчика Visual Studio Code до истечения времени ожидания Google Chat приложение Chat отвечает вашим именем и аватаром в сообщении.

  9. Вы можете проверить журналы HTTP-запросов и ответов из веб-интерфейса, размещенного приложением ngrok в вашей локальной среде.

    HTTP-запрос от веб-интерфейса, размещенного в приложении `ngrok`

    Рисунок 7. HTTP-запрос от веб-интерфейса, размещенного приложением ngrok .

  10. Чтобы изменить поведение приложения, замените Hello на Hey в строке 55 файла App.java , перезапустите процесс mvnDebug и перезапустите Remote Debug Watch чтобы повторно подключиться и перезапустить отладку .

  11. На этот раз вместо отправки второго сообщения Hey! в поле «В поле» вы можете выбрать последний HTTP-запрос, зарегистрированный в веб-интерфейсе, размещенном приложением ngrok в вашей локальной среде, и нажать Replay . Как и в прошлый раз, ваше приложение чата не отвечает, поскольку оно находится в процессе активной отладки.

  12. При возобновлении выполнения из отладчика Visual Studio Code вы можете увидеть в веб-интерфейсе, размещенном приложением ngrok в вашей локальной среде, что приложение генерирует ответ с обновленной версией сообщения.

Отладка из удаленной среды

В этом разделе вы взаимодействуете с приложением чата, которое выполняется в удаленной среде.

Отладка из удаленной среды

Рисунок 9. Отладка из удаленной среды.

Предпосылки

  • Место для личных сообщений в вашем чат-приложении. Вы можете воспользоваться разделом «Тестирование чат-приложения» в руководстве по быстрому старту и найти нужное чат-приложение, чтобы запустить его.
  • Ваше приложение, работающее в удаленной среде с отладчиком, включенным на определенном порту, в инструкциях данного руководства обозначается как REMOTE_DEBUG_PORT .
  • Ваша локальная среда может ssh к удаленной среде.
  • Интегрированная среда разработки (IDE), настроенная в вашей локальной среде и поддерживающая отладку. В этом руководстве для наглядности мы используем интегрированную среду разработки (IDE) Visual Studio Code и её стандартные функции отладки .

Подключите локальные и удаленные среды

В локальной среде, из которой вы хотите инициировать отладочное клиентское соединение, настройте 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, установленной в вашей локальной среде, выполните следующие действия:

  1. В новом окне откройте исходный код вашего приложения.
  2. Создайте файл .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
        }]
    }
    

    Питон

    {
        "version": "0.2.0",
        "configurations": [{
            "type": "python",
            "request": "attach",
            "name": "Debug Remote",
            "connect": {
                "host": "127.0.0.1",
                "port": LOCAL_DEBUG_PORT
            }
        }]
    }
    

    Ява

    {
        "version": "0.2.0",
        "configurations": [{
            "type": "java",
            "request": "attach",
            "name": "Debug Remote",
            "hostName": "127.0.0.1",
            "port": LOCAL_DEBUG_PORT
        }]
    }
    

    Замените LOCAL_DEBUG_PORT на порт отладки в вашей локальной среде.

  3. Добавьте точку останова в исходный код вашего приложения, которая приостанавливает обработку HTTP-запроса, и начните запуск и отладку с помощью ранее добавленной конфигурации Debug Remote .

В поле для личных сообщений вашего чат-приложения введите текст, который хотите протестировать, и нажмите enter . Ваше чат-приложение не отвечает, поскольку оно активно отлаживается в среде Visual Studio Code IDE.