Π ΡΡΡΠΊΠΈΠΉ | English
Π―Π½Π΄Π΅ΠΊΡ ΠΠ»ΠΈΡΠ°. ΠΠΈΠ°Π»ΠΎΠ³ΠΈ (Π½Π°Π²ΡΠΊΠΈ)
aioAlice ΡΡΠΎ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΠΠ»ΠΈΡΠΎΠΉ
ΠΠ°ΡΠ΅ΠΌ?
- Π Π°Π±ΠΎΡΠ°ΠΉΡΠ΅ Ρ ΠΏΡΠΈΠ²ΡΡΠ½ΡΠΌΠΈ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ, Π° Π½Π΅ Π·Π°ΠΉΠ½ΠΈΠΌΠ°ΠΉΡΠ΅ΡΡ ΠΏΠ°ΡΡΠΈΠ½Π³ΠΎΠΌ JSON'Π°
- ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΎΡΠ²Π΅Ρ Π² Π²Π΅Π±Ρ ΡΠΊ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π²Ρ Π½Π΅ ΡΡΠΏΠ΅Π»ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΈΡΡ ΠΎΡΠ²Π΅Ρ Π²ΠΎΠ²ΡΠ΅ΠΌΡ - Π½Π°Π²ΡΠΊ Π½Π΅ Π²Π΅ΡΠ½Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ ΡΠ΅ΡΠ²Π΅ΡΠ°, Π½ΠΎ Π·Π°ΠΏΠΈΡΠ΅Ρ Π²Π°ΠΌ Π»ΠΎΠ³
ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΎΡΠ²Π΅Ρ ΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ async IO. ΠΡΠ»ΠΈ Π·Π°ΡΡΠ½Π΅ΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π² ΠΊΠ°ΠΊΠΎΠΌ-ΡΠΎ ΡΠΈΠΊΠ»Π΅ ΠΈΠ»ΠΈ Π΄Ρ. ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅, ΡΡΠΎ Π½Π΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ
- Π£Π΄ΠΎΠ±Π½ΡΠ΅ Ρ ΡΠ½Π΄Π»Π΅ΡΡ - Π±ΡΠ΄Π΅Ρ Π²ΡΠ·Π²Π°Π½ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π΅
- Π Π°Π±ΠΎΡΠ° Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΡΠΌΠΈ
- ΠΠ΅Π³ΠΊΠΎ Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΡ ΠΎΡΠ²Π΅Ρ
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°
# ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ virtual env ΠΈ python 3.6+:
python3.6 -m venv aliceenv
source ./aliceenv/bin/activate
pip install pip -U
pip install setuptools -U
pip install uvloop # uvloop ΠΏΡΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ
pip install aioalice -U
# Or install from GitHub:
# pip install git+https://github.com/surik00/aioalice.git -U
# ΠΡΠ»ΠΈ git Π½Π΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½:
# 1. ΡΠΊΠ°ΡΠ°ΠΉΡΠ΅ ZIP
# 2. ΡΠ°Π·Π°ΡΡ
ΠΈΠ²ΠΈΡΡΠΉΡΠ΅ ΠΈ ΠΏΠ΅ΡΠ΅ΠΉΠ΄ΠΈΡΠ΅ Π² ΠΏΠ°ΠΏΠΊΡ
# 3. Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
python setup.py install
ΠΡΡΡΡΡΠΉ ΡΡΠ°ΡΡ
ΠΡΠΈΠΌΠ΅Ρ ΠΏΡΠΎΡΡΠ΅ΠΉΡΠ΅Π³ΠΎ Π½Π°Π²ΡΠΊΠ°
dp = Dispatcher()
@dp.request_handler()
async def handle_all_requests(alice_request):
return alice_request.response('ΠΡΠΈΠ²Π΅Ρ ΡΡΠΎΠΌΡ ΠΌΠΈΡΡ!')
ΠΠ°ΡΡΠΎΡΠΊΠΈ
-
ΠΡΠΈΠΌΠ΅Ρ ΠΊΠ°ΡΡΠΎΡΠΊΠΈ Ρ ΠΎΠ΄Π½ΠΈΠΌ Π±ΠΎΠ»ΡΡΠΈΠΌ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ
-
ΠΡΠΈΠΌΠ΅Ρ ΠΊΠ°ΡΡΠΎΡΠΊΠΈ Ρ Π°Π»ΡΠ±ΠΎΠΌΠΎΠΌ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ
JSON serializing
ΠΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±ΠΎΠ»Π΅Π΅ Π±ΡΡΡΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ JSON, ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ rapidjson ΠΈΠ»ΠΈ ujson. ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡΡ ΠΈ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ.
ΠΠ°Π²ΡΠΊΠΈ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ aioAlice
Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π΄Π΅ΠΏΠ»ΠΎΠΉ
Π ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ°Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ:
WEBHOOK_URL_PATH = '/my-alice-webhook/' # webhook endpoint
WEBAPP_HOST = 'localhost' # Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ Π½Π° Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅
WEBAPP_PORT = 3001 # ΠΈΡΠΏΠ»ΡΠ·ΡΠ΅ΠΌ Π»ΡΠ±ΠΎΠΉ Π½Π΅ Π·Π°Π½ΡΡΡΠΉ ΠΏΠΎΡΡ
ΠΠ»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ngrok, ΡΠΎΠ³Π΄Π° Π²Π΅Π±Ρ
ΡΠΊ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π½Π° https://1a2b3c4d5e.ngrok.io/my-alice-webhook/
(endpoint Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ WEBHOOK_URL_PATH
, ΡΠ°ΠΊ ΠΊΠ°ΠΊ WebApp ΠΎΠΆΠΈΠ΄Π°Π΅Ρ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠ°ΠΌ), ΠΏΠΎΡΡ Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠ°Ρ
Π½ΡΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ WEBAPP_PORT
(Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ 3001)
ΠΠ»Ρ ΠΏΡΠΎΠ΄Π°ΠΊΡΠ΅Π½Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Nginx, ΡΠΎΠ³Π΄Π° Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Nginx Π²Π½ΡΡΡΠΈ Π±Π»ΠΎΠΊΠ° server
Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ:
location /my-alice-webhook/ { # WEBHOOK_URL_PATH
proxy_pass http://127.0.0.1:3001/; # Π°Π΄ΡΠ΅Ρ Π΄ΠΎ Π·Π°ΠΏΡΡΠ΅Π½Π½ΠΎΠ³ΠΎ WebApp, Π² Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠΎ localhost ΠΈ ΠΏΠΎΡΡ 3001
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
}