αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž‡αŸ†αž“αžΆαž‰αž…αŸ’αž”αžΆαžŸαŸ‹αž›αžΆαžŸαŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Alice αž›αžΎαž˜αž»αžαž„αžΆαžšαž‚αŸ’αž˜αžΆαž“αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαžšαž”αžŸαŸ‹ Yandex.Cloud αž“αž·αž„ Python

αž…αžΌαžšαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž–αŸαžαŸŒαž˜αžΆαž“αŸ” αž€αžΆαž›αž–αžΈαž˜αŸ’αžŸαž·αž›αž˜αž·αž‰ Yandex.Cloud αž”αžΆαž“αž”αŸ’αžšαž€αžΆαžŸαž–αžΈαž€αžΆαžšαž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αž€αž»αŸ†αž–αŸ’αž™αžΌαž‘αŸαžšαžŠαŸ‚αž›αž‚αŸ’αž˜αžΆαž“αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ αž˜αž»αžαž„αžΆαžšαž–αž–αž€ Yandex. αž“αŸαŸ‡αž˜αžΆαž“αž“αŸαž™αžαžΆαŸ– αž’αŸ’αž“αž€αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αžŸαžšαžŸαŸαžšαž€αžΌαžŠαž“αŸƒαžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ (αž§αž‘αžΆαž αžšαžŽαŸ αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž”αžŽαŸ’αžαžΆαž‰ ឬ chatbot) αž αžΎαž™ Cloud αžαŸ’αž›αž½αž“αžœαžΆαž”αž„αŸ’αž€αžΎαž αž“αž·αž„αžαŸ‚αž‘αžΆαŸ†αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž“αž·αž˜αŸ’αž˜αž·αžαžŠαŸ‚αž›αžœαžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžš αž αžΎαž™αžαŸ‚αž˜αž‘αžΆαŸ†αž„αž…αž˜αŸ’αž›αž„αž–αž½αž€αžœαžΆαž‘αžΎαž„αžœαž·αž‰αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž”αž“αŸ’αž‘αž»αž€αž€αžΎαž“αž‘αžΎαž„αŸ” αž’αŸ’αž“αž€αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž‚αž·αžαž’αŸ’αžœαžΈαž‘αžΆαŸ†αž„αž’αžŸαŸ‹ αžœαžΆαž„αžΆαž™αžŸαŸ’αžšαž½αž›αžŽαžΆαžŸαŸ‹αŸ” αž αžΎαž™αž€αžΆαžšαž”αž„αŸ‹αž”αŸ’αžšαžΆαž€αŸ‹αž‘αŸ…αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαŸ‚αž–αŸαž›αž‚αžŽαž“αžΆαž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ”

αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž˜αž“αž»αžŸαŸ’αžŸαž˜αž½αž™αž…αŸ†αž“αž½αž“αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž˜αž·αž“αž”αž„αŸ‹αž”αŸ’αžšαžΆαž€αŸ‹αž‘αžΆαž›αŸ‹αžαŸ‚αžŸαŸ„αŸ‡αŸ” αž‘αžΆαŸ†αž„αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸ αž‡αŸ†αž“αžΆαž‰αžαžΆαž„αž€αŸ’αžšαŸ…αžšαž”αžŸαŸ‹αž’αžΆαž›αžΈαžŸαž“αŸ„αŸ‡αž‚αžΊ chatbots αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αž“αŸ…αž€αŸ’αž“αž»αž„αžœαžΆαŸ” αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαžŽαžΆαž˜αž½αž™αž’αžΆαž…αžŸαžšαžŸαŸαžš αž”αž„αŸ’αž αŸ„αŸ‡ αž“αž·αž„αž…αž»αŸ‡αžˆαŸ’αž˜αŸ„αŸ‡αž‡αŸ†αž“αžΆαž‰αž”αŸ‚αž”αž“αŸαŸ‡ αž αžΎαž™αž…αžΆαž”αŸ‹αž–αžΈαžαŸ’αž„αŸƒαž“αŸαŸ‡ αž‡αŸ†αž“αžΆαž‰αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžšαŸ€αž”αž…αŸ†αž‘αŸ αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž”αž„αŸ’αž αŸ„αŸ‡αž€αžΌαžŠαžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαž‘αŸ…αž–αž–αž€αž€αŸ’αž“αž»αž„αž‘αž˜αŸ’αžšαž„αŸ‹αž‡αžΆαž‘αž˜αŸ’αžšαž„αŸ‹ αž˜αž»αžαž„αžΆαžš serverless αžŠαžΌαž…αž‚αŸ’αž“αžΆαŸ”.

αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αžΆαž“ nuances αž˜αž½αž™αž…αŸ†αž“αž½αž“αŸ” αž‘αžΈαž˜αž½αž™ αž›αŸαžαž€αžΌαžŠαžŸαžαŸ’αžœαž…αž·αž‰αŸ’αž…αžΉαž˜αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž’αžΆαž…αž‘αžΆαž˜αž‘αžΆαžšαž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™αž˜αž½αž™αž…αŸ†αž“αž½αž“ αž αžΎαž™αžœαžΆαž˜αž·αž“αžŸαŸ†αžαžΆαž“αŸ‹αž‘αŸαž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αžΌαžŸαž–αž½αž€αžœαžΆαž‘αŸ…αž€αŸ’αž“αž»αž„αž–αž–αž€αŸ” αž‘αžΈαž–αžΈαžš chatbot αž’αž˜αŸ’αž˜αžαžΆαžŽαžΆαž˜αž½αž™αžαŸ’αžšαžΌαžœαžšαž€αŸ’αžŸαžΆαž‘αž»αž€αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž“αŸƒαž”αŸ’αžšαž’αž”αŸ‹αž“αŸ…αž€αž“αŸ’αž›αŸ‚αž„αžŽαžΆαž˜αž½αž™ (αžŠαžΌαž…αŸ’αž“αŸ’αžšαŸ‡αž‡αžΆαžŸαŸ’αžαžΆαž“αž—αžΆαž–); αžšαž”αŸ€αž”αž’αŸ’αžœαžΎαžœαžΆαž€αŸ’αž“αž»αž„αž˜αž»αžαž„αžΆαžš serverless αžœαž·αž’αžΈαž„αžΆαž™αžŸαŸ’αžšαž½αž›αž”αŸ†αž•αž»αž? αž‘αžΈαž”αžΈ αžαžΎβ€‹αž’αŸ’αž“αž€β€‹αž’αžΆαž…β€‹αžŸαžšαžŸαŸαžšβ€‹αž‡αŸ†αž“αžΆαž‰β€‹αž€αžαŸ’αžœαž€αŸ‹β€‹αžšαž αŸαžŸβ€‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Alice αž¬β€‹αžŸαžΌαž˜αŸ’αž”αžΈαžαŸ‚β€‹αž”αŸ’αžšαž—αŸαž‘ Bot αž˜αž½αž™αž…αŸ†αž“αž½αž“β€‹αžŠαŸ„αž™β€‹αž˜αžΆαž“β€‹αž‚αŸ’αžšαŸ„αž„β€‹αž˜αž·αž“β€‹αžŸαžΌαž“αŸ’αž™β€‹αžŠαŸ„αž™β€‹αžšαž”αŸ€αž”αžŽαžΆ? αž’αŸ†αž–αžΈ nuances αž‘αžΆαŸ†αž„αž“αŸαŸ‡αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž–αž·αž, αž’αžαŸ’αžαž”αž‘αŸ”

αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž‡αŸ†αž“αžΆαž‰αž…αŸ’αž”αžΆαžŸαŸ‹αž›αžΆαžŸαŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Alice αž›αžΎαž˜αž»αžαž„αžΆαžšαž‚αŸ’αž˜αžΆαž“αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαžšαž”αžŸαŸ‹ Yandex.Cloud αž“αž·αž„ Python

αž€αžΆαžšαžšαŸ€αž”αž…αŸ†αžŸαžΈαž›αž’αž˜αŸŒ

αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž˜αž·αž“αž…αŸαŸ‡αž’αžαŸ‹αž’αŸ’αž˜αžαŸ‹αŸ– αžαŸ’αž‰αž»αŸ†αž”αŸ’αžšαž˜αžΌαž›αž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž‡αžΆαž˜αž½αž™ makefile αž˜αž»αž“αž–αŸαž›αž•αŸ’αž‘αž»αž€αž˜αž»αžαž„αžΆαžšαž‘αŸ…αž–αž–αž€ αžαŸ’αž‰αž»αŸ†αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž“αŸƒαž”αŸ’αžšαž’αž”αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„ Yandex Object Storage (αžœαžΆαž‚αžΆαŸ†αž‘αŸ’αžš S3 API) αž αžΎαž™αžαŸ’αž‰αž»αŸ†αž”αŸ’αžšαžΎαž”αžŽαŸ’αžŽαžΆαž›αŸαž™αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†αžŠαžΎαž˜αŸ’αž”αžΈαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž”αŸ’αžšαž’αž”αŸ‹αŸ” tgalice. αž‡αžΆαž›αž‘αŸ’αž’αž•αž›αžœαžΆαž”αŸ’αžšαŸ‚αž…αŸαž‰ αžŠαžΌαž…αž‡αžΆ αž‡αŸ†αž“αžΆαž‰αžŸαžΆαž€αž›αŸ’αž”αž„αŸ” αž αžΎαž™β€‹αž₯αž‘αžΌαžœβ€‹αž“αŸαŸ‡ αž…αžΌαžšβ€‹αž™αžΎαž„β€‹αžœαž·αž—αžΆαž‚β€‹αž‘αžΆαŸ†αž„β€‹αž’αžŸαŸ‹β€‹αž“αŸαŸ‡β€‹αž²αŸ’αž™β€‹αž”αžΆαž“β€‹αž›αž˜αŸ’αž’αž·αžβ€‹αž”αž“αŸ’αžαž·αž…β€‹αž”αž“αŸ’αžαž½αž…αŸ”

αžŸαž˜αŸ’αžšαžΆαž”αŸ‹β€‹αž’αŸ’αž“αž€β€‹αžŠαŸ‚αž›β€‹αž˜αž·αž“β€‹αž…αŸαŸ‡β€‹αž’αžαŸ‹αž’αŸ’αž˜αžαŸ‹β€‹αž”αž“αŸ’αžαž·αž… αž˜αž»αž“β€‹αž“αžΉαž„β€‹αž…αžΌαž›β€‹αž‘αŸ…β€‹αž€αŸ’αž“αž»αž„β€‹αžšαžΏαž„β€‹αžŸαŸ’αž˜αž»αž‚αžŸαŸ’αž˜αžΆαž‰β€‹αžšαž”αžŸαŸ‹β€‹αžαŸ’αž‰αž»αŸ† αžαŸ’αž‰αž»αŸ†β€‹αžŸαžΌαž˜β€‹αžŽαŸ‚αž“αžΆαŸ†β€‹αž²αŸ’αž™β€‹αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜β€‹αžŸαžΆαž˜αž‰αŸ’αž‰αŸ” αž–αŸ„αž›αž‚αžΊαž”αž„αŸ’αž€αžΎαžαž˜αž»αžαž„αžΆαžš echobot αž―αž€αžŸαžΆαžšαžαŸ‚αž˜αž½αž™ αž…αž»αŸ‡αžˆαŸ’αž˜αŸ„αŸ‡ αž“αž·αž„αžŸαžΆαž€αž›αŸ’αž”αž„αžœαžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž€αž»αž„αžŸαžΌαž›αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž”αŸ’αžšαž’αž”αŸ‹αŸ” αž–αŸαžαŸŒαž˜αžΆαž“αž›αž˜αŸ’αž’αž·αž - αž€αŸ’αž“αž»αž„ αž€αžΆαžšαžŸαž“αŸ’αž‘αž“αžΆαž”αŸ’αž›αž»αž€ ΠΈ αž―αž€αžŸαžΆαžšαž–αž–αž€. αž αžΎαž™αž˜αžΆαž“αžαŸ‚αž–αŸαž›αž“αŸ„αŸ‡αž‘αŸαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αŸ”

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž…αž„αŸ‹αž˜αžΆαž“αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαž—αŸ’αž›αžΆαž˜αŸ—αž’αŸ†αž–αžΈαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž™αžΎαž„αž€αŸ†αž–αž»αž„αž”αŸ’αžšαž™αž»αž‘αŸ’αž’αžŸαžΌαž˜αžŸαž½αžš Alice 'αž”αžΎαž€αž‡αŸ†αž“αžΆαž‰ "IT horoscope"' αž€αžΆαžšαžŸαž“αŸ’αž‘αž“αžΆαžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž‚αž½αžšαžαŸ‚αž€αžΎαžαž‘αžΎαž„αŸ–

