me4t10
@me4t10
Творческий)

Как вызвать функцию Python из JavaScript?

Здравствуйте!

Помогите, пожалуйста, решить следующую проблему.
Реализую простейший чат-бот с DialogFlow. На питоне подключаюсь к нему и получаю ответ по тексту пользователя.

Нужно из JavaScript вызвать функцию на Питоне, которая, в свою очередь должна вернуть обратно результат. Я так понимаю, нужно использовать Ajax, верно? Но как именно? Объясните, пожалуйста

Вот код на Питоне
import dialogflow_v2 as dialogflow 
from dialogflow_v2.types import TextInput, QueryInput
import os

def detect_intent_texts(project_id, session_id, texts, language_code):
    os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = 'tratata.json'
    session_client = dialogflow.SessionsClient()

    session = session_client.session_path(project_id, session_id)
    print('Session path: {}\n'.format(session))

    for text in texts:
        text_input = TextInput(text=text, language_code=language_code)
        query_input = QueryInput(text=text_input)
        response = session_client.detect_intent(session=session, query_input=query_input)

        print('Fulfillment text: {}\n'.format(response.query_result.fulfillment_text))

detect_intent_texts("token", "session_id", ["Здесь должнен быть текст, переданный из JS"], "ru")
  • Вопрос задан
  • 394 просмотра
Решения вопроса 1
@iddqda
network engineer, netdevops
Ну по сути тебе надо создать веб приложение
где бекенд будет вызывать твою готовую функцию, а на фронте форма из пары полей ввода и кнопки, на которую вешается обработчик на JS

для бекенда я бы использовал FastAPI
что-то типа такого:

from fastapi import FastAPI

app = FastAPI()

@app.get("/dialog/")
def read_item(message: str, lang: str = 'ru'):
    return {'message': detect_intent_texts(TOKEN, SESSION_ID, message, lang)


На фронте обычный JS fetch GET c параметрами (или POST, просто он чуть сложнее для бека)

document.querySelector("#button").addEventListener("click", (event) => {
    const msg = document.querySelector("#message").value;
    const lang = document.querySelector("#lang").value;

    fetch('/dialog/?' + new URLSearchParams({
        message: msg,
        lang: lang,
    }))
        .then((response) => {
            if (!response.ok) {
                throw new Error("HTTP error, status = " + response.status);
            }
            return response.json();
        })
        .then((data) => {
            alert(data.message);
        })
        .catch((error) => {
            alert(error);
        });
});


з.ы. у меня одноклассник был с таким именем
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы