diff --git a/hypha/apply/activity/messaging.py b/hypha/apply/activity/messaging.py
index 5d3813510883e6a7f78aadfd2a7513798977a03f..4a08bb273fc2cd8669aea98e3299726baec85c0c 100644
--- a/hypha/apply/activity/messaging.py
+++ b/hypha/apply/activity/messaging.py
@@ -467,7 +467,7 @@ class SlackAdapter(AdapterBase):
 
     def __init__(self):
         super().__init__()
-        self.destination = settings.SLACK_DESTINATION_URL
+        self.destination = settings.SLACK_ENDPOINT_URL
         self.target_room = settings.SLACK_DESTINATION_ROOM
         self.comments_room = settings.SLACK_DESTINATION_ROOM_COMMENTS
         self.comments_type = settings.SLACK_TYPE_COMMENTS
diff --git a/hypha/apply/activity/tests/test_messaging.py b/hypha/apply/activity/tests/test_messaging.py
index 9f1106077796c0bba60060b348aff60b0b9e9e90..99cc3281f5864754f5a0307524a2433160f62457 100644
--- a/hypha/apply/activity/tests/test_messaging.py
+++ b/hypha/apply/activity/tests/test_messaging.py
@@ -337,7 +337,6 @@ class TestSlackAdapter(AdapterMixin, TestCase):
     token = 'fake-token'
 
     @override_settings(
-        SLACK_DESTINATION_URL=target_url,
         SLACK_ENDPOINT_URL=target_url,
         SLACK_DESTINATION_ROOM=None,
         SLACK_BACKEND=backend,
@@ -351,7 +350,6 @@ class TestSlackAdapter(AdapterMixin, TestCase):
         self.assertEqual(messages, error_message)
 
     @override_settings(
-        SLACK_DESTINATION_URL=None,
         SLACK_ENDPOINT_URL=None,
         SLACK_DESTINATION_ROOM=target_room,
         SLACK_BACKEND=backend,
@@ -365,7 +363,6 @@ class TestSlackAdapter(AdapterMixin, TestCase):
         self.assertEqual(messages, error_message)
 
     @override_settings(
-        SLACK_DESTINATION_URL=target_url,
         SLACK_ENDPOINT_URL=target_url,
         SLACK_DESTINATION_ROOM=target_room,
         SLACK_BACKEND=backend,
@@ -379,7 +376,6 @@ class TestSlackAdapter(AdapterMixin, TestCase):
         self.assertEqual(messages, error_message)
 
     @override_settings(
-        SLACK_DESTINATION_URL=target_url,
         SLACK_ENDPOINT_URL=target_url,
         SLACK_DESTINATION_ROOM=target_room,
         SLACK_BACKEND=backend,
@@ -398,7 +394,6 @@ class TestSlackAdapter(AdapterMixin, TestCase):
         self.assertEqual(message_payload['text'], message)
 
     @override_settings(
-        SLACK_DESTINATION_URL=target_url,
         SLACK_ENDPOINT_URL=target_url,
         SLACK_DESTINATION_ROOM=target_room,
         SLACK_BACKEND=backend,
@@ -419,7 +414,6 @@ class TestSlackAdapter(AdapterMixin, TestCase):
         self.assertEqual(message_payload['channel'], '#dummy')
 
     @override_settings(
-        SLACK_DESTINATION_URL=target_url,
         SLACK_ENDPOINT_URL=target_url,
         SLACK_DESTINATION_ROOM=target_room,
         SLACK_BACKEND=backend,
@@ -452,7 +446,6 @@ class TestSlackAdapter(AdapterMixin, TestCase):
         self.assertTrue(submission.lead.slack in recipients[0])
 
     @override_settings(
-        SLACK_DESTINATION_URL=target_url,
         SLACK_ENDPOINT_URL=target_url,
         SLACK_DESTINATION_ROOM=target_room,
         SLACK_BACKEND=backend,
@@ -467,7 +460,6 @@ class TestSlackAdapter(AdapterMixin, TestCase):
         self.assertEqual(sent_message.status, '200: OK')
 
     @override_settings(
-        SLACK_DESTINATION_URL=target_url,
         SLACK_ENDPOINT_URL=target_url,
         SLACK_DESTINATION_ROOM=target_room,
         SLACK_BACKEND=backend,
@@ -662,7 +654,7 @@ class TestAdaptersForProject(AdapterMixin, TestCase):
         self.assertEqual(project.submission, activity.related_object)
 
     @override_settings(
-        SLACK_DESTINATION_URL=target_url,
+        SLACK_ENDPOINT_URL=target_url,
         SLACK_DESTINATION_ROOM=target_room,
         SLACK_BACKEND=backend,
         SLACK_TOKEN=token,
@@ -681,11 +673,12 @@ class TestAdaptersForProject(AdapterMixin, TestCase):
         )
         messages = backend.retrieve_messages()
         self.assertEqual(len(messages), 1)
-        self.assertIn(str(user), messages[0]['text'])
-        self.assertIn(str(project), messages[0]['text'])
+        message_payload = json.loads(messages[0]['payload'])
+        self.assertIn(str(user), message_payload['text'])
+        self.assertIn(str(project), message_payload['text'])
 
     @override_settings(
-        SLACK_DESTINATION_URL=target_url,
+        SLACK_ENDPOINT_URL=target_url,
         SLACK_DESTINATION_ROOM=target_room,
         SLACK_BACKEND=backend,
         SLACK_TOKEN=token,
@@ -704,11 +697,12 @@ class TestAdaptersForProject(AdapterMixin, TestCase):
         )
         messages = backend.retrieve_messages()
         self.assertEqual(len(messages), 1)
-        self.assertIn(str(user), messages[0]['text'])
-        self.assertIn(str(project), messages[0]['text'])
+        message_payload = json.loads(messages[0]['payload'])
+        self.assertIn(str(user), message_payload['text'])
+        self.assertIn(str(project), message_payload['text'])
 
     @override_settings(
-        SLACK_DESTINATION_URL=target_url,
+        SLACK_ENDPOINT_URL=target_url,
         SLACK_DESTINATION_ROOM=target_room,
         SLACK_BACKEND=backend,
         SLACK_TOKEN=token,
@@ -730,11 +724,12 @@ class TestAdaptersForProject(AdapterMixin, TestCase):
         messages = backend.retrieve_messages()
 
         self.assertEqual(len(messages), 1)
-        self.assertIn(str(applicant), messages[0]['text'])
-        self.assertIn(str(project), messages[0]['text'])
+        message_payload = json.loads(messages[0]['payload'])
+        self.assertIn(str(applicant), message_payload['text'])
+        self.assertIn(str(project), message_payload['text'])
 
     @override_settings(
-        SLACK_DESTINATION_URL=target_url,
+        SLACK_ENDPOINT_URL=target_url,
         SLACK_DESTINATION_ROOM=target_room,
         SLACK_BACKEND=backend,
         SLACK_TOKEN=token,
diff --git a/hypha/apply/utils/notifications.py b/hypha/apply/utils/notifications.py
index 13e403e4b1800de4ea94de5e90580cdcdbaf2e30..8b6930af1cf1e7004055709910b3726915c729aa 100644
--- a/hypha/apply/utils/notifications.py
+++ b/hypha/apply/utils/notifications.py
@@ -1,11 +1,15 @@
-import requests
+import logging
+
 from django.conf import settings
+from django_slack import slack_message
+
+logger = logging.getLogger(__name__)
 
 
 class SlackNotifications():
 
     def __init__(self):
-        self.destination = settings.SLACK_DESTINATION_URL
+        self.destination = settings.SLACK_ENDPOINT_URL
         self.target_room = settings.SLACK_DESTINATION_ROOM
 
     def __call__(self, *args, recipients=None, related=None, **kwargs):
@@ -29,12 +33,14 @@ class SlackNotifications():
         return f'<{link}|{title}>'
 
     def send_message(self, message, request, recipients=None, related=None, **kwargs):
-        if not self.destination or not self.target_room:
+        if not self.destination or not self.target_room or not settings.SLACK_TOKEN:
             errors = list()
             if not self.destination:
                 errors.append('Destination URL')
             if not self.target_room:
                 errors.append('Room ID')
+            if not settings.SLACK_TOKEN:
+                errors.append('Slack Token')
             return 'Missing configuration: {}'.format(', '.join(errors))
 
         slack_users = self.slack_users(recipients) if recipients else ''
@@ -44,12 +50,14 @@ class SlackNotifications():
         message = ' '.join([slack_users, message, slack_link]).strip()
 
         data = {
-            "room": self.target_room,
             "message": message,
         }
-        response = requests.post(self.destination, json=data)
-
-        return str(response.status_code) + ': ' + response.content.decode()
+        try:
+            slack_message('messages/slack_message.html', data, channel=self.target_room)
+            return '200: OK'
+        except Exception as e:
+            logger.exception(e)
+            return '400: Bad Request'
 
 
 slack_notify = SlackNotifications()
diff --git a/hypha/settings/base.py b/hypha/settings/base.py
index 7bfb68a5c14b99eacc6121c10da0b24d39e705fd..ba35678a1a8997b1d9e60328d09b65fef8140fa3 100644
--- a/hypha/settings/base.py
+++ b/hypha/settings/base.py
@@ -520,17 +520,16 @@ if not SEND_MESSAGES:
 
 SEND_READY_FOR_REVIEW = env.bool('SEND_READY_FOR_REVIEW', True)
 
-SLACK_DESTINATION_URL = env.str('SLACK_DESTINATION_URL', None)
-SLACK_DESTINATION_ROOM = env.str('SLACK_DESTINATION_ROOM', None)
-SLACK_DESTINATION_ROOM_COMMENTS = env.str('SLACK_DESTINATION_ROOM_COMMENTS', None)
-SLACK_TYPE_COMMENTS = env.list('SLACK_TYPE_COMMENTS', [])
-
 # Django Slack settings
 SLACK_TOKEN = env.str('SLACK_TOKEN', None)
 SLACK_USERNAME = env.str('SLACK_USERNAME', 'bot')
 SLACK_BACKEND = 'django_slack.backends.CeleryBackend'  # UrllibBackend can be used for sync
-if SLACK_DESTINATION_URL:
-    SLACK_ENDPOINT_URL = SLACK_DESTINATION_URL
+SLACK_ENDPOINT_URL = env.str('SLACK_ENDPOINT_URL', None)
+
+# Slack settings
+SLACK_DESTINATION_ROOM = env.str('SLACK_DESTINATION_ROOM', None)
+SLACK_DESTINATION_ROOM_COMMENTS = env.str('SLACK_DESTINATION_ROOM_COMMENTS', None)
+SLACK_TYPE_COMMENTS = env.list('SLACK_TYPE_COMMENTS', [])
 
 # Automatic transition settings
 TRANSITION_AFTER_REVIEWS = env.bool('TRANSITION_AFTER_REVIEWS', False)