αž’αžΆαž›αžΈαžŸαŸ– αžŸαž½αžŸαŸ’αžαžΈ! αž’αŸ’αž“αž€αžŸαŸ’αžαž·αžαž€αŸ’αž“αž»αž„αž‡αŸ†αž“αžΆαž‰ "IT horoscope"αŸ” αž“αž·αž™αžΆαž™αžαžΆ "αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜" αžŠαžΎαž˜αŸ’αž”αžΈαžšαž€αž˜αžΎαž›αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž•αŸ’αž€αžΆαž™αžŸαž“αŸ’αž™αžΆαž’αŸ’αž“αž€αŸ”
αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αŸ– αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜
αž…αž˜αŸ’αž›αžΎαž™αŸ– αžŸαžΌαž˜αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αžˆαŸ’αž˜αŸ„αŸ‡αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ”
Yu: Vasisualy
αž…αž˜αŸ’αž›αžΎαž™αŸ– αž₯αž‘αžΌαžœαž”αŸ’αžšαžΆαž”αŸ‹αžαŸ’αž‰αž»αŸ†αž–αžΈαž†αŸ’αž“αžΆαŸ†αž€αŸ†αžŽαžΎαžαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ” αž˜αžΆαž“αžαŸ‚αž”αž½αž“αžαŸ’αž‘αž„αŸ‹αž‘αŸ αž‚αŸ’αž˜αžΆαž“αž’αŸ’αžœαžΈαž‘αŸ€αžαž‘αŸαŸ”
αž™αžΌαŸ– αž‘αžΈαž–αžΈαžš
αž…αž˜αŸ’αž›αžΎαž™αŸ– αžŸαžΌαž˜αž–αŸ’αž™αžΆαž™αžΆαž˜αž˜αŸ’αžαž„αž‘αŸ€αžαŸ” αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž†αŸ’αž“αžΆαŸ†αž€αŸ†αžŽαžΎαžαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ - αž”αž½αž“αžαŸ’αž‘αž„αŸ‹αŸ”
αž™αžΌαŸ– ្០០្
αž’αžŸαŸ’αž…αžΆαžšαŸ’αž™! αž₯αž‘αžΌαžœαžŠαžΆαž€αŸ‹αžˆαŸ’αž˜αŸ„αŸ‡αžαŸ‚αž€αŸ†αžŽαžΎαžαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ”
αž™αžΌαŸ– αžαŸ‚αž€αž»αž˜αŸ’αž—αŸˆ
αž’αžŸαŸ’αž…αžΆαžšαŸ’αž™! αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž”αŸ’αžšαžΆαž”αŸ‹αžαŸ’αž‰αž»αŸ†αžαŸ’αž„αŸƒαžαŸ‚αž†αŸ’αž“αžΆαŸ†αž€αŸ†αžŽαžΎαžαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ - αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž›αŸαžαž˜αž½αž™αž¬αž–αžΈαžšαžαŸ’αž‘αž„αŸ‹αŸ”
αž™αžΌαŸ– ្០០្
αž…αž˜αŸ’αž›αžΎαž™αŸ– αž’αžšαž‚αž»αžŽβ€‹αž›αŸ„αž€ αžœαŸ‰αžΆ αžŸαŸŠαžΈαžŸαŸŠαžΌαž›! αž₯αž‘αžΌαžœαž“αŸαŸ‡αž™αžΎαž„αžŠαžΉαž„αž αžΎαž™αžαžΆαž’αŸ’αž“αž€αž˜αžΆαž“αž’αžΆαž™αž» 17 αž†αŸ’αž“αžΆαŸ†αž αžΎαž™αž’αŸ’αž“αž€αž‚αžΊαž‡αžΆ Aquarius αŸ” αž“αŸ…αž‘αžΈαž“αŸαŸ‡αž’αŸ’αž“αž€αž–αž·αžαž‡αžΆαžŸαŸ†αžŽαžΆαž„αžŽαžΆαžŸαŸ‹! αž•αŸ’αž€αžΆαž™αž”αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αŸ” Π° Ρ‡Ρ‚ΠΎ говорят Π·Π²Ρ‘Π·Π΄Ρ‹, Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, запустив Π½Π°Π²Ρ‹ΠΊ.

αž”αž‰αŸ’αž αžΆαž‚αžΊαžαžΆ αžŠαžΎαž˜αŸ’αž”αžΈαžšαž€αŸ’αžŸαžΆαžŸαžΌαž˜αŸ’αž”αžΈαžαŸ‚αž”αŸ’αžšαž’αž”αŸ‹αžŠαŸαžŸαžΆαž˜αž‰αŸ’αž‰αž”αŸ‚αž”αž“αŸαŸ‡ αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž…αž„αž…αžΆαŸ†αžˆαŸ’αž˜αŸ„αŸ‡ αž“αž·αž„αžαŸ’αž„αŸƒαžαŸ‚αž†αŸ’αž“αžΆαŸ†αž€αŸ†αžŽαžΎαžαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ αž αžΎαž™αž“αŸ…αž€αŸ’αž“αž»αž„αž”αžšαž·αž™αžΆαž€αžΆαžŸαžŠαŸ‚αž›αž‚αŸ’αž˜αžΆαž“αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ αž“αŸαŸ‡αž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαžšαžΏαž„αžαžΌαž…αžαžΆαž…αž“αŸ„αŸ‡αž‘αŸαŸ” αžœαžΆαž“αžΉαž„αž˜αž·αž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαžΎαž˜αŸ’αž”αžΈαžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž”αžšαž·αž”αž‘αž€αŸ’αž“αž»αž„ RAM αž¬αž‡αžΆαž―αž€αžŸαžΆαžšαž“αŸ…αž›αžΎαžαžΆαžŸαž‘αŸαž–αŸ’αžšαŸ„αŸ‡ Yandex.Cloud αž’αžΆαž…αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž˜αž»αžαž„αžΆαžšαž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž“αž·αž˜αŸ’αž˜αž·αžαž‡αžΆαž…αŸ’αžšαžΎαž“αž€αŸ’αž“αž»αž„αž–αŸαž›αžαŸ‚αž˜αž½αž™ αž αžΎαž™αž”αŸ’αžαžΌαžšαžšαžœαžΆαž„αž–αž½αž€αžœαžΆαžαžΆαž˜αž’αŸ†αž–αžΎαž…αž·αžαŸ’αžαŸ” αž’αŸ’αž“αž€αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αŸ’αžšαžΎαž§αž”αž€αžšαžŽαŸαž•αŸ’αž‘αž»αž€αžαžΆαž„αž€αŸ’αžšαŸ…αž˜αž½αž™αž…αŸ†αž“αž½αž“αŸ” Object Storage αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž‡αžΆαž‘αŸ†αž αŸ†αž•αŸ’αž‘αž»αž€αžŠαŸαžαŸ„αž€αžŸαž˜αžšαž˜αŸ’αž™ αž“αž·αž„αžŸαžΆαž˜αž‰αŸ’αž‰αžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„ Yandex.Cloud (αž“αŸ„αŸ‡αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž›αžΏαž“)αŸ” αž‡αžΆαž‡αž˜αŸ’αžšαžΎαžŸαž₯αžαž‚αž·αžαžαŸ’αž›αŸƒ αž’αŸ’αž“αž€αž’αžΆαž…αžŸαžΆαž€αž›αŸ’αž”αž„αž§αž‘αžΆαž αžšαžŽαŸαž˜αž½αž™αžŠαž»αŸ†αžŠαŸ„αž™αž₯αžαž‚αž·αžαžαŸ’αž›αŸƒ αž–αž–αž€ αž˜αŸ‰αž»αž„αž‡αžΈ αž€αž“αŸ’αž›αŸ‚αž„αžŽαžΆαž†αŸ’αž„αžΆαž™αŸ” αž‘αžΆαŸ†αž„ Object Storage (αžœαžΆαž‚αžΆαŸ†αž‘αŸ’αžš S3 interface) αž“αž·αž„ Mongo αž˜αžΆαž“ Python wrappers αž„αžΆαž™αžŸαŸ’αžšαž½αž›αŸ”

