Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Erro ao rodar o script com node

Oi,

Fiz os passos seguindo o vídeo, mas na hora de rodar o script com o comando node, retorna erro.

No arquivo JS da aplicação, notei que ele dá retornos diferentes quando uso o 'conversation' e quando uso o 'assistant'.

Quando uso o 'assistant', ele retorna isso:

[iMac-Midia-0575:app-conversa thiago.lemos$ node app-conversa.js 
/Applications/XAMPP/xamppfiles/htdocs/app-conversa/node_modules/watson-developer-cloud/assistant/v1.js:55
            throw new Error('Argument error: version was not specified');
            ^

Error: Argument error: version was not specified
    at new AssistantV1 (/Applications/XAMPP/xamppfiles/htdocs/app-conversa/node_modules/watson-developer-cloud/assistant/v1.js:55:19)
    at Object.<anonymous> (/Applications/XAMPP/xamppfiles/htdocs/app-conversa/app-conversa.js:6:20)
    at Module._compile (module.js:652:30)
    at Object.Module._extensions..js (module.js:663:10)
    at Module.load (module.js:565:32)
    at tryModuleLoad (module.js:505:12)
    at Function.Module._load (module.js:497:3)
    at Function.Module.runMain (module.js:693:10)
    at startup (bootstrap_node.js:188:16)
    at bootstrap_node.js:609:3

E quando uso o conversation ele retorna somente undefined

Eu tentei baixar a pasta node_modules de outro projeto pra ver se a minha instalação veio com algo faltando também, mas não consegui esse diretório.

Alguma ideia do que pode estar acontecendo?

Obrigado. Thiago

6 respostas
solução!

Oi Thiago,

sobre o que você relatou, eu vejo três questões, No entanto, como o seu projeto parece ser um pouco diferente do curso, não consigo te dar certeza, ok? Mas, vamos lá, e qualquer outra dúvida, pode postar aqui.

Primeira questão, os serviços da IBM estão em constante mudança, e o que era o Watson Conversation, agora virou Watson Assistant, logo, eu sugiro que você use o segundo, por ser o mais recente mesmo. Inclusive, fico muito feliz pela sua dúvida, pois vou ver o que podemos fazer sobre o curso que já está gravado quando o serviço tinha outro nome. :)

Segunda questão, sobre o erro ao usar o assistant, ele diz que a versão não foi especificada (version was not specified). Quando conectamos ao Watson Assistant, uma das coisas exigidas pela API é o seu número de versão e data também, então eu sugiro dar uma olhada nos parâmetros que você está passando ao se conectar com o serviço. Pode ser que esteja faltando o parâmetro de versão chamado version. Para isso, veja se seu código tem as linhas abaixo:

 version: 'v1',
  version_date: '2018-02-16'

Se precisar, este é o link da documentação, com o restante do código. Dê uma olhada em message.

Terceira questão, já tivemos algumas dúvidas sobre o serviço retornar undefined. Isso está acontecendo por causa das mudanças na API e agora precisamos passar o parâmetro workspace-id separado dos outros. e dentro do método message .

Então, uma coisa que pode resolver esse erro é modificar o código e passar o workspace-id como abaixo ao invés de passá-lo no objeto recebido pela variável assistant:

assistant.message({
  workspace_id: ' <inserir seu id aqui> ',
  input: {}
}

Feito isso, o serviço já consegue mapear e se comunicar com o workspace correto para retornar as mensagens, então você terá essas mensagens ao invés de undefined.

Espero ter esclarecido e ajudado a resolver, pode voltar aqui qualquer coisa :).

Oi Cássia, obrigado pela resposta.

Fazendo os ajustes como você falou, o erro da versão realmente não aparece mais e consegui o retorno na tela como mostrado no vídeo =)

Porém ele deu esse alerta antes:

WARNING: This method of instantiating the Watson services has been deprecated beginning with Version 3.0.0 of the Node SDK. Please refer to the Node SDK documentation for information on how to instantiate Watson services. This form of service instantiaion will be removed in a future release of the SDK.

Não entendi, porque estou seguindo a documentação atual que você me enviou da API. O código JS atual está assim:

//faz a requisicao da API
var watson = require('watson-developer-cloud');

//conecta na API
var assistant = new watson.conversation({
    username: 'username',
    password: 'password',
    path:{workspace_id:'workspace_id'},
    version: 'v1',
    version_date:'2018-02-16'
});

//mandar uma mensagem
//assistant.message({}, resposta);
assistant.message({
  workspace_id: 'workspace_id',
  input: {'text' : 'valor do site'}
}, resposta);

function resposta (err, response) {
    if(err)
        console.log('error: ' . err);    
    else
        console.log(response);
}

Apesar do warning, funcionou como no exemplo que você mostrou.

Obrigado mais uma vez!

Valeu. Thiago

Que ótimo Thiago! :) AE

Antes de tudo - como agora você está passando o workspace_id dentro de message, você pode apagar o path ali dentro do objeto assistant, ficando assim:

//conecta na API
var assistant = new watson.conversation({
    username: 'username',
    password: 'password',
    version: 'v1',
    version_date:'2018-02-16'
});

//mandar uma mensagem
//assistant.message({}, resposta);
assistant.message({
  workspace_id: 'workspace_id',
  input: {'text' : 'valor do site'}
}, resposta);

function resposta (err, response) {
    if(err)
        console.log('error: ' . err);    
    else
        console.log(response);
}

Vamos ao warning, repare que ele diz que "Essa forma de instanciação de serviço será removida em uma versão futura do SDK" (This form of service instantiation will be removed in a future release of the SDK), ou seja, porque o serviço mudou de nome de Watson Conversation para Watson Assistant esse nome também mudará na API. Então, o que era conversation vai virar assistant.

O warning deve ser porque o serviço ainda tá aceitando o watson.conversation mas logo logo, infelizmente, deve parar de funcionar e ele só irá aceitar watson.assistant.

Essas questões de compatibilidade são complicadas, e variam de API para API. Geralmente eles mantêm a compatibilidade aceitando os nomes antigos para não "quebrar" alguma aplicação, mas o warning já está avisando que isso não vai acontecer para o Conversation o que significa que iremos ter que atualizar o nosso código para que a aplicação continue funcionando.

Imagina, disponha! o/

Legal, entendi. Então por enquanto é só ignorar esse warning até que seja removido?

Dei sequência no curso, e na próxima aula me deparei com outro problema. Queria saber se continuo nesse tópico ou se abro um novo.

É referente à este erro quando respondo a primeira pergunta do bot:

[iMac-Midia-0575:app-conversa thiago.lemos$ node app-conversa.js 
WARNING: This method of instantiating the Watson services has been deprecated beginning with Version 3.0.0 of the Node SDK.  Please refer to the Node SDK documentation for information on how to instantiate Watson services.  This form of service instantiaion will be removed in a future release of the SDK.
Olá. Como posso te ajudar?
>> voces fazem site?
undefined
/Applications/XAMPP/xamppfiles/htdocs/app-conversa/app-conversa.js:43
    if(response.output.text != 0){
                ^

TypeError: Cannot read property 'output' of undefined

Se precisar abrir um novo tópico, eu crio aqui, sem problemas.

Valeu! Thiago

Acho que seria melhor sim, para não misturar e se alguém tiver o erro, achar mais fácil a solução :).

Já adiantando, é algum problema no tratamento da resposta, sugiro compartilhar o js inteiro, só excluir os numeros das suas credenciais para ninguem conectar hehe.

Valeu, Thiago.

Legal, valeu.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software