- Mitglied seit
- 16. Jan 2014
- Beiträge
- 241
- Punkte für Reaktionen
- 1
- Punkte
- 24
Da es hier noch nicht viele Threads zum Thema Synology Chat und Chat Integration gibt, dachte ich mir, ich teile hier mal meine ersten Schritte in Richtung eines “ChatBots”.
Nachdem ich dieses Support-Dokument gefunden habe, war ich sofort Feuer und Flamme irgendetwas mit dieser Schnittstelle zu machen. Der Gedanke an einen eigenen, self-hosted Bot à la Google Assistent, mit dem ich mich in einer Chat-Umgebung austauschen kann, hat mich einfach begeistert.
Um mich mit php vertraut zu machen habe ich ein Skript für Incoming Webhooks zusammengeklöppelt, womit ein php-fähiges Gerät also in Eigeninitiative Nachrichten in Chat postet und was von der Shell oder in Skripten ausgeführt werden kann. Dank geht dabei an heavygale und diesen Beitrag, von dem ich die Funktion send_chat() geklaut habe Ohne die hätte ich gar nicht gewusst, wie ich anzufangen habe.
Hier ist der Code:
Nachdem ich dieses Support-Dokument gefunden habe, war ich sofort Feuer und Flamme irgendetwas mit dieser Schnittstelle zu machen. Der Gedanke an einen eigenen, self-hosted Bot à la Google Assistent, mit dem ich mich in einer Chat-Umgebung austauschen kann, hat mich einfach begeistert.
Um mich mit php vertraut zu machen habe ich ein Skript für Incoming Webhooks zusammengeklöppelt, womit ein php-fähiges Gerät also in Eigeninitiative Nachrichten in Chat postet und was von der Shell oder in Skripten ausgeführt werden kann. Dank geht dabei an heavygale und diesen Beitrag, von dem ich die Funktion send_chat() geklaut habe Ohne die hätte ich gar nicht gewusst, wie ich anzufangen habe.
Hier ist der Code:
Rich (BBCode):
/*
Basic message-script for Synology Chat. Written for PHP 5.4 and above.
Usage:
php chatbot.php [Bot] [Message Type] [Content]
Examples:
/bin/php chatbot.php TestBot Message1
/bin/php chatbot.php SynoBot Text "Testnachricht"
/bin/php chatbot.php TestBot URL "http://example.org"
"Message Type" can be either one of the pre-definded messages below or one of the following: "Text", "URL" or "File".
For those three the [Content] Parameter as string is needed, in form of plain text for "Text" or an URL for "URL" and "File"
Pre-defined Messages:
[Message1]
[Message2]
[Bootup]
[Shutdown]
[KlingelEvent]
*/
// Device name for message integration
$source = "Syno1"; //Syno2, RaspPi, etc.
// Webhook URLs for different Bots
$Bots = [
TestBot => "https://example.org/webapi/entry.cgi?api=SYNO.Chat.External&method=incoming&version=1&token=XXXXXXXXX",
SynoBot => "https://example.org/webapi/entry.cgi?api=SYNO.Chat.External&method=incoming&version=1&token=XXXXXXXXX",
KlingelBot => "https://example.org/webapi/entry.cgi?api=SYNO.Chat.External&method=incoming&version=1&token=XXXXXXXXX",
];
// Chat users to address, so they get Push Notifications. @channel equals every member in a channel
$Users = [
"@channel",
"@User1",
"@User2",
];
function send_chat($webhook, $message) {
$opts = ['http' =>
[
'method' => 'POST',
'content' => $message,
],
'ssl' =>
[
'verify_peer' => true //Toggle SSL-verification
],
];
$context = stream_context_create($opts);
return file_get_contents($webhook, false, $context);
}
function set_payload($Text) {
$a = 'payload={"text": "' . $Text . '"}';
return $a;
}
function set_payload_long($Type, $Text) {
switch ($Type) {
case "Text":
$b = set_payload($Text);
break;
case "URL":
$b = 'Link <"' . $Text . '">';
$b = set_payload($b);
break;
case "File":
$b = 'payload={"text": "File Link", "file_url": "' . $Text . '"}';
break;
default:
$b = error_message($Type, true);
echo 'Second Argument invalid: [Text], or [File] allowed. Usage: php chat...weisen habe, werde ich es hier posten.
Grüße