This is an old revision of the document!
Settings
Help & About
from the list then scroll down to the 'Advanced' section.Access Token <click to reveal>
Settings
Advanced
to see the Internal Room ID
!BOrDFgeDdZZbUvfjjs:glasgow.social
It can be very simple to post a message to a channel on Matrix.
This script requires jq
, the command line JSON processor.
sudo apt install jq
#!/bin/bash # Usage: # echo "Hello world" | ./post_to_matrix.sh msgtype=m.text homeserver=glasgow.social room=!BOrDFgeDdZZbUvfjjs:glasgow.social access_token=put_your_user_access_token_here curl -XPOST -d "$( jq -Rsc --arg msgtype "$msgtype" '{$msgtype, body:.}')" "https://$homeserver/_matrix/client/r0/rooms/$room/send/m.room.message?access_token=$access_token"
<?php $msgtype = "m.text"; $homeserver = "glasgow.social"; $room = "!BOrDFgeDdZZbUvfjjs:glasgow.social"; $access_token="put_your_user_access_token_here" $url = "https://$homeserver/_matrix/client/r0/rooms/$room/send/m.room.message?access_token=$access_token"; $msg = "Hello world"; $payload = json_encode(array("msgtype"=>$msgtype, "body"=>$msg)); $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $payload); $response = curl_exec($ch); ?>
This is pretty straightforward. This is just how to see messages that are posted, but if you explore what is returned then you can see all sorts of things too (like joins, images, likes, invites etc). Very cool.
<?php $homeserver = "glasgow.social"; $access_token = "access_token_goes_here"; // this is so you can start and stop the program, and it'll continue where it left off $tracking_file "/tmp/listen_matrix.json"; while(true) { $since = file_get_contents($tracking_file); $messages = get_new_events($since); if(!empty($messages['rooms']['join'] and is_array($messages['rooms']['join']))) { foreach($messages['rooms']['join'] as $room_id=>$data) { foreach($data['timeline']['events'] as $event_id=>$event) { if($event['type'] == "m.room.message") { $sender = $event['sender']; $content = "not text"; if($event['content']['msgtype'] == "m.text") $content = $event['content']['body']; echo "$sender $room_id $content\n"; } } } } $new_tracking_data = $messages['next_batch']; file_put_contents($tracking_file, $new_tracking_data); } function get_new_events($since) { global $homeserver,$access_token; // timeout means the server will wait and only respond after 30 seconds, // however if a message is returned before that time, it will return immediately $url = "https://$homeserver/_matrix/client/r0/sync?access_token=$access_token&timeout=30000"; if(!empty($since)) $url .= "&since=$since"; $data = json_decode(file_get_contents($url), true); return $data; } ?>