Коли виклик 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 стосується мережевого автентифікатора, який використовується тут.

Схожі статті