αž”αž‰αŸ’αž αžΆαž˜αž½αž™αž‘αŸ€αžαž‚αžΊαžαžΆ αžŠαžΎαž˜αŸ’αž”αžΈαž…αžΌαž›αž‘αŸ…αž€αžΆαž“αŸ‹ Object Storage, MongoDB αž“αž·αž„ database ឬ data store αžŽαžΆαž˜αž½αž™αž•αŸ’αžŸαŸαž„αž‘αŸ€αž αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž€αžΆαžšαž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™αžαžΆαž„αž€αŸ’αžšαŸ…αž˜αž½αž™αž…αŸ†αž“αž½αž“αžŠαŸ‚αž›αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœ upload αž‘αŸ… Yandex Functions αžšαž½αž˜αž‡αžΆαž˜αž½αž™αž“αžΉαž„ function code αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ” αž αžΎαž™αžαŸ’αž‰αž»αŸ†αž…αž„αŸ‹αž’αŸ’αžœαžΎαžœαžΆαžŠαŸ„αž™αžŸαŸ’αžšαž½αž›αŸ” αžœαžΆαž„αžΆαž™αžŸαŸ’αžšαž½αž›αž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„ (αžŠαžΌαž…αž‡αžΆαž“αŸ…αž›αžΎ heroku) ធអទអ αžœαžΆαž“αžΉαž„αž˜αž·αž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž’αŸ’αž“αž€αž’αžΆαž…αž”αž„αŸ’αž€αžΎαžαž€αžΆαžšαž›αž½αž„αž›αŸ„αž˜αž‡αžΆαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž˜αž½αž™αž…αŸ†αž“αž½αž“αžŠαŸ„αž™αž€αžΆαžšαžŸαžšαžŸαŸαžšαžŸαŸ’αž‚αŸ’αžšαžΈαž”αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαžαž”αžšαž·αžŸαŸ’αžαžΆαž“ (αž”αž„αŸ’αž€αžΎαžαž―αž€αžŸαžΆαžš)αŸ”

