Estoy trabajando con API de eventos flojos. Estoy recibiendo eventos en los eventos suscritos. Pero cómo enviar responder usando solicitudes de python. slack envía el mismo evento nuevamente después de unos segundos, ¿qué json necesito enviar de regreso a slack como respuesta para dejar de obtener la misma respuesta? Si conoce el código, muchas gracias de antemano :)

@flask.route("/slack_webhook")
def slack_webhook():
    print("Slack Webhook.....!!!")

    data = json.loads(request.data.decode("utf-8"))
    if 'challenge' in data:
    return(data['challenge'])

    if data['type'] == 'event_callback':
        response = make_response("", 200)
        response.headers['X-Slack-No-Retry'] = 1
        print("returning response")
        return response

    else:
        slack_event_handler.delay(data)
4
chetan tamboli 7 sep. 2018 a las 17:05

3 respuestas

La mejor respuesta

Devolver directamente el estado si recibió correctamente la información requerida.

return 'HTTP 200 OK'
1
chetan tamboli 9 sep. 2018 a las 05:49

Todo lo que necesita hacer es responder a la solicitud de Slack directamente con un HTTP 200 OK en 3 segundos. Esto sucederá automáticamente si su aplicación finaliza dentro de ese tiempo.

En caso de que necesite más tiempo de procesamiento, debe considerar poner en cola el evento para un procesamiento posterior o iniciar un proceso asincrónico para el procesamiento.

Esto es lo que se dice en la documentación:

Su aplicación debe responder a la solicitud de evento con un HTTP 2xx en tres segundos. Si no es así, consideraremos que el intento de entrega del evento falló. Después de una falla, volveremos a intentarlo tres veces, retrocediendo exponencialmente.

Mantenga una tasa de éxito de respuesta de al menos el 5% de los eventos por 60 minutos para evitar la desactivación automática.

Responda a los eventos con un HTTP 200 OK tan pronto como pueda. Evite realmente procesar y reaccionar a eventos dentro del mismo proceso. Implemente una cola para manejar eventos entrantes después de que se reciben.

2
Erik Kalkoken 7 sep. 2018 a las 17:35

Prueba esto:

return {"isBase64Encoded": True, "statusCode": 200, "headers": { }, "body": ""}
0
Yash Nag 4 jul. 2019 a las 08:20