Aller au contenu

Utiliser la réponse d'un webhook dans le webhook suivant

Exemple

Contexte

Dans notre exemple nous allons utiliser une API factice : Image docker : docker.canopsis.net/docker/community/fakeapi:latest .

Notre scénario comportera deux webhooks :

1 - Un premier webhook qui va appeler l'api avec l'action getObjectId pour récupérer l'id de l'objet.

fakeapi retourne le JSON ci dessous pour ce premier appel:

{"id": 42}

2 - Un second webhook qui va appeler l'api avec l'action getObjectById avec en paramètre l'id récupéré a l'étape précédente.

Note

Nous aurions aussi pu utiliser le format {{index .Header "Header-Name"}} pour récupérer le contenu d'un header de la réponse du webhook précédent.

Démarrage de l'api

Info

Attention vous devez avoir démarré une instance Canopsis sur la même machine pour réaliser cet exemple.

docker run --network=canopsis-pro_default --rm --name fakeapi docker.canopsis.net/docker/community/fakeapi:latest

Configuration

Envoyez la configuration à Canopsis avec cette requête :

curl -X POST -u root:root -H "Content-type: application/json" -d '{
    "name": "MultiStepScenario",
    "author": "root",
    "enabled": true,
    "disable_during_periods": [],
    "triggers": [
        "create",
        "changestate"
    ],
    "actions": [
        {
            "type": "webhook",
            "comment": "Step one of the api calls : Get the object ID",
            "parameters": {
                "declare_ticket": null,
                "request": {
                    "auth": null,
                    "headers": {},
                    "method": "GET",
                    "payload": "{\"action\": \"getObjectId\"}",
                    "skip_verify": true,
                    "url": "http://fakeapi/main.php"
                },
                "retry_count": 3,
                "retry_delay": {
                    "unit": "s",
                    "value": 10
                }
            },
            "alarm_patterns": [
                {
                    "v": {
                        "state": {
                            "val": {
                                ">": 0
                            }
                        }
                    }
                }
            ],
            "entity_patterns": null,
            "drop_scenario_if_not_matched": true,
            "emit_trigger": false
        },
        {
            "type": "webhook",
            "comment": "Step 2, get the object by id ",
            "parameters": {
                "declare_ticket": {
                    "empty_response": false,
                    "is_regexp": false,
                    "ticket_id": "ticket_id"
                },
                "request": {
                    "auth": null,
                    "headers": {},
                    "method": "GET",
                    "payload": "{\"action\": \"getObjectById\", \"id\": {{ index .Response \"id\"}} }",
                    "skip_verify": false,
                    "url": "http://fakeapi/main.php"
                },
                "retry_count": 3,
                "retry_delay": {
                    "unit": "s",
                    "value": 10
                }
            },
            "alarm_patterns": [
                {
                    "v": {
                        "state": {
                            "val": {
                                ">": 0
                            }
                        }
                    }
                }
            ],
            "entity_patterns": null,
            "drop_scenario_if_not_matched": false,
            "emit_trigger": false
        }
    ],
    "priority": 1,
    "delay": null,
    "created": 1651156396,
    "updated": 1651156396
}' 'http://localhost:8082/api/v4/scenarios'

Lors de l'envoi d'un évènement un ticket avec l'id R000042 devrait lui être assigné.


Dernière mise à jour: 2022-04-29