Skip to content

ru How to Get Dialogues from the Database

dilyararimovna edited this page May 9, 2023 · 1 revision

Как получить диалоги из базы данных

Диалоги хранятся в базе данных 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)