"TypeError: Cannot read property '0' of undefined" Telegram connected to watson Assistant

I tried to connect watson assistant to telegram an i can't fix this error

msg.payload.output.text does not exist. Feed the telegram node into a debug node to see what is there.

I tried to connect debug node to watson assistant node and get the correct respond , But i want to send this respond to telegram , Can you please give me the correct code to send the respond from watson assistant node to telegram sender node through function node
what is the correct code to write it into function node

Show us the data you are getting and tell us the format you want out.

i want to send only text and photos to telegram bot
Sorry about my little coding experience :sweat_smile:

What exactly do you want out of the function node, or is the problem that you don't know?

i want the code in the function that connected to telegram sender node
( Prepare for telegram ) function node

Yes, you keep saying that, but to write the code in the function node it is necessary to know exactly what form you want the data. You have shown us the input data, so for that input data what data structure do you want out of the function?

I don't Understand you
it's a simple chatbot the get message from telegram user in send it to watson assistant and get respond to send it back
sorry again for my little coding experience

i followed this Tutorial

Im pretty sure from limited information the screenshots provide that your path to the text that you use in the function is wrong.
Click on the left icon when you hover over the path property in the debug tab to copy the path to the text property:

Im pretty sure its not going to be msg.payload.output.text[0].


But as I just saw from the screenshots I think this will not help you much either as it looks like not every object in the generic array has a text property and the text property isn’t at the same index in the array either everytime.
I think you will have a lot of reading to do.
What you will have to do is something like this:

  • iterate over the msg.output.generic array with something like forEach()
  • than in the forEach() check if the response_type property of the index is text
  • if it is text use your function code from above adapted to work for the index within the forEach() loop and send a msg using the async node.send() provided by the function node instead of return msg;

Thats just a very rough sketch of what I think your function node will have to do to make it work in the end.

Edit 2
The code from your linked tutorial is not working as you are receiving the message in a different format from the Watson node as it probably was when the tutorial was written. The Tutorial is 2 years old so things have probably just changed since than. The error your seeing is because of that. So you will need to adapt it as described above.

Can you please write this code for me
i have little coding experience and i can't write it myself

Not really as I use neither Watson nor Telegram from Nodered. I can give you the tools you need to learn how to do it yourself. Why don’t start by reading the things I linked above and than you give it go and come back when you’re stuck and we‘ll go through it bit by bit if necessary.

ok give me this tools and i'll try to do it myself

It’s what I wrote above in Edit 1:

  • So use the way i show in the screenshot to copy the path to the generic array in your msg.payload.
  • Read on how to use forEach() in the link above and apply that to the generic array which path you have found.
  • In the function that forEach() executes on each array index check if the index is text with a simple if condition.
  • If the yes build your new message object same as you did in the function you posted above from the tutorial but use the async node.send() as described above in the link i posted to the nodered docs

This of course expects that your interested in learning some javascript as you will not get around using it in this situation :upside_down_face: and some basic coding is always a good skill to have. If you don’t have time for that just say so and ill sketch out a rough code solution :smiley: