我有这个问题,我想为电报机器人创建一个键盘,这是我的代码,在这里我使用在线键盘创建了按键。它给了我这个错误,我无法将其连接到我的帖子上,该单词已发布到/新闻
subprocess.call()
TypeError:无法读取未定义的属性“聊天”
在/app/server.js:22:35
const util = require('util');
const express = require('express');
const app = express();
// includiamo la libreria "axios"
const axios = require('axios');
// Includiamo la libreria "body-parser" per gestire le richieste in JSON.
const bodyparser = require('body-parser');
app.use(bodyparser.json());
app.get ('/', function (req, res) {
res.status (200) .json ({status: 'ok'});
});
// Includiamo il modulo "request" per effettuare richieste HTTP
const https = require('https');
// Webhook per Telegram
app.post('/', function (req, res) {
console.log("Richiesta: " + JSON.stringify(req.body));
const chatid = req.body.message.chat.id;
const text = req.body.message.text;
const username = req.body.message.from.username
console.log("Utente in chat " + chatid + " ha scritto '" + text + "'");
const clientreq = https.request({
method: 'POST',
host: 'api.telegram.org',
url: 'https://api.telegram.org/bot'+process.env.BOTTOKEN+'/setWebhook?
url=https://viktecnews.glitch.me/',
path: '/bot' + process.env.BOTTOKEN + '/getMe'
},function(resp) {
// Questa funzione viene richiamata a richiesta eseguita
if(resp.statusCode != 200) {
console.log("Richiesta HTTP fallita");
return;
}
console.log("Richiesta HTTP riuscita");
var body = '';
resp.on('data', function(d) {
body += d;
});
resp.on('end', function() {
// Ora body contiene il contenuto (corpo) della risposta
console.log("Risposta da API Telegram: " + body);
const j = JSON.parse(body);
// j è un oggetto JavaScript che contiene i dati della risposta
// ...
});
});
if (text.match(/start/))
{ axios.post ('https://api.telegram.org/bot'+
process.env.BOTTOKEN+'/sendMessage'
,
{
chat_id: chatid,
text: 'Benvenuto'+'\t'+ username +'\t' + 'in ViktecNews,
scopri le ultime news sul mondo della tecnologia, guide e recensioni.
Per qualsiasi cosa vai su info',
reply_markup: JSON.stringify ({
inline_keyboard:[[
{
text: 'news',
callback_data: '/news'
},{
text: 'recensioni',
callback_data: '/recensioni'
},{
text: 'guide',
callback_data: '/guide'
},{
text: 'info',
callback_data: '/info'
}
]]
})
}).then(response => {
// Messaggio postato
console.log('Message posted')
console.log()
res.end('ok')
})
.catch(err => {
// ...Messaggio non postato
console.log('Error :', err)
res.end('Error :' + err)
})
}
else if (text.match(/info/)) {
axios.post('https://api.telegram.org/bot'+
process.env.BOTTOKEN+'/sendMessage'
,
{
chat_id: chatid,
text: 'ViktecNews è un bot programmato per riportarti le
ultime dieci news, guide e recensioni. Per qualsiasi problema contatta
@viktec'
})
.then(response => {
// Messaggio postato
console.log('Message posted')
res.end('ok')
})
.catch(err => {
// ...Messaggio non postato
console.log('Error :', err)
res.end('Error :' + err)
})
}
else if (text.match (/news/)) {
axios.get( URL ,{
params: {
categories: '8240'
}
})
.then(response => {
for(var i = 0; i < response.data.length; i++)
axios.post('https://api.telegram.org/bot'+
process.env.BOTTOKEN+'/sendMessage'
,
{
chat_id: chatid,
text: response.data[i].title.rendered +" \n\t"+
response.data[i].link + " \n\t"+"Autore : "+response.data[i].author
})
.then(response => {
// Messaggio postato
console.log('Message posted')
res.end('ok')
})
.catch(err => {
// ...Messaggio non postato
console.log('Error :', err)
res.end('Error :' + err)
})
console.log(response.data[0]);
})
.catch(error => {
console.log(error);
});
}else if (text.match (/recensioni/)) {
axios.get( URL ,{
params: {
categories: '8241'
}
})
.then(response => {
for(var i = 0; i < response.data.length; i++)
axios.post('https://api.telegram.org/bot'+
process.env.BOTTOKEN+'/sendMessage',
{
chat_id: chatid,
text: response.data[i].title.rendered +" \n\t"+
response.data[i].link + " \n\t"+"Autore : "+response.data[i].author
})
.then(response => {
// Messaggio postato
console.log('Message posted')
res.end('ok')
})
.catch(err => {
// ...Messaggio non postato
console.log('Error :', err)
res.end('Error :' + err)
})
console.log(response.data[0]);
})
.catch(error => {
console.log(error);
});
} else if (text.match (/guide/)) {
axios.get( URL ,{
params: {
categories: '8250'
}
})
.then(response => {
for(var i = 0; i < response.data.length; i++)
axios.post('https://api.telegram.org/bot'+
process.env.BOTTOKEN+'/sendMessage' ,
{
chat_id: chatid,
text: response.data[i].title.rendered +" \n\t"+
response.data[i].link + " \n\t"+"Autore : "+response.data[i].author
})
.then(response => {
// Messaggio postato
console.log('Message posted')
res.end('ok')
})
.catch(err => {
// ...Messaggio non postato
console.log('Error :', err)
res.end('Error :' + err)
})
console.log(response.data[0]);
})
.catch(error => {
console.log(error);
});
} else if (text.match (/games/)) {
axios.get( URL ,{
params: {
categories: '8245'
}
})
.then(response => {
for(var i = 0; i < response.data.length; i++)
axios.post('https://api.telegram.org/bot'+
process.env.BOTTOKEN+'/sendMessage',
{
chat_id: chatid,
text: response.data[i].title.rendered +" \n\t"+
response.data[i].link + " \n\t"+"Autore : "+response.data[i].author
})
.then(response => {
// Messaggio postato
console.log('Message posted')
res.end('ok')
})
.catch(err => {
// ...Messaggio non postato
console.log('Error :', err)
res.end('Error :' + err)
})
console.log(response.data[0]);
})
.catch(error => {
console.log(error);
});
}else
{axios.post('https://api.telegram.org/bot'+
process.env.BOTTOKEN+'/sendMessage
,
{
chat_id: chatid,
text: "Carattere errato, utilizza i comandi!"
})
.then(response => {
// Messaggio postato
console.log('Message posted')
res.end('ok')
})
.catch(err => {
// ...Messaggio non postato
console.log('Error :', err)
res.end('Error :' + err)
})};
clientreq.end(); // questa chiamata esegue la richiesta
});
const listener = app.listen(process.env.PORT, function() {
console.log('Your app is listening on port ' +
listener.address().port);
});`
答案 0 :(得分:0)
此错误告诉您message
未定义。请确保客户端提供message
作为POST正文的一部分。