Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/avidale/dialogic

Yet another common Python wrapper for Alice and Salut skills and bots in Telegram, VK, and Facebook
https://github.com/avidale/dialogic

Last synced: 3 months ago
JSON representation

Yet another common Python wrapper for Alice and Salut skills and bots in Telegram, VK, and Facebook

Awesome Lists containing this project

README

        

# dialogic
[![PyPI version](https://badge.fury.io/py/dialogic.svg)](https://badge.fury.io/py/dialogic)

[readme in english](https://github.com/avidale/dialogic/blob/master/README_en.md)

Это очередная обёртка на Python для навыков
[Алисы](https://yandex.ru/dev/dialogs/alice/doc/about.html) и
[Салюта](https://salute.sber.ru/smartmarket/dev/) (Сбер) и ботов
в Telegram [*](#footnote1), VK, и Facebook.

Она позволяет как быстро писать прототипы ботов для разных платформ,
так и масштабировать их, когда кода и сценариев становится много.

Ранее пакет был известен как [tgalice](https://github.com/avidale/tgalice).

Установка [пакета](https://pypi.org/project/dialogic/): `pip install dialogic`

## Пример кода

Ниже описан бот, который на приветствие отвечает приветствием,
а на все остальные фразы - заглушкой по умолчанию.

```python
from dialogic.dialog_connector import DialogConnector
from dialogic.dialog_manager import TurnDialogManager
from dialogic.server.flask_server import FlaskServer
from dialogic.cascade import DialogTurn, Cascade

csc = Cascade()

@csc.add_handler(priority=10, regexp='(hello|hi|привет|здравствуй)')
def hello(turn: DialogTurn):
turn.response_text = 'Привет! Это единственная условная ветка диалога.'

@csc.add_handler(priority=1)
def fallback(turn: DialogTurn):
turn.response_text = 'Я вас не понял. Скажите мне "Привет"!'
turn.suggests.append('привет')

dm = TurnDialogManager(cascade=csc)
connector = DialogConnector(dialog_manager=dm)
server = FlaskServer(connector=connector)

if __name__ == '__main__':
server.parse_args_and_run()
```

Чтобы запустить приложение как веб-сервис, достаточно запустить данный скрипт.

Если приложение доступно по адресу `{BASE_URL}`,
то вебхуки для Алисы, Салюта и Facebook будут доступны, соотвественно,
на `{BASE_URL}/alice/`, `{BASE_URL}/salut/`, and `{BASE_URL}/fb/`
(при желании, адреса можно изменить).
Вебхук для бота в Telegram будет установлен автоматически,
если выставить в переменную окружения `TOKEN` значение,
полученное от [@BotFather](https://t.me/BotFather).

Чтобы протестировать приложение локально, можно вызвать его с аргументами:
* `--cli` - диалог с ботом в командной строке, полностью онлайн
* `--poll` - запуск бота в Telegram в режиме long polling
* `--ngrok` - локальный запуск с использованием
[ngrok](https://ngrok.com/) [**](#footnote2),
чтобы создать туннель из вашего компьютера во внешний Интернет.
Удобный способ тестировать навыки Алисы.

Приложение запускается на порте, взятом из переменной окружения `PORT` (по умолчанию 5000).
Для правильной работы с вебхуками нужно будет также выставить переменную окружения `BASE_URL`, описывающую префикс урла, на который будут приходить запросы
(например `https://myapp.herokuapp.com/`).

Чтобы протестировать работу API для Алисы, не подключая навык, можно сделать такой POST-запрос с помощью CURL:
```
curl http://localhost:5000/alice/ -X POST -H "Content-Type: application/json" -d '{"session": {"user_id":"123"}, "request": {"command": "hi"}, "version":"1.0"}'
```
на Windows при этом придется заэскейпить кавычки (ибо там работают [только двойные](https://mkyong.com/web/curl-post-json-data-on-windows/)), примерно так:
```
curl http://localhost:5000/alice/ -X POST -H "Content-Type: application/json" -d "{\"session\": {\"user_id\":\"123\"}, \"request\": {\"command\": \"hi\"}, \"version\":\"1.0\"}"
```
Подробнее про формат запроса для Алисы можно почитать [в её документации](https://yandex.ru/dev/dialogs/alice/doc/request.html).

## Больше возможностей

- Использование встроенных классификаторов интентов или сторонних средств NLU,
включая грамматики от Яндекса или любые доступные в Python модели.
- Подключение собственных поверхностей или настройка имеющихся.
- Логирование запросов и ответов для последующей аналитики.

Библиотека возможностей регулярно пополняется.

## Ресурсы и поддержка

В папе [examples](https://github.com/avidale/dialogic/tree/master/examples)
собраны примеры использования компонент и запуска ботов.

Вопросы можно задать в чате
[Dialogic.Digital support](https://t.me/joinchat/WOb48KC6I192zKZu) (Telegram).

* Обёртка для Telegram использует пакет
[pyTelegramBotAPI](https://github.com/eternnoir/pyTelegramBotAPI).

** Обёртка для ngrok была взята из пакета
[flask-ngrok](https://github.com/gstaff/flask-ngrok).