Ich bin Sportsfreund, der Wintersport-Dienst der Sportschau. Ich bin für die Olympischen Winterspiele in PyeonChang entwickelt worden. Du kannst mich im Facebook-Messenger nutzen. sportsfreund.sportschau
Ich schicke tägliche Highlights, Ergebnisse zu einer Sportart, Neuigkeiten zu Sportlern oder Medaillen und melde mich, wenn ein Livestream deiner Lieblingssportart startet. Du kannst dir die Sportsfreund-Nachrichten nach deinen Wünschen zusammenstellen und dich jederzeit anmelden und abmelden. Schreibe mir 'Anmelden für ...' und eine Sportart, einen Sportlernamen oder ein Land.
Rufe meine Informationen selbst ab, indem du mir eine Nachricht schickst. Ich kenne über 2000 aktive Sportler. Oder frage zum Beispiel ‘Wann ist der nächste Ski-Wettkampf’, ‘Ergebnisse Biathlon’, ‘Ski Alpin Video’.
Redaktion: Willem de Haan, Nadine Mosch (MDR), Sebastian Göllner, David Vorholt (WDR) Umsetzung: Lisa Achenbach, Patricia Ennenbach, Jannes Höke, Christian Jörres, Marcus Weiner (WDR) Grafik: Lisa Strieder (ARD.de) Daten-Feeds: Heimspiel
- Facebook Developer App mit Messenger Integration: Anleitung
- Dialogflow App (früher api.ai)
Zunächst sollte der Source-Code lokal vorhanden sein. Dieses Git Kommando legt einen neuen Ordner mit dem Source an.
git clone https://github.com/wdr-data/sportsfreund.git
Diese Applikation wird über ein Shell Environment konfiguriert. Zum Produktionsbetrieb ist dafür der Mechanismus der jeweiligen Platform zu nutzen.
Für die lokale Entwicklung kann die Konfiguration über die Datei .env
im Source-Ordner erfolgen:
DEBUG=False # Debug-Attribut der Services (z.B. Django) (optional)
LOG_LEVEL=info # Loglevel des Application Servers Gunicorn (optional)
SECRET_KEY=12345 # Secret Key für Django
TUNNEL_NAME= # ${TUNNEL_NAME}.localtunnel.me für den FB-Webhook
FB_PAGE_TOKEN= # Access-Token für die Facebook API
FB_HUB_VERIFY_TOKEN= # Verify Token für den Facebook Webhook
DIALOGFLOW_TOKEN= # API Token für Dialogflow
FEED_URL= # URL der Datenquellen (proprietär)
VIDEO_FEED_URL= # URL für den Mediathek-Feed zum Wintersport (WDR intern)
VIDEO_PLAYLISTS_BASE= # URL zur Bestimmung der SMIL-Playlist eines Videos (WDR intern) - no trailing slash
VIDEO_URL_BASE= # URL-Basis zum Abruf des MP4-Videos (WDR intern) - no trailing slash
LIVESTREAM_FEED_BASE= # URL zum ECMS-Feed Olympia
LIVESTREAM_CENTER= # URL zur Mediathek-Seite mit allen Livestreams
SENTRY_URL= # DSN für die Sentry Error Logging Plattform (optional)
Zum lokalen Ausführen wird ein Docker-Daemon (Installation) und docker-compose
benötigt.
Die Umgebung kann mit folgendem Befehl gestartet werden:
./start.sh
Nachdem die Einrichtung abgeschlossen ist, sollte die Funktionalität der Anwendung überprüft werden, indem https://${TUNNEL_NAME}.localtunnel.me/admin/ aufgerufen werden. Dort sollte der Login zum Django-Backend erscheinen.
Wenn das funktioniert, kann die Einrichtung der Facebook-Integration abgeschlossen werden. Dazu ist in der Facebook Developer App ein Webhook mit dieser URL einzurichten:
https://${TUNNEL_NAME}.localtunnel.me/fb/${FB_PAGE_TOKEN}/
Anschließend sollten die Events messages
, messaging_postbacks
und messaging_referrals
für die gewünschte Seite abboniert werden.
Das Page Token wird in der URL verwendet, damit niemand außer Facebook Webhooks an Sportsfreund senden kann.
Sportsfreund sollte nun antworten.
Für den Produktionsbetrieb werden zudem folgende Komponenten benötigt:
- PostgreSQL (Uri in
DATABASE_URL
hinterlegen) - MongoDB (Uri in
MONGODB_URI
hinterlegen) - Redis (Uri in
REDIS_URL
hinterlegen) - S3 Bucket mit dieser Konfiguration:
S3_ACCESS_KEY # S3 Access Key S3_ACCESS_SECRET # S3 Access Secret S3_BUCKET # S3 Bucket Name S3_ENDPOINT # S3 Endpunkt (optional - für alternative Storages) S3_DOMAIN # S3 Public Domain für URLs (optional - für alternative Storages)
Diese Applikation basiert auf Docker-Containern.
Zum Produktions-Betrieb kann man sich an der Datei docker-compose.yml
orientieren,
diese muss allerdings an Produktionsbedingungen angepasst werden.
Die Applikation kann auch auf Heroku ausgeführt werden. Dazu muss lediglich dieses Repository deployed und die Environment Variablen gesetzt werden.
Dieses Python-Projekt nutzt Pipenv zur Verwaltung der Abhängigkeiten und des virtualenv
.
Zum Ausführen der Anwendung müssen die Abhängigkeiten nicht installiert sein. Es bietet sich allerdings an, ein lokales virtualenv zu erstellen, damit die IDE die Abhängigkeiten erkennen kann.
pipenv install
Es gelten die Facebook-Datenschutz-Regeln. Falls Nutzer sich für Push-Nachrichten anmelden, speichert Sportsfreund eine PSID (page specific id). Diese ID identifiziert den User nur im Chat mit Sportsfreund und hat sonst keine Bedeutung für Facebook. Um entscheiden zu können, welche Antwort Sportsfreund dem Nutzer sendet, schickt Sportsfreund den Text der Nachricht und die psid zu api.ai (Google Assistant). Alleine kann Sportsfreund nichts lernen. Deshalb schauen sich Menschen die Fragen an, die Sportsfreund gestellt werden und machen Sportsfreund schlauer. Darüber hinaus werden keine Daten gezogen oder weiterverwendet. Zu den Datenschutzbestimmungen des "Westdeutschen Rundfunks": http://www1.wdr.de/hilfe/datenschutz102.html
- Sportsfreund arbeitet in Kooperation mit Novi, dem Nachrichten-Bot von Funk: https://www.funk.net/
- Sportsfreund nutzt api.ai (Google Assistant) um die Absichten der Nutzer (intents) zu klassifizieren. Übergeben wird die PSID (Page Specific ID) und der Nachrichtentext.
Python (Source-Code oder aufbereitet) ist bei Beibehaltung des Lizenztextes unter der MIT License frei nutzbar und weiterverbreitbar.
Für Grafiken wird kein Nutzungsrecht eingeräumt.
Das Urheberrecht der verwendeten Wahlprogramme liegt bei den Parteien. Für die Wahlprogramme wird kein Nutzungsrecht eingeräumt.
Copyright Westdeutscher Rundfunk Köln
Es besteht keinerlei Gewährleistung für das Programm, soweit dies gesetzlich zulässig ist. Sofern nicht anderweitig schriftlich bestätigt, stellen die Urheberrechtsinhaber und/oder Dritte das Programm so zur Verfügung, „wie es ist“, ohne irgendeine Gewährleistung. Das volle Risiko bezüglich Qualität und Leistungsfähigkeit des Programms liegt bei Ihnen.