ru How to Get Dialogues from the Database
Диалоги хранятся в базе данных mongodb. Таким образом, чтобы получить доступ к диалогам, которые ведутся с вашим чат-ботом, было бы проще использовать специальные конечные точки, предоставляемые DeepPavlov Dream.
Внимание! Диалоги можно скачать только при размещении агента по http НЕ через Telegram! Если вы размещаете агент через Telegram, пересоберите агент с помощью http и используйте метод, описанный ниже.
Учтите, что агент размещен локально (даже если все компоненты проксированы, агент и монго всегда локальны) и доступен по адресу http://0.0.0.0:4242
. Кстати, для общения с чат-ботом http://0.0.0.0:4242/chat
можно использовать веб-интерфейс. Идентификаторы проведенных диалогов доступны по адресу http://0.0.0.0:4242/api/dialogs/
:
import requests
requests.get("http://0.0.0.0:4242/api/dialogs/").json()
>>{'dialog_ids': ['blablaidentifier', ...], 'next': None}
Теперь мы можем получить полное сохраненное состояние диалога с идентификатором blablaidentifier как http://0.0.0.0:4242/api/dialogs/blablaidentifier
.
Наконец, можно использовать следующую функцию для локального получения и сохранения диалогов:
import json
import requests
from datetime import date, datetime
def get_database_from_agent(agent_url="http://0.0.0.0:4242", fname=None):
DATABASE_URL = f"{agent_url}/api/dialogs/"
database = requests.get(DATABASE_URL).json()
print(database)
timestamp = datetime.now().timestamp()
date_time = datetime.fromtimestamp(timestamp)
str_date_time= date_time.strftime("%d%m%Y-%H%M%S")
dialogs = []
for dialog_id in database["dialog_ids"]:
dialogs += [requests.get(f"{DATABASE_URL}{dialog_id}").json()]
if fname:
with open(fname, "w") as f:
json.dump(dialogs, f)
else:
with open(f"loaded_database_{str_date_time}.json", "w") as f:
json.dump(dialogs, f)