Если вызов Watson завершается неудачей, не дойдя до службы, проверьте, не является ли неудавшийся запрос запросом токена IAM. Вызов с аутентификацией IAM может сначала обратиться к IAM, а затем к службе.

В приложении, которое уже использует соответствующий Watson SDK и зависимость tunnel, задайте одинаковые сетевые параметры обоим объектам:

const tunnel = require('tunnel');
const AssistantV2 = require('ibm-watson/assistant/v2');
const { IamAuthenticator } = require('ibm-watson/auth');

const httpsAgent = tunnel.httpsOverHttp({
  proxy: { host: 'proxy.example', port: 8080 },
});

const network = { httpsAgent, proxy: false };
const authenticator = new IamAuthenticator({
  apikey: apiKey,
  ...network,
});
const assistant = new AssistantV2({
  version: serviceVersion,
  serviceUrl,
  authenticator,
  ...network,
});

Сохраните существующие в приложении apiKey, serviceVersion и serviceUrl. Конечные точки API и IAM остаются их предполагаемыми адресатами; прослушиватель прокси относится к агенту. списка HTTP-прокси может дать подходящие адреса, когда обе публичные конечные точки службы доступны через выбранный вами прокси.

tunnel.httpsOverHttp создаёт путь HTTPS через HTTP-прокси. proxy: false не позволяет SDK применить поверх этого пользовательского агента ещё одну встроенную конфигурацию прокси.

Если раньше вы передавали эти настройки только объекту assistant, аутентификатор — это пропущенное место, которое нужно проверить. Базовая аутентификация и уже выданный bearer-токен имеют разные жизненные циклы получения токена, поэтому этот дополнительный путь IAM относится к используемому здесь сетевому аутентификатору.

Похожие статьи