#python #json #apache #flask #ibm-watson
#python #json #apache #flask #ibm-watson
Вопрос:
Я пытаюсь заставить Watson Assistant вернуть ответ JSON от внешнего API (сервер Ubuntu 18.04), работающий на Apache2 и Flask для Python. Когда я проверяю ответ в Watson Assistant, я получаю эту ошибку {"response_code":405,"message":"Webhook response is not JSON Object","content_type":"text/html; charset=utf-8"}.
Я убедился, что Flask передает ответ в формате JSON response = app.response_class(response=json.dumps(x), status=200, mimetype="application/json")
и с помощью Apache2
Я искал везде и не могу найти ответ на вопрос, почему Watson не принимает мой JSON.
Есть ли что-то, чего мне не хватает?
Спасибо
Комментарии:
1. Измените тему и теги на вопрос о том, как вернуть JSON в настройках Apache / Flask.
2. Добавьте некоторые записи в свое приложение flask, чтобы убедиться, что вызывается конечная точка и возврат, которые, по вашему мнению, вызываются, на самом деле вызываются.
3. У меня такая же проблема. Я подготовил простой PHP-сервер, который просто записывает что-то в файл. Этот скрипт никогда не вызывается из IBM. Ошибка в assistant такая же, как указано выше: 405. @gideon-weiss Вам удалось это исправить, пожалуйста?
4. Я работаю на бесплатном облегченном плане. Может ли это как-то повлиять на невозможность использования внешнего сервера webhook?
5. Нет, в итоге я отказался от проекта по другим причинам …. все же хотелось бы знать, как это сделать…
Ответ №1:
Я запускаю это на своем собственном сервере Ubuntu. Насколько я могу судить, Watson Assistant любит, чтобы ваши параметры анализировались следующим образом… Немного необычно.
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Params(BaseModel):
# For your parameters. Eg
# time: str
# for non-required. Eg
# age: int = 0
@app.post("/")
async def root(req_data: Params):
if req_data.age == 18:
return {"message": "You are 18!"}
Комментарии:
1. Большое спасибо! Это работает! 🙂 Тем не менее, я до сих пор не знаю, почему мой PHP-сервер не работает, и это. Я не вижу разницы в ответе и заголовках: « <?php header(«Content-Type: application / json»); echo ‘{«message»: «Вам 18!»}’; заголовок («Content-Type: application / json»);
2. Хорошо, наконец, я нашел проблему! Мой хостинг-провайдер PHP блокировал POST-запрос с иностранного IP-адреса (IBM). О, такая глупая проблема. Я изменил настройки хостинга, и теперь он работает и на PHP! 🙂