diff --git a/pretix_matrix_inviter/forms.py b/pretix_matrix_inviter/forms.py
index 679eb613592840ddeee37c4c3dfbd3fe3f9495b0..2268b80eacdfcc117ecb4e062c2e0ec1c8b59f65 100644
--- a/pretix_matrix_inviter/forms.py
+++ b/pretix_matrix_inviter/forms.py
@@ -23,7 +23,7 @@ class MatrixInviterForm(SettingsForm):
     )
     matrix_inviter_matrix_room = forms.RegexField(
         label=_("Matrix room"),
-        regex="![^:]+:.+",
+        regex="(!|#)[^:]+:.+",
         strip=True,
     )
     matrix_inviter_hint = I18nFormField(
diff --git a/pretix_matrix_inviter/helpers.py b/pretix_matrix_inviter/helpers.py
new file mode 100644
index 0000000000000000000000000000000000000000..4a7613c36bc9762256cabe25e591db1a2f1b8662
--- /dev/null
+++ b/pretix_matrix_inviter/helpers.py
@@ -0,0 +1,20 @@
+import requests
+from urllib.parse import quote as url_quote
+
+
+def matrix_room_id(server, room_id_or_alias):
+    if room_id_or_alias.startswith("!"):
+        return room_id_or_alias
+    else:
+        return matrix_room_id_from_alias(server, room_id_or_alias)
+
+
+def matrix_room_id_from_alias(server, alias):
+    r = requests.get(
+        "https://{}/_matrix/client/v3/directory/room/{}".format(
+            url_quote(server),
+            url_quote(alias),
+        ),
+    )
+
+    return r.json().get("room_id")
diff --git a/pretix_matrix_inviter/tasks.py b/pretix_matrix_inviter/tasks.py
index e1af05dd2f85b370835560a89672cdcb64356595..92681caf3e600a17906cacf16b024307278cf0a9 100644
--- a/pretix_matrix_inviter/tasks.py
+++ b/pretix_matrix_inviter/tasks.py
@@ -6,6 +6,8 @@ from pretix.base.services.tasks import TransactionAwareTask
 from pretix.celery_app import app
 from urllib.parse import quote as url_quote
 
+from .helpers import matrix_room_id
+
 logger = logging.getLogger(__name__)
 
 
@@ -30,7 +32,9 @@ def matrix_inviter_invite(
 
     event = Event.objects.get(pk=event)
     order = Order.objects.get(pk=order)
-    room_matrix_id = event.settings.matrix_inviter_matrix_room
+    server = event.settings.matrix_inviter_matrix_server
+    token = event.settings.matrix_inviter_authorization_token
+    room_id = matrix_room_id(server, event.settings.matrix_inviter_matrix_room)
     payload = {"user_id": user_matrix_id}
     if invitation_reason:
         payload["reason"] = invitation_reason
@@ -38,13 +42,11 @@ def matrix_inviter_invite(
     try:
         r = requests.post(
             "https://{}/_matrix/client/v3/rooms/{}/invite".format(
-                url_quote(event.settings.matrix_inviter_matrix_server),
-                url_quote(room_matrix_id),
+                url_quote(server),
+                url_quote(room_id),
             ),
             headers={
-                "Authorization": "Bearer {}".format(
-                    event.settings.matrix_inviter_authorization_token
-                ),
+                "Authorization": "Bearer {}".format(token),
             },
             json=payload,
         )
@@ -55,7 +57,7 @@ def matrix_inviter_invite(
                 "pretix_matrix_inviter.error",
                 data={
                     "matrix_id": user_matrix_id,
-                    "matrix_room": room_matrix_id,
+                    "matrix_room": room_id,
                     "error": "HTTP Code {} ({})".format(
                         r.status_code, r.json()["error"]
                     ),
@@ -73,7 +75,7 @@ def matrix_inviter_invite(
                     "pretix_matrix_inviter.error",
                     data={
                         "matrix_id": user_matrix_id,
-                        "matrix_room": room_matrix_id,
+                        "matrix_room": room_id,
                         "error": "HTTP Code {}".format(r.status_code),
                     },
                 )
@@ -83,6 +85,6 @@ def matrix_inviter_invite(
             "pretix_matrix_inviter.invite_sent",
             data={
                 "matrix_id": user_matrix_id,
-                "matrix_room": room_matrix_id,
+                "matrix_room": room_id,
             },
         )