mirror of
https://github.com/zulip/zulip.git
synced 2025-11-02 21:13:36 +00:00
Adds a new webhook integration for Slack to receive messages from one's Slack team's public channels. Contains negative tests for broken, missing or invalid data. Allows two different option for integration: 1. Receive notification on a single stream with different topics for each of Slack's public channels. 2. Receive notification on different streams for each of Slack's public channels. Steps to choose between the two options is described in the documentation. Fixes #3569.
36 lines
1.6 KiB
Python
36 lines
1.6 KiB
Python
from __future__ import absolute_import
|
|
from django.utils.translation import ugettext as _
|
|
from django.http import HttpRequest, HttpResponse
|
|
from django.utils.translation import ugettext as _
|
|
from zerver.lib.actions import check_send_message, create_stream_if_needed
|
|
from zerver.lib.response import json_success, json_error
|
|
from zerver.lib.validator import check_string, check_int
|
|
from zerver.decorator import REQ, has_request_variables, api_key_only_webhook_view
|
|
from zerver.models import UserProfile, Client
|
|
|
|
ZULIP_MESSAGE_TEMPLATE = "**{message_sender}**: `{text}`"
|
|
VALID_OPTIONS = {'SHOULD_NOT_BE_MAPPED': '0', 'SHOULD_BE_MAPPED': '1'}
|
|
|
|
@api_key_only_webhook_view('Slack')
|
|
@has_request_variables
|
|
def api_slack_webhook(request, user_profile, client,
|
|
user_name=REQ(),
|
|
text=REQ(),
|
|
channel_name=REQ(),
|
|
stream=REQ(default='slack'),
|
|
channels_map_to_topics=REQ(default='1')):
|
|
# type: (HttpRequest, UserProfile, Client, str, str, str, str, str) -> HttpResponse
|
|
|
|
if channels_map_to_topics not in list(VALID_OPTIONS.values()):
|
|
return json_error(_('Error: channels_map_to_topics parameter other than 0 or 1'))
|
|
|
|
if channels_map_to_topics == VALID_OPTIONS['SHOULD_BE_MAPPED']:
|
|
subject = "channel: {}".format(channel_name)
|
|
else:
|
|
stream = channel_name
|
|
subject = _("Message from Slack")
|
|
|
|
content = ZULIP_MESSAGE_TEMPLATE.format(message_sender=user_name, text=text)
|
|
check_send_message(user_profile, client, "stream", [stream], subject, content)
|
|
return json_success()
|