αžšαž”αŸ€αž”αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž‡αŸ†αž“αžΆαž‰αž αŸ„αžšαžΆαžŸαžΆαžŸαŸ’αžαŸ’αžš

  1. αžαŸ’αžšαŸ€αž˜αžαŸ’αž›αž½αž“αŸ– αž…αžΌαž›αž‘αŸ…αž€αžΆαž“αŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αžαŸ’αž›αŸ‡αž‡αžΆαž˜αž½αž™αž›αžΈαž“αž»αž…αŸ” αž‡αžΆαž‚αŸ„αž›αž€αžΆαžšαžŽαŸ αž’αŸ’αž“αž€αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž’αžΆαž…αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™ Windows αž•αž„αžŠαŸ‚αžš αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœ conjure αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž“αŸƒ makefile αž“αŸαŸ‡αŸ” αž αžΎαž™αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαžŽαžΆαž€αŸαžŠαŸ„αž™ αž’αŸ’αž“αž€αž“αžΉαž„αžαŸ’αžšαžΌαžœαž€αžΆαžšαž™αŸ‰αžΆαž„αž αŸ„αž…αžŽαžΆαžŸαŸ‹ 3.6 αžŠαŸ‚αž›αž”αžΆαž“αžŠαŸ†αž‘αžΎαž„ Python αŸ”
  2. αž€αŸ’αž›αžΌαž“αž–αžΈ github αž§αž‘αžΆαž αžšαžŽαŸαž“αŸƒαž‡αŸ†αž“αžΆαž‰ horoscope.
  3. αž…αž»αŸ‡αžˆαŸ’αž˜αŸ„αŸ‡αž€αŸ’αž“αž»αž„ Ya.CloudαŸ– https://cloud.yandex.ru
  4. αž”αž„αŸ’αž€αžΎαžαžαŸ’αž›αž½αž“αž’αŸ’αž“αž€αž–αžΈαžšαž’αž»αž„ αžœαžαŸ’αžαž»αž•αŸ’αž‘αž»αž€αž αŸ…αž–αž½αž€αž‚αŸαžαžΆαž˜αžˆαŸ’αž˜αŸ„αŸ‡αžŽαžΆαž˜αž½αž™αŸ” {BUCKET NAME} ΠΈ tgalice-test-cold-storage (αžˆαŸ’αž˜αŸ„αŸ‡αž€αžŽαŸ’αžαžΆαž›αž“αŸαŸ‡αž₯αž‘αžΌαžœαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžšαžŸαŸαžšαž‡αžΆ hardcode main.py αž§αž‘αžΆαž αžšαžŽαŸαžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†) αŸ” αž’αž»αž„αž‘αžΈαž˜αž½αž™αž“αžΉαž„αžαŸ’αžšαžΌαžœαž€αžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαŸ‚αž€αžΆαžšαžŠαžΆαž€αŸ‹αž±αŸ’αž™αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡ αž’αž»αž„αž‘αžΈαž–αžΈαžšαž‚αžΊαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž”αŸ’αžšαž’αž”αŸ‹αŸ”
  5. αž”αž„αŸ’αž€αžΎαž αž‚αžŽαž“αžΈαžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αž•αŸ’αžαž›αŸ‹αž±αŸ’αž™αž‚αžΆαžαŸ‹αž“αžΌαžœαžαž½αž“αžΆαž‘αžΈαž˜αž½αž™αŸ” editorαž“αž·αž„αž‘αž‘αž½αž›αž”αžΆαž“αž–αŸαžαŸŒαž˜αžΆαž“αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž‹αž·αžαž·αžœαž“αŸ’αžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžœαžΆαŸ” {KEY ID} ΠΈ {KEY VALUE} - αž™αžΎαž„αž“αžΉαž„αž”αŸ’αžšαžΎαž–αž½αž€αžœαžΆαžŠαžΎαž˜αŸ’αž”αžΈαž€αžαŸ‹αžαŸ’αžšαžΆαžŸαŸ’αžαžΆαž“αž—αžΆαž–αž“αŸƒαž€αžΆαžšαžŸαž“αŸ’αž‘αž“αžΆαŸ” αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸαŸ‡αž‚αžΊαžαŸ’αžšαžΌαžœαž€αžΆαžšαžŠαžΎαž˜αŸ’αž”αžΈαž±αŸ’αž™αž˜αž»αžαž„αžΆαžšαž–αžΈ Ya.Cloud αž’αžΆαž…αž…αžΌαž›αž”αŸ’αžšαžΎαž€αžΆαžšαž•αŸ’αž‘αž»αž€αž–αžΈ Ya.Cloud αŸ” αžαŸ’αž„αŸƒαžŽαžΆαž˜αž½αž™ αžαŸ’αž‰αž»αŸ†αžŸαž„αŸ’αžƒαžΉαž˜αžαžΆ αž€αžΆαžšαž’αž“αž»αž‰αŸ’αž‰αžΆαžαž“αžΉαž„αž€αŸ’αž›αžΆαž™αž‘αŸ…αž‡αžΆαžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž· αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αŸαž›αž“αŸαŸ‡αŸ”
  6. (αžŸαŸ’αžšαŸαž…αž…αž·αžαŸ’αž) αžŠαŸ†αž‘αžΎαž„ αž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹αž”αž“αŸ’αž‘αžΆαžαŸ‹αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ yc. αž’αŸ’αž“αž€αž€αŸαž’αžΆαž…αž”αž„αŸ’αž€αžΎαžαž˜αž»αžαž„αžΆαžšαžαžΆαž˜αžšαž™αŸˆαž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹αž‚αŸαž αž‘αŸ†αž–αŸαžšαž”αžΆαž“αžŠαŸ‚αžš αž”αŸ‰αž»αž“αŸ’αžαŸ‚ CLI αž‚αžΊαž›αŸ’αž’αž–αŸ’αžšαŸ„αŸ‡αž€αžΆαžšαž…αŸ’αž“αŸƒαž”αŸ’αžšαžŒαž·αžαž‚αŸ’αžšαž”αŸ‹αž”αŸ’αžšαž—αŸαž‘αž›αŸαž…αž‘αžΎαž„αž“αŸ…αž€αŸ’αž“αž»αž„αžœαžΆαž›αžΏαž“αž‡αžΆαž„αž˜αž»αž“αŸ”
  7. αž₯αž‘αžΌαžœαž“αŸαŸ‡αž’αŸ’αž“αž€αž’αžΆαž…αžšαŸ€αž”αž…αŸ†αž€αžΆαžšαž‡αž½αž”αž”αŸ’αžšαž‡αž»αŸ†αž‚αŸ’αž“αžΆαž“αŸƒαž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™: αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž›αžΎαž”αž“αŸ’αž‘αžΆαžαŸ‹αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž–αžΈαžαžαž‡αžΆαž˜αž½αž™αž§αž‘αžΆαž αžšαžŽαŸαž‡αŸ†αž“αžΆαž‰ make all. αž”αžŽαŸ’αžŽαžΆαž›αŸαž™αž˜αž½αž™αž”αžΆαž…αŸ‹ (αž—αžΆαž‚αž…αŸ’αžšαžΎαž“αžŠαžΌαž…αž’αž˜αŸ’αž˜αžαžΆ αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹) αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαŸ†αž‘αžΎαž„αž“αŸ…αž€αŸ’αž“αž»αž„αžαžαž―αž€αžŸαžΆαžš dist.
  8. αž”αŸ†αž–αŸαž‰αž”αŸŠαž·αž…αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„αž€αž“αŸ’αž›αŸ‚αž„αž•αŸ’αž‘αž»αž€αžœαžαŸ’αžαž» (αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„αž’αž»αž„ {BUCKET NAME}) αž”αŸαžŽαŸ’αžŽαžŸαžΆαžšαžŠαŸ‚αž›αž‘αž‘αž½αž›αž”αžΆαž“αž“αŸ…αž‡αŸ†αž αžΆαž“αž˜αž»αž“αŸ” dist.zip. αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž…αž„αŸ‹αž”αžΆαž“ αž’αŸ’αž“αž€αž€αŸαž’αžΆαž…αž’αŸ’αžœαžΎαžœαžΆαž”αžΆαž“αž–αžΈαž”αž“αŸ’αž‘αžΆαžαŸ‹αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ αž§αž‘αžΆαž αžšαžŽαŸαžŠαŸ„αž™αž”αŸ’αžšαžΎ αž’αŸαžŸαž’αŸαžŸαžŸαŸŠαžΈαž’αžΆαž™.
  9. αž”αž„αŸ’αž€αžΎαžαž˜αž»αžαž„αžΆαžš serverless αžαžΆαž˜αžšαž™αŸˆαž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹αž”αžŽαŸ’αžŠαžΆαž‰ αž¬αž”αŸ’αžšαžΎαž§αž”αž€αžšαžŽαŸαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ yc. αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž§αž”αž€αžšαžŽαŸαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž“αžΉαž„αž˜αžΎαž›αž‘αŸ…αžŠαžΌαž…αž“αŸαŸ‡αŸ–

yc serverless function version create
    --function-name=horoscope
    --environment=AWS_ACCESS_KEY_ID={KEY ID},AWS_SECRET_ACCESS_KEY={KEY VALUE}
    --runtime=python37
    --package-bucket-name={BUCKET NAME}
    --package-object-name=dist.zip
    --entrypoint=main.alice_handler
    --memory=128M
    --execution-timeout=3s

αž“αŸ…αž–αŸαž›αž”αž„αŸ’αž€αžΎαžαž˜αž»αžαž„αžΆαžšαžŠαŸ„αž™αžŠαŸƒ αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ†αž–αŸαž‰αžαžΆαž˜αžšαž”αŸ€αž”αžŠαžΌαž…αž‚αŸ’αž“αžΆαŸ”

αž₯αž‘αžΌαžœαž“αŸαŸ‡αž˜αž»αžαž„αžΆαžšαžŠαŸ‚αž›αž’αŸ’αž“αž€αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžΆαž€αž›αŸ’αž”αž„αžαžΆαž˜αžšαž™αŸˆαž€αž»αž„αžŸαžΌαž›αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸ αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž”αžΆαž“αž”αž‰αŸ’αž…αž”αŸ‹ αž“αž·αž„αž”αŸ„αŸ‡αž–αž»αž˜αŸ’αž–αž‡αŸ†αž“αžΆαž‰αŸ”

αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž‡αŸ†αž“αžΆαž‰αž…αŸ’αž”αžΆαžŸαŸ‹αž›αžΆαžŸαŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Alice αž›αžΎαž˜αž»αžαž„αžΆαžšαž‚αŸ’αž˜αžΆαž“αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαžšαž”αžŸαŸ‹ Yandex.Cloud αž“αž·αž„ Python

αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž“αŸ…αž€αŸ’αžšαŸ„αž˜αž€αŸ’αžšαžŽαžΆαžαŸ‹

makefile αž–αž·αžβ€‹αž‡αžΆβ€‹αž˜αžΆαž“β€‹αžŸαŸ’αž‚αŸ’αžšαžΈαž”β€‹αžŸαžΆαž˜αž‰αŸ’αž‰β€‹αž‚αž½αžšαžŸαž˜β€‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹β€‹αž€αžΆαžšβ€‹αžŠαŸ†αž‘αžΎαž„β€‹αž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™β€‹ αž“αž·αž„β€‹αžŠαžΆαž€αŸ‹β€‹αž–αž½αž€αžœαžΆβ€‹αž‘αŸ…αž€αŸ’αž“αž»αž„β€‹αž”αžŽαŸ’αžŽαžŸαžΆαžšαŸ” dist.zip, αž’αŸ’αžœαžΈαž˜αž½αž™β€‹αžŠαžΌαž…αž“αŸαŸ‡:

mkdir -p dist/
pip3 install -r requirements.txt --target dist/ 
cp main.py dist/main.py
cp form.yaml dist/form.yaml
cd dist && zip --exclude '*.pyc' -r ../dist.zip ./*

αž“αŸ…αžŸαž›αŸ‹αž‚αžΊαž‡αžΆαž§αž”αž€αžšαžŽαŸαžŸαžΆαž˜αž‰αŸ’αž‰αž˜αž½αž™αž…αŸ†αž“αž½αž“αžŠαŸ‚αž›αžšαž»αŸ†αž€αŸ’αž“αž»αž„αž”αžŽαŸ’αžŽαžΆαž›αŸαž™ tgalice. αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸƒαž€αžΆαžšαž”αŸ†αž–αŸαž‰αž‘αž·αž“αŸ’αž“αž“αŸαž™αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž·αž–αžŽαŸŒαž“αžΆαžŠαŸ„αž™ config form.yaml:

form_name: 'horoscope_form'
start:
  regexp: 'старт|Π½Π°Ρ‡(Π°Ρ‚ΡŒ|Π½ΠΈ)'
  suggests:
    - Π‘Ρ‚Π°Ρ€Ρ‚
fields:
  - name: 'name'
    question: ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, Π½Π°Π·ΠΎΠ²ΠΈΡ‚Π΅ своё имя.
  - name: 'year'
    question: Π’Π΅ΠΏΠ΅Ρ€ΡŒ скаТитС ΠΌΠ½Π΅ Π³ΠΎΠ΄ вашСго роТдСния. Волько Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Ρ†ΠΈΡ„Ρ€Ρ‹, Π½ΠΈΡ‡Π΅Π³ΠΎ лишнСго.
    validate_regexp: '^[0-9]{4}$'
    validate_message: ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Π΅Ρ‰Ρ‘ Ρ€Π°Π·. НазовитС Π³ΠΎΠ΄ вашСго роТдСния - Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Ρ†ΠΈΡ„Ρ€Ρ‹.
  - name: 'month'
    question: Π—Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ! Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π°Π·ΠΎΠ²ΠΈΡ‚Π΅ мСсяц вашСго роТдСния.
    options:
      - ΡΠ½Π²Π°Ρ€ΡŒ
     ...
      - Π΄Π΅ΠΊΠ°Π±Ρ€ΡŒ
    validate_message: Π’ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π°Π·Π²Π°Π»ΠΈ, Π½Π΅ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° мСсяц. ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, Π½Π°Π·ΠΎΠ²ΠΈΡ‚Π΅ мСсяц вашСго роТдСния, Π±Π΅Π· Π΄Ρ€ΡƒΠ³ΠΈΡ… слов.
  - name: 'day'
    question: ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ! НаконСц, Π½Π°Π·ΠΎΠ²ΠΈΡ‚Π΅ ΠΌΠ½Π΅ Π΄Π°Ρ‚Ρƒ вашСго роТдСния - Ρ‚ΠΎΠ»ΡŒΠΊΠΎ число, всСго ΠΎΠ΄Π½Π° ΠΈΠ»ΠΈ Π΄Π²Π΅ Ρ†ΠΈΡ„Ρ€Ρ‹.
    validate_regexp: '[0123]?d$'
    validate_message: ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Π΅Ρ‰Ρ‘ Ρ€Π°Π·. Π’Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π½Π°Π·Π²Π°Ρ‚ΡŒ число своСго роТдСния (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄Π²Π°Π΄Ρ†Π°Ρ‚ΠΎΠ΅); это ΠΎΠ΄Π½Π° ΠΈΠ»ΠΈ Π΄Π²Π΅ Ρ†ΠΈΡ„Ρ€Ρ‹.

αžαŸ’αž“αžΆαž€αŸ‹ python αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αžΆαžšαž„αžΆαžšαž‰αŸ‚αž€αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž“αŸαŸ‡ αž“αž·αž„αž‚αžŽαž“αžΆαž›αž‘αŸ’αž’αž•αž›αž…αž»αž„αž€αŸ’αžšαŸ„αž™

class CheckableFormFiller(tgalice.dialog_manager.form_filling.FormFillingDialogManager):
    SIGNS = {
        'ΡΠ½Π²Π°Ρ€ΡŒ': 'ΠšΠΎΠ·Π΅Ρ€ΠΎΠ³',
        ...
    }

    def handle_completed_form(self, form, user_object, ctx):
        response = tgalice.dialog_manager.base.Response(
            text='Бпасибо, {}! Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ: Π²Π°ΠΌ {} Π»Π΅Ρ‚, ΠΈ Π²Ρ‹ {}. n'
                 'Π’ΠΎΡ‚ это Π²Π°ΠΌ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΏΠΎΠ²Π΅Π·Π»ΠΎ! Π—Π²Ρ‘Π·Π΄Ρ‹ говорят Π²Π°ΠΌ: {}'.format(
                form['fields']['name'],
                2019 - int(form['fields']['year']),
                self.SIGNS[form['fields']['month']],
                random.choice(FORECASTS),
            ),
            user_object=user_object,
        )
        return response

αž…αŸ’αž”αžΆαžŸαŸ‹αž‡αžΆαž„αž“αŸαŸ‡αž‘αŸ…αž‘αŸ€αž αžαŸ’αž“αžΆαž€αŸ‹αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“ FormFillingDialogManager αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αžΌαž›αžšαž½αž˜αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αŸ†αž–αŸαž‰ "αž‘αž˜αŸ’αžšαž„αŸ‹" αž“αž·αž„αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž“αŸƒαžαŸ’αž“αžΆαž€αŸ‹αž€αž»αž˜αžΆαžš handle_completed_form αž”αŸ’αžšαžΆαž”αŸ‹αž–αžΈαž’αŸ’αžœαžΈαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž’αŸ’αžœαžΎαž“αŸ…αž–αŸαž›αž“αžΆαž„αžšαž½αž…αžšαžΆαž›αŸ‹αŸ”

αž”αž“αŸ’αžαŸ‚αž˜αž–αžΈαž›αžΎαž›αŸ†αž αžΌαžšαžŸαŸ†αžαžΆαž“αŸ‹αž“αŸƒαž€αžΆαžšαžŸαž“αŸ’αž‘αž“αžΆαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž“αŸαŸ‡ αžœαžΆαž€αŸαž…αžΆαŸ†αž”αžΆαž…αŸ‹αžŠαžΎαž˜αŸ’αž”αžΈαžŸαŸ’αžœαžΆαž‚αž˜αž“αŸαž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ αž€αŸαžŠαžΌαž…αž‡αžΆαž€αžΆαžšαž…αŸαž‰αž‡αŸ†αž“αž½αž™αž›αžΎαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ "αž‡αŸ†αž“αž½αž™" αž“αž·αž„αžŠαŸ„αŸ‡αž›αŸ‚αž„αž–αžΈαž‡αŸ†αž“αžΆαž‰αž“αŸ…αž›αžΎαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ "αž…αŸαž‰" αŸ” αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž“αŸαŸ‡αž“αŸ…αž€αŸ’αž“αž»αž„ tgalice αžœαžΆαž€αŸαž˜αžΆαž“αž‚αŸ†αžšαžΌαž•αž„αžŠαŸ‚αžš αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž”αŸ’αžšαž’αž”αŸ‹αž‘αžΆαŸ†αž„αž˜αžΌαž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αžŠαŸ„αž™αž”αŸ†αžŽαŸ‚αž€αŸ–

dm = tgalice.dialog_manager.CascadeDialogManager(
    tgalice.dialog_manager.GreetAndHelpDialogManager(
        greeting_message=DEFAULT_MESSAGE,
        help_message=DEFAULT_MESSAGE,
        exit_message='Π”ΠΎ свидания, ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚Π΅ Π² Π½Π°Π²Ρ‹ΠΊ "ΠΠΉΡ‚ΠΈΡˆΠ½Ρ‹ΠΉ гороскоп" Π΅Ρ‰Ρ‘!'
    ),
    CheckableFormFiller(`form.yaml`, default_message=DEFAULT_MESSAGE)
)

CascadeDialogManager αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž™αŸ‰αžΆαž„αžŸαžΆαž˜αž‰αŸ’αž‰αŸ– αžœαžΆαž–αŸ’αž™αžΆαž™αžΆαž˜αž’αž“αž»αžœαžαŸ’αžαž…αŸ†αž–αŸ„αŸ‡αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž“αŸƒαž€αžΆαžšαžŸαž“αŸ’αž‘αž“αžΆ αžšαžΆαž›αŸ‹αž’αžΆαžαž»αž•αŸ’αžŸαŸ†αžšαž”αžŸαŸ‹αžœαžΆαž‡αžΆαžœαŸαž“ αž αžΎαž™αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž•αŸ’αž“αŸ‚αž€αž–αžΆαž€αŸ‹αž–αŸαž“αŸ’αž’αžŠαŸ†αž”αžΌαž„αŸ”

αž‡αžΆαž€αžΆαžšαž†αŸ’αž›αžΎαž™αžαž”αž‘αŸ…αž“αžΉαž„αžŸαžΆαžšαž“αžΈαž˜αž½αž™αŸ— αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž”αŸ’αžšαž’αž”αŸ‹αžαŸ’αžšαž‘αž”αŸ‹αžœαžαŸ’αžαž» python ResponseαžŠαŸ‚αž›αž’αžΆαž…αž”αŸ†αž”αŸ’αž›αŸ‚αž„αž‘αŸ…αž‡αžΆαž’αžαŸ’αžαž”αž‘αž’αž˜αŸ’αž˜αžαžΆ αž¬αž‡αžΆαžŸαžΆαžšαž“αŸ…αž€αŸ’αž“αž»αž„ Alice ឬ Telegram - αž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαž€αž“αŸ’αž›αŸ‚αž„αžŠαŸ‚αž› bot αž€αŸ†αž–αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ” αžœαžΆαž€αŸαž˜αžΆαž“αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž“αŸƒαž”αŸ’αžšαž’αž”αŸ‹ αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž€αžΆαžšαžšαž€αŸ’αžŸαžΆαž‘αž»αž€αŸ” αž•αŸ’αž‘αŸ‡αž”αžΆαž™αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αžŠαŸ„αž™αžαŸ’αž“αžΆαž€αŸ‹αž•αŸ’αžŸαŸαž„αž‘αŸ€αž DialogConnectorαžŠαžΌαž…αŸ’αž“αŸαŸ‡αžŸαŸ’αž‚αŸ’αžšαžΈαž”αž•αŸ’αž‘αžΆαž›αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž‡αŸ†αž“αžΆαž‰αž›αžΎαž˜αž»αžαž„αžΆαžš Yandex αž˜αžΎαž›αž‘αŸ…αžŠαžΌαž…αž“αŸαŸ‡αŸ–

...
session = boto3.session.Session()
s3 = session.client(
    service_name='s3',
    endpoint_url='https://storage.yandexcloud.net',
    aws_access_key_id=os.environ['AWS_ACCESS_KEY_ID'],
    aws_secret_access_key=os.environ['AWS_SECRET_ACCESS_KEY'],
    region_name='ru-central1',
)
storage = tgalice.session_storage.S3BasedStorage(s3_client=s3, bucket_name='tgalice-test-cold-storage')
connector = tgalice.dialog_connector.DialogConnector(dialog_manager=dm, storage=storage)
alice_handler = connector.serverless_alice_handler

αžŠαžΌαž…αžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αžΆαž…αžƒαžΎαž‰ αž€αžΌαžŠαž“αŸαŸ‡αž—αžΆαž‚αž…αŸ’αžšαžΎαž“αž”αž„αŸ’αž€αžΎαžαž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ…αž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹ Object Storage S3 αŸ” αžšαž”αŸ€αž”αžŠαŸ‚αž›αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹αž’αŸ’αž“αž€αž’αžΆαž…αž’αžΆαž“ αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΌαžŠ tgalice.
αž”αž“αŸ’αž‘αžΆαžαŸ‹αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž”αž„αŸ’αž€αžΎαžαž˜αž»αžαž„αžΆαžšαž˜αž½αž™αŸ” alice_handler - αž˜αž½αž™αžŠαŸ‚αž›αž™αžΎαž„αž”αž‰αŸ’αž‡αžΆαž±αŸ’αž™αž‘αžΆαž‰ Yandex.Cloud αž“αŸ…αž–αŸαž›αž™αžΎαž„αž€αŸ†αžŽαžαŸ‹αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžš --entrypoint=main.alice_handler.

αžαžΆαž˜αž–αž·αžαž‘αŸ…αž‚αžΊαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ” Makefiles for building, S3-like Object Storage for context storage, and a python library tgalice. αžšαž½αž˜αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸ αž“αž·αž„αž€αžΆαžšαž”αž‰αŸ’αž…αŸαž‰αž˜αžαž·αžšαž”αžŸαŸ‹ python αžŠαŸ‚αž›αž˜αž·αž“αž˜αžΆαž“ server αž“αŸαŸ‡αž‚αžΊαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαžΆαž“αŸ‹αžŠαžΎαž˜αŸ’αž”αžΈαž’αž—αž·αžœαžŒαŸ’αžαž‡αŸ†αž“αžΆαž‰αžšαž”αžŸαŸ‹αž˜αž“αž»αžŸαŸ’αžŸαžŠαŸ‚αž›αž˜αžΆαž“αžŸαž»αžαž—αžΆαž–αž›αŸ’αž’αŸ”

αž’αŸ’αž“αž€αž’αžΆαž…αžŸαž½αžšαžαžΆαž αŸαžαž»αž’αŸ’αžœαžΈαž”αžΆαž“αž‡αžΆαž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž€αžΆαžšαž”αž„αŸ’αž€αžΎαž tgalice? αž›αŸαžαž€αžΌαžŠαž‚αž½αžšαž±αŸ’αž™αž’αž»αž‰αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αž•αŸ’αž‘αŸαžš JSON αž–αžΈαžŸαŸ†αžŽαžΎαž‘αŸ…αž€αžΆαžšαž†αŸ’αž›αžΎαž™αžαž” αž“αž·αž„αž–αžΈαž€αžΆαžšαž•αŸ’αž‘αž»αž€αž‘αŸ…αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ† αž“αž·αž„αžαžΆαž„αž€αŸ’αžšαŸ„αž™αžŸαŸ’αžαž·αžαž“αŸ…αž€αŸ’αž“αž»αž„αžœαžΆαŸ” αžœαžΆαž€αŸαž˜αžΆαž“αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž’αž˜αŸ’αž˜αžαžΆαž•αž„αžŠαŸ‚αžš αž˜αž»αžαž„αžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž™αž›αŸ‹αžŠαžΉαž„αžαžΆ "αž€αž»αž˜αŸ’αž—αŸˆ" αž‚αžΊαžŸαŸ’αžšαžŠαŸ€αž„αž‘αŸ…αž“αžΉαž„ "αž€αž»αž˜αŸ’αž—αŸˆ" αž“αž·αž„ NLU αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž€αŸ’αžšαžΈαž€αŸ’αžšαŸ” αž™αŸ„αž„αžαžΆαž˜αž‚αŸ†αž“αž·αžαžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ† αž“αŸαŸ‡αž‚αž½αžšαžαŸ‚αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαžΆαž“αŸ‹αž αžΎαž™ αžŠαžΎαž˜αŸ’αž”αžΈαž’αžΆαž…αž‚αžΌαžšαž‚αŸ†αžšαžΌαž‡αŸ†αž“αžΆαž‰αž€αŸ’αž“αž»αž„αž―αž€αžŸαžΆαžš yaml αžŠαŸ„αž™αž˜αž·αž“αž˜αžΆαž“αž€αžΆαžšαžšαŸ†αžαžΆαž“αžŠαž›αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž›αž˜αŸ’αž’αž·αžαž”αž…αŸ’αž…αŸαž€αž‘αŸαžŸαŸ”

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž…αž„αŸ‹αž”αžΆαž“ NLU αž’αŸ’αž„αž“αŸ‹αž’αŸ’αž„αžšαž‡αžΆαž„αž“αŸαŸ‡ αž’αŸ’αž“αž€αž’αžΆαž…αžœαžΈαžŸαžœαžΆαž‘αŸ…αžαžΆαž˜αž‡αŸ†αž“αžΆαž‰αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ” αžšαŸ‰αžΆαžŸαžΆαŸ” ឬ DeepPavlovαž”αŸ‰αž»αž“αŸ’αžαŸ‚αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„αž–αž½αž€αžœαžΆαž“αžΉαž„αžαž˜αŸ’αžšαžΌαžœαž±αŸ’αž™αž˜αžΆαž“αž€αžΆαžšαžšαžΆαŸ†αž”αž“αŸ’αžαŸ‚αž˜αž‡αžΆαž˜αž½αž™ tambourine αž‡αžΆαž–αž·αžŸαŸαžŸαž“αŸ…αž›αžΎ serverless αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž˜αž·αž“αž˜αžΆαž“αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαžαžΆαž…αž„αŸ‹αžŸαžšαžŸαŸαžšαž€αžΌαžŠαž‘αžΆαž›αŸ‹αžαŸ‚αžŸαŸ„αŸ‡ αž’αŸ’αž“αž€αž‚αž½αžšαžαŸ‚αž”αŸ’αžšαžΎαž’αŸ’αž“αž€αž”αž„αŸ’αž€αžΎαžαž”αŸ’αžšαž—αŸαž‘αžšαžΌαž”αž—αžΆαž– αž’αžΆαž˜αžΈαž‘αžΌαž‡αžΈαž€. αž“αŸ…αž–αŸαž›αž”αž„αŸ’αž€αžΎαž tgalice αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž‚αž·αžαž’αŸ†αž–αžΈαž”αŸ’αžšαž—αŸαž‘αž“αŸƒαž•αŸ’αž›αžΌαžœαž˜αž’αŸ’αž™αž˜αž˜αž½αž™αž…αŸ†αž“αž½αž“αŸ” αžαŸ„αŸ‡αž˜αžΎαž›αžαžΆαž˜αžΆαž“αž’αŸ’αžœαžΈαž€αžΎαžαž‘αžΎαž„αŸ”

αž₯αž‘αžΌαžœαž“αŸαŸ‡ αžŸαžΌαž˜αž…αžΌαž›αžšαž½αž˜ αž€αžΆαžšαž‡αž‡αŸ‚αž€αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž‡αŸ†αž“αžΆαž‰ Aliy, αž’αžΆαž“ αž―αž€αžŸαžΆαžšαž“αž·αž„αž”αž„αŸ’αž€αžΎαžαž—αžΆαž–αž’αžŸαŸ’αž…αžΆαžšαŸ’αž™ αž‡αŸ†αž“αžΆαž‰!

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