/newschatbot

Backend aplikace pro chatbot v rámci Inovace zpravodajského storytelling

Primary LanguagePythonMIT LicenseMIT

Idea Chatbota Newsie

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.

Inovace zpravodajského storytellingu

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ů.

Koncept v kostce

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.

obrazek

Jak to funguje

Koncept projektu, jeho přidanou hodnotu uživateli, cíl a benefity najdete v prezentaci Chatbot Newsie.

Licence

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.

Návod pro spuštění v nové redakci

Redakce bude potřebovat provést 3 hlavní kroky:

  1. Vytvořit si profil v online platformě Chatfuel, která zprostředkovává chování chatbota v Messengeru.
  2. Druhým krokem bude spusti backend chatbota v jazyce Python.
  3. Následně je třeba propojit Chatfuel, backend a RSS redakce.

Chatfuel

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.

  1. Nastavte si chatbota v Chatfuel podle následujícího zadání
  2. 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/

Newschatbot backend

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

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í

Nasazení probíhá pomocí Serverless Frameworku na prostředí AWS Lambda. Definice funkcí je v souboru serverless.yml.

Lokální vývoj

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ů.

Vývoj

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

Databázové migrace

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

Přispívání

Před odesláním změn

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}