Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

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!