Zpravodajské články jen těžko obstojí v konkurenci zábavných obsahů sociálních sítí, her a interaktivních formátů. Zaujměte své čtenáře Chatbotem Newsie, který bude představovat zprávy postupně, bude se uživatele ptát a motivovat ho, aby se ke zprávám vracel.
Projekt vznikl ve spoluprácí Nadačního fondu nezávislé žurnalistiky a Česko.Digital. Cílem bylo navrhnout prototyp, který by dostat zpravodajství k lidem, kteří zprávy nečtou (dle výzkumu se jedná o více než 30 % populace). Zapojili jsme 150 expertních dobrovolníků a novináře z 10 redakcí. Ověřovali jsme si hypotézy, ptali se novinářů i mediálních domů. Idea chatbota zvítězila v konkurenci téměř stovky nápadů.
Chatbot funguje na platformě Messenger a přináší informace o dění kolem lidem, kteří o ně mají sice zájem, ale zpravodajské servery pro ně nejsou vhodnou formou, nebo nemají čas, chuť či disciplínu zprávy sledovat. Chatbot funguje pro konkrétní redakci, která dodává obsah prostřednictvím RSS. Redakce získávají nové, především mladé čtenáře. Po přečtení zpráv si uživatel může udělat kvíz a získat body. Čtenář je motivován každý den číst alespoň 3 zprávy.
Koncept projektu, jeho přidanou hodnotu uživateli, cíl a benefity najdete v prezentaci Chatbot Newsie.
Projekt je open source, kdokoliv má právo kdykoliv využít dokumentaci pro své účely. Na projekt platí MIT license. Více MIT licenci naleznete na popisu na GitHub.
Redakce bude potřebovat provést 3 hlavní kroky:
- Vytvořit si profil v online platformě Chatfuel, která zprostředkovává chování chatbota v Messengeru.
- Druhým krokem bude spusti backend chatbota v jazyce Python.
- Následně je třeba propojit Chatfuel, backend a RSS redakce.
Online nástroj Chatfuel nabízí několik verzí, my používali verzi za 15$/měsíc. Zde si definujte workflow a bloky, které volají prostřednictvím API backend. V tomto nástroji nastavíte, jak bude chatbot na uživatele reagovat, jak mu bude zprávy zobrazovat a jaké otázky mu bude klást.
- Nastavte si chatbota v Chatfuel podle následujícího zadání
- Upravte v jednotlivých blocích URL na API podle toho, kde je nasazený backend. Při tvorbě prototypu se jednalo např. o https://v1r0yf8r51.execute-api.eu-west-3.amazonaws.com/dev/v1/
Python Flask REST API poskytující data pro Chatfuels Chatbot. Nasazení probíhá pomocí Serverless Frameworku na prostředí AWS Lambda. Aplikace je připojena k Postgres databázi.
Infrastruktura pro backend a databázi je spravována pomocí Terraformu (IaaC - Infrastructure-as-a-code). Nasazení probíhá automaticky pomocí Github Actions. (Na Githubu je potřeba nastavit proměnné AWS_ACCESS_KEY_ID a AWS_SECRET_ACCESS_KEY.)
AWS PostgreSQL databáze není přístupná přímo. Je přístupná pouze přes VPN. Pro získání přístupu kontaktujte @martinwenisch
Nasazení probíhá pomocí Serverless Frameworku na prostředí AWS Lambda. Definice funkcí je v souboru serverless.yml
.
Spouštění pomocí Docker Compose:
docker-compose up
Spustí Flask aplikaci, PostgreSQL server a databázové migrace.
Ověřit, že spuštění proběhlo v pořádku, můžete příkazem:
curl http://127.0.0.1:5000/v1/articles/
Ten byl měl vrátit JSON se seznamem výchozích článků.
Nastavení Pythonu
Projekt využívá Python verze 3.6
Vytvoření virtuálního prostředí a instalace závislostí: Při instalaci můžete narazit na problém s balíčkem greenlet
. (Na Mac zařízení změňte v requirements.txt
greenlet==0.4.10 na greenlet==0.4.16)
python -m venv env
source env/bin/activate
pip install -r requirements.txt
Nastavení databáze
Spuštění PostgreSQL pomocí Docker Compose: (Případně si můžete PostgreSQL stáhnout a nainstalovat z https://www.postgresql.org/download/)
cd dockers/postgres/
docker-compose up
Databázové migrace
Nastavte v terminálu proměnnou prostředí FLASK_APP (na Linux prostředí místo set použijte export)
set FLASK_APP=app/main:app;
Nastavte v terminálu proměnnou prostředíDB_CONNSTR (na Linux prostředí místo set použijte export)
set DB_CONNSTR="postgresql://postgres:postgres@localhost:5432/feed_parser"
Spuštění migrací
flask db upgrade
Spuštění aplikace
flask run
Flask aplikace se spouští ze souboru app/main.py
Vytvoření nové migrace založené na změnách v aplikačním modelu (app/model.py).
flask db migrate
Spuštění migrací.
flask db update
Než odešlete vaše změny, zformátujte kód pomocí nástroje Black, následujícím příkazem:
black {source_file_or_directory}
Pokud skript nefunguje, spusťe Black přímo jako balíček:
python3 -m black {source_file_or_directory}