mirror of
https://github.com/zulip/zulip.git
synced 2025-11-01 04:23:46 +00:00
Add integration for Yo App.
[includes some small tweaks by tabbott]
This commit is contained in:
committed by
Tim Abbott
parent
44ed9da7f0
commit
f3d03d89b4
@@ -9,7 +9,7 @@ All notable changes to this project will be documented in this file.
|
||||
- Added documentation on using Hubot to integrate with useful services
|
||||
not yet integrated with Zulip directly (e.g. Google Hangouts).
|
||||
- Added new management command to test sending email from Zulip.
|
||||
- Added Pingdom integration.
|
||||
- Added Pingdom and Yo integrations.
|
||||
- Refactored the Zulip puppet modules to be more modular.
|
||||
- Refactored the Tornado event system, fixing old memory leaks.
|
||||
- Implemented running queue processors multithreaded in development,
|
||||
|
||||
BIN
static/images/integrations/logos/yo-app.png
Normal file
BIN
static/images/integrations/logos/yo-app.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 60 KiB |
BIN
static/images/integrations/yo-app/001.png
Normal file
BIN
static/images/integrations/yo-app/001.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 53 KiB |
BIN
static/images/integrations/yo-app/002.png
Normal file
BIN
static/images/integrations/yo-app/002.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 7.4 KiB |
@@ -224,6 +224,12 @@
|
||||
<span class="integration-label">Twitter</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="integration-lozenge integration-yo-app">
|
||||
<a class="integration-link integration-yo-app" href="#yo-app">
|
||||
<img class="integration-logo" src="/static/images/integrations/logos/yo-app.png" alt="Yo App logo" />
|
||||
<span class="integration-label">Yo App</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="integration-lozenge integration-zendesk">
|
||||
<a class="integration-link integration-zendesk" href="#zendesk">
|
||||
<img class="integration-logo" src="/static/images/integrations/logos/zendesk.png" alt="Zendesk logo" />
|
||||
@@ -1838,6 +1844,38 @@ notifications:
|
||||
<img class="screenshot" src="/static/images/integrations/travis/001.png" />
|
||||
</div>
|
||||
|
||||
<div id="yo-app" class="integration-instructions">
|
||||
|
||||
<p>See your Yo App notifications in Zulip!</p>
|
||||
|
||||
<p>Set up a bot for the integration. You'll need the bot's API key
|
||||
to construct a URL for Yo App Callback.</p>
|
||||
|
||||
<p>You will receive your notifications as a private message between you and the bot.</p>
|
||||
|
||||
<pre>
|
||||
Create URL using your bot's API key and the email address
|
||||
associated with your Zulip account:
|
||||
https://zulip.example.com/api/v1/external/yo?email=awesome@zulip.example.com&api_key=abcdefgh
|
||||
</pre>
|
||||
|
||||
<p>Copy the url created and go to <a href="https://yoapi.justyo.co">yoapi.justyo.co</a></p>
|
||||
<p>Sign in using your username and password and go to Edit Profile.</p>
|
||||
|
||||
<img class="screenshot" src="/static/images/integrations/yo-app/001.png" />
|
||||
|
||||
<p>Paste the URL in Callback field and click on Update.</p>
|
||||
|
||||
<p><b>Congratulations! You're done!</b><br />When someone sends your username a Yo,
|
||||
you'll receive a notification as a private message from the bot
|
||||
like this:</p>
|
||||
|
||||
<img class="screenshot" src="/static/images/integrations/yo-app/002.png" />
|
||||
|
||||
<p>Multiple users can use the same Yo bot; each user should use
|
||||
their own Zulip account email in the webhook URL.</p>
|
||||
</div>
|
||||
|
||||
<div id="zendesk" class="integration-instructions">
|
||||
<p>First, create the stream you'd like to use for Zendesk notifications,
|
||||
and subscribe all interested parties to this stream. We recommend the
|
||||
|
||||
@@ -932,3 +932,24 @@ class PingdomHookTests(AuthedTestCase):
|
||||
|
||||
def _send_post_request_with_params(self, json):
|
||||
return self.client.post(self._url, json, stream_name=self.STREAM_NAME, content_type="application/json")
|
||||
|
||||
class YoHookTests(AuthedTestCase):
|
||||
def test_yo_message(self):
|
||||
"""
|
||||
Yo App sends notification whenever user receives a new Yo from another user.
|
||||
"""
|
||||
bot_email = "hamlet@zulip.com"
|
||||
api_key = self.get_api_key(bot_email)
|
||||
body = ""
|
||||
|
||||
email = "cordelia@zulip.com"
|
||||
sender = "IAGO"
|
||||
ip = "127.0.0.1"
|
||||
url = "/api/v1/external/yo?email=%s&api_key=%s&username=%s&user_ip=%s" % (email, api_key, sender, ip)
|
||||
|
||||
self.client.get(url,
|
||||
body,
|
||||
content_type="application/x-www-form-urlencoded")
|
||||
|
||||
msg = Message.objects.filter().order_by('-id')[0]
|
||||
self.assertEqual(msg.content, (u"Yo from IAGO"))
|
||||
|
||||
18
zerver/views/webhooks/yo.py
Normal file
18
zerver/views/webhooks/yo.py
Normal file
@@ -0,0 +1,18 @@
|
||||
# Webhooks for external integrations.
|
||||
from __future__ import absolute_import
|
||||
from zerver.models import get_client
|
||||
from zerver.lib.actions import check_send_message
|
||||
from zerver.lib.response import json_success
|
||||
from zerver.decorator import REQ, has_request_variables, api_key_only_webhook_view
|
||||
|
||||
import ujson
|
||||
|
||||
@api_key_only_webhook_view
|
||||
@has_request_variables
|
||||
def api_yo_app_webhook(request, user_profile, email=REQ(default=None),
|
||||
username=REQ(default='Yo Bot'), topic=REQ(default='None'),
|
||||
user_ip=REQ(default='None')):
|
||||
|
||||
body = ('Yo from %s') % (username,)
|
||||
check_send_message(user_profile, get_client('ZulipYoWebhook'), 'private', [email], topic, body)
|
||||
return json_success()
|
||||
@@ -162,6 +162,7 @@ urlpatterns += patterns('zerver.views',
|
||||
url(r'^api/v1/external/pagerduty$', 'webhooks.pagerduty.api_pagerduty_webhook'),
|
||||
url(r'^api/v1/external/travis$', 'webhooks.travis.api_travis_webhook'),
|
||||
url(r'^api/v1/external/pingdom$', 'webhooks.pingdom.api_pingdom_webhook'),
|
||||
url(r'^api/v1/external/yo$', 'webhooks.yo.api_yo_app_webhook'),
|
||||
|
||||
url(r'^user_uploads/(?P<realm_id>(\d*|unk))/(?P<filename>.*)', 'get_uploaded_file'),
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user