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

undefined

ola, quando executo o comando node aplicacao-conversation.js e retorna apenas "unidefined" , me chamou atenção duas coisas, quando dei o install, nao foi criado o arquivo package-lock.json e tambem no package.json nao foi inserido o trecho de dependencia

"dependencies": {
    "prompt-sync": "^4.1.5",
    "watson-developer-cloud": "^2.42.0"

vou colar abaixo meus códigos analise e ver se pode me ajudar.

aplicacao-conversation.js

// watson, eu quero usar a sua api
// requerimento para essa api
var conversationV1 = require('watson-developer-cloud/conversation/v1');

// vou te passar o que você precisa acessar
// nome de usuario, senha, workspace, data de versao

var conversation = newconversationV1({
    username:'xxxxx',
    password:'xxxxxx',
    path:{workspace_id:'xxxxx'},
    version_date:'2018-02-16'
});


// vou mandar uma mensagem

conversation.message({ }, resposta);


// o que é essa resposta, e quero ver essa resposta


function resposta (erro, response){
    console.log(response)
};

e agora o package

{
  "name": "aplicacao-conversation",
  "version": "1.0.0",
  "description": "teste de api do conversation",
  "main": "aplicacao-conversation.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "Douglas Lundy",
  "license": "ISC"
}
11 respostas

Oi Giulia :),

o undefined acontece pois o seu código está executando mas não está conseguindo se conectar a algo, então isso fica "indefinido", você precisa da referência do watson-developer-cloud para poder usar essas funções.

Para resolver o problema rapidamente, você pode adicionar

"dependencies": {
    "watson-developer-cloud": "^2.42.0"
}

ao seu arquivo, sem problemas, não precisa se prender ao comando do terminal.

Isso você pode fazer editando o arquivo mesmo, então copiando e colando essa linha e salvando ou usando o comando

npm install watson-developer-cloud --save

Sobre o terminal e o comando, para as dependências não terem sido adicionadas, acho uma boa checar se está na pasta certinha do projeto ao dar os comandos e também se não tinha nenhum outro package.json por ali ou alguma node_modules, pois isso pode atrapalhar esse processo e não adicionar nas dependências mesmo.

Espero ter ajudado, qualquer outra dúvida, só postar aqui o/.

Estou tendo o mesmo problema, mas no meu caso todos os arquivos necessários aparentam ter sido criados com sucesso....package.json: { "name": "chatbot", "version": "1.0.0", "description": "codigo para se comunicar com servico conversation", "main": "watson.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "raphael", "license": "ISC", "dependencies": { "watson-developer-cloud": "^3.0.7" } }

Também chequei e na pasta node-modulesexiste a pasta do watson-developer-cloud

Puxa Raphael,

se o que eu falei não resolver, algum de vocês poderia me disponibilizar o projeto para eu dar uma olhada?

Acho válido simular o problema aqui para que eu possa ver direito o que está acontecendo.

Caso achem uma boa, só me passar e me dizer qual o comando que estão dando.

E Raphael, se receber undefined e todas as suas configurações estiverem certas, aí pode ser outro problema tanto do Conversation como algum erro no arquivo js, um ponto e vírgula, uma chave ou colchetes.

Posso disponibilizar o projeto, como faço para mandar? Chequei varias vezes meus passos, e estava executando exatamente os mesmos comandos mostrados na aula. npm init, npm install watson-developer-cloud -s e node [nome arquivo].js

Oi Raphael,

você pode colocar o projeto no Github e me mandar o link, ou compartilhar um link para que eu baixe um arquivo .zip do Drive, por exemplo, veja como fica mais fácil para você.

Botei no github: https://github.com/raphaelTrench/AluraChatbot

solução!

Oi Raphael e Giulia,

duas coisas, a primeira é sobre como faço para saber o que pode estar causando problema e a segunda é como resolver o undefined.

Sobre o problema: mudo o código para ver se tem alguma mensagem de erro e exibo ela na tela, faço isso adicionando

console.log(erro);

dentro da função de resposta da mensagem, que fica assim

function resposta(erro, response) {
    console.log(response);
    console.log(erro);
};

Então, dentro da pasta do projeto, executo o comando no terminal node (nome do arquivo do código).js para ver a mensagem de erro, no caso do seu código Raphael,

node watson.js

e quando fiz isso, vi este erro:

Error: Missing required parameters: workspace_id

Ou seja, o workspace_id não está sendo encontrado, e por isso volta indefinido.

Alguns alunos já tinham colocado aqui no Fórum, e parece que a API do Conversation mudou um pouco e não aceita mais que passemos o workspace_id junto com os outros parâmetros.

Para ter certeza, fui na documentação, e veja o exemplo que eles dão

conversation.message({
  workspace_id: '9978a49e-ea89-4493-b33d-82298d3db20d',
  input: {'text': 'Hello'}
},  function(err, response) {
  if (err)
    console.log('error:', err);
  else
    console.log(JSON.stringify(response, null, 2));
});

Logo, o workspace_id agora precisa ser passado dentro de .message.

Como corrigir o undefined: sabendo disso, alterei o código e passei o workspace_id dentro de .message e pronto, agora estamos comunicando com o serviço.

A função fica assim:

//vou mandar uma mensagem
conversation.message(
    {
        workspace_id: '<substitua pelo seu workspace_id>', 
        input:{}
    }, 
    resposta
);

//o que é essa resposta
function resposta(erro, response) {
    console.log(response);
};

Basta alterar isso no código, que agora voltará o objeto completo do Conversation. :)

Se quiser mais alguma explicação, se ainda der erro para vocês, só falar aqui no Fórum.

Olha que interessante, no meu caso depois de fazer estas modificações, ele continuou retornando o erro undefined referente ao workspace_id, no entanto logo em seguida ele retorna a mensagem do watson como deveria ser. dai quando eu tento pegar o response.output.text[0], ele retorna um erro informando que a propriedade output não existe. abaixo segue meu codigo.

// watson, eu quero usar a sua api
// requerimento para essa api
var ConversationV1 = require('watson-developer-cloud/conversation/v1');

// vou te passar o que você precisa acessar
// nome de usuario, senha, workspace, data de versao

var conversation = new ConversationV1({
    username:'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,
    password:'xxxxxxxxxxxxxxxxxxxx',
    version_date:'2018-02-16'
});


// vou mandar uma mensagem

conversation.message({ }, resposta);




//vou mandar uma mensagem
conversation.message(
    {
        workspace_id: 'xxxxxxxxxxxxxxxx', 
        input:{}
    }, 
    resposta
);


// o que é essa resposta, e quero ver essa resposta
function resposta (erro, response){

    if(erro){
        console.log(erro);
    }
    console.log(response);
};

Oi Giulia,

você poderia comentar a linha abaixo

conversation.message({ }, resposta);

e então rodar o programa mais uma vez? :)

Outra coisa, você ainda está com o mesmo erro acusando a node_modules?

Fiz o que você sugeriu e deu tudo certo dessa vez. Muito obrigado!

Aeee, que bacana! Qualquer coisa, estarei por aqui, só postar!

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