Ich pack hier mal das Modul für den Bot einfach so rein. Ist prinzipiell recht easy und auch noch nicht zu 100% fertig.
PHP-Code:
exports.init = function (app) {
var telegram = require('../../lib/telegram-bot-api');
var TelegramBot = {
api: new telegram({
token: app.config.TelegramBot.API_Key,
updates: {
enabled: true
}
}),
users: { //Chat IDs welche die Nachricht bekommen sollen, wird mit /start im telegram automatisch hinzugefügt. Speichern der Liste fehlt noch
'xxxxxxxxx': {id: xxxxxxxxx, first_name: 'Test', username: 'Test'}
},
user_einsatz: {
aktiv: null,
kraefte: {}
},
broadcast: function (selfID, text) { //Nachricht an alle user rausschicken ausser den eigenen
for (var u in this.users) {
if (u != selfID) {
this.api.sendMessage({
chat_id: u,
text: text
}, function (err, data) {
console.log(data);
});
}
}
},
start: function (alarm) { //diese funktion wird aufgerufen sobald ein alarm ankommt
this.send(alarm);
},
send: function (alarm) {
//Einsatznummer setzen und userliste zurücksetzten
this.user_einsatz.aktiv = alarm.ENR;
this.user_einsatz.kraefte = {};
var schwere = '';
if (alarm.schwere) {
schwere = ' (' + alarm.schwere + ')';
}
for (var u in this.users) {
var ret = this.api.sendMessage({
chat_id: u,
reply_markup: JSON.stringify(
{
keyboard: [ //Hier können noch weitere Nachrichten ergänzt werden
[
'/Ja ich komme!'
],
[
'/Nein ich komme nicht!'
]
],
one_time_keyboard: true
}),
text: "\u26a0" + ' Alarm ' + "\n" + alarm.Stichwort + schwere //Text welchen der Bot zum User sendet
});
console.log(u, ret);
}
},
stop: function () { //Reset funktion welche nach einem gewissen Timeout vom Alarmsystem aufgerufen wird
TelegramBot.user_einsatz = {
aktiv: null,
kraefte: {}
};
}
};
TelegramBot.api.on('message', function (message) {
console.log('message', message);
if (message && message.text) {
var cmd = message.text.split(' ')[0].toLowerCase();
if (cmd[0] == '/') { //Auswertung der Komandos (/Ja /Nein)
if (TelegramBot.user_einsatz.aktiv) { //Ist überhaupt ein Einsatz?
if (cmd == '/ja') {
var msg = ["\uD83D\uDD35"];
if (message.chat.first_name) {
msg.push(message.chat.first_name);
}
if (message.chat.last_name) {
msg.push(message.chat.last_name);
}
msg.push('kommt!');
TelegramBot.broadcast(message.chat.api, msg.join(' '));
TelegramBot.user_einsatz.kraefte[message.chat.id] = message.chat;
} else if (cmd == '/nein') {
var msg = ["\uD83D\uDD34"];
if (message.chat.first_name) {
msg.push(message.chat.first_name);
}
if (message.chat.last_name) {
msg.push(message.chat.last_name);
}
msg.push('kommt NICHT!');
TelegramBot.broadcast(message.chat.api, msg.join(' '));
}
}
} else { //Bei sonnstigen nachrichten wird der User hinzugefügt, hier muss noch eine Verifizierg eingebaut werden!
if (!TelegramBot.users[message.chat.id]) {
TelegramBot.users[message.chat.id] = message.chat;
}
console.log(TelegramBot.users);
}
}
});
return TelegramBot;
};
https://www.npmjs.com/package/telegram-bot-api bzw. https://github.com/mast/telegram-bot-api wären die node module dazu.
Über die Telegram Bots: https://telegram.org/blog/bot-revolution
Wie schon geschrieben ist das nur ein Modul von diversen. Ich habe prinzipiell eine Software welche die Einsätze via Serialport auf einem Raspberry Pi vom Piepser ausliest und den Text Auswertet. An dem Raspi hängt dann ein 40" Monitor in der Wagenhalle welcher den Text entsprechend ausgibt und in der unteren Ecke Alarmierungszeit, Minuten seit Alarmierung und jetzt auch die Rückmeldungen der Kameraden mit angibt. Die Frage ist halt inwiefern bei einem Einsatz tatsächlich jemand darüber Rückmeldung gibt ob er kommt oder auch nicht...