Помощник Watson выдает ошибку при передаче webhook с внешнего сервера [нигде нет ответов]

#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! 🙂