# Application de workflow SENDHTTPPOST

## Aperçu  <a href="#apercu" id="apercu"></a>

L’application de workflow **SENDHTTPPOST** permet d’envoyer des requêtes HTTP « webhook » à des systèmes externes. Les webhooks permettent à une API d’échanger des informations avec d’autres applications via des requêtes HTTP POST et peuvent être utilisés pour créer des intégrations avec des applications extensibles telles que Slack, GitHub et Dropbox. Par exemple, les webhooks peuvent être utilisés pour des notifications quand un événement prévu (configuré par l’utilisateur) soit survenu. En permettant une communication en temps réel, les webhooks sont efficaces et performants.

SENDHTTPPOST envoie des webhooks sortants à des applications externes en utilisant des charges utiles (« payloads ») JSON ou URLENCODED. Ensuite, SENDHTTPPOST reçoit et traite la réponse de l’API externe. Pour plus d’informations, voir l’article [Using webhooks with WorkflowGen](https://discuss.workflowgen.com/t/using-webhooks-with-workflowgen/675).

Pour un exemple d’utilisation de SENDHTTPPOST pour envoyer des messages depuis WorkflowGen à des canaux Slack, voir l’article [Workflow Application: Using SENDHTTPPOST to send messages to Slack](https://discuss.workflowgen.com/t/workflow-application-using-sendhttppost-to-send-messages-to-slack/673). Des exemples d’API qui utilisent SENDHTTPPOST sont également disponibles dans le répertoire GitHub [SENDHTTPPOST Workflow Application](https://github.com/advantys/workflowgen-templates/tree/master/integration/webhooks/sendhttppost).

## Mode de fonctionnement

* Le type de charge utile (« payload ») par défaut (`APP_CONTENT_TYPE`) est JSON; URLENCODED est également supporté.<br>

* Étant donné que les paramètres de l’application sont sensibles à la casse, ils doivent respecter la notation acceptée de l’API.

* L’application SENDHTTPPOST requiert le paramètre `APP_URL`, qui correspond à l’URL de l’API externe.<br>

* Le paramètre `TOKEN` (jeton) est disponible pour usage dans l’authentification API. Quand une API récupère la valeur du jeton dans le paramètre `APP_URL`, les deux valeurs devraient être concaténées dans le paramètre `APP_URL`, laissant ainsi vide le paramètre `TOKEN`.<br>

* La réponse peut contenir une charge utile facultative correspondante à des paramètres OUT définis par les utilisateurs.<br>

* En cas d’erreur quand le paramètre OUT `APP_RESPONSE_STATUS` n’est pas défini, une exception sera lancée.<br>

* Le formulaire doit contenir des champs textbox pour tous les paramètres utilisés, avec les données des champs correspondants aux paramètres SENDHTTPPOST.<br>

* Outre les paramètres facultatifs listés ci-dessous, vous pouvez également ajouter des paramètres IN et OUT personnalisés (spécifiques à l'API externe) pour envoyer et recevoir des données personnalisées définies par l'utilisateur vers et depuis l'API externe. Par exemple, dans une intégration Slack, vous pouvez ajouter un paramètre pour inclure un emoji dans un message Slack et le mapper au paramètre `icon_emoji` de Slack (il s'agit de la notation acceptée par l'API Slack pour ce paramètre particulier).<br>

* Le délai d’expiration (`APP_TIMEOUT`) par défaut est de 3000 millisecondes; le délai d’expiration maximum est de 60 000 millisecondes.<br>

* Les en-têtes de requête HTTP peuvent être définis avec les paramètres `APP_HEADER_xxx`, dans lesquels `xxx` est le nom du champ d'en-tête.<br>

* La longueur de réponse maximale par défaut est de 4194304 caractères (4 Mo); cette valeur par défaut peut être modifiée en définissant la valeur du paramètre `SendHttpPostMaxResponseLength` dans le fichier `web.config`.<br>

* Des logs d’application sont disponibles; ceux-ci peuvent être configurés en réglant la valeur du paramètre `SendHttpPostLogLevel` dans le fichier `web.config` à `0` pour désactiver la journalisation, à `1` pour des logs simples ou à `2` pour des logs de débogage.

## Paramètres  <a href="#parametres" id="parametres"></a>

### Paramètre obligatoire

| Paramètre | Type | Direction | Description          |
| --------- | ---- | --------- | -------------------- |
| `APP_URL` | Text | IN        | URL de l’API externe |

### Paramètres facultatifs

| Paramètre                      | Type         | Direction | Description                                                                                                                                           |
| ------------------------------ | ------------ | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| `TOKEN`                        | Text         | IN        | Jeton d’autorisation de l’API                                                                                                                         |
| `APP_TIMEOUT`                  | Numeric      | IN        | L’intervalle maximum entre l’expédition de la requête et la réception de la réponse (par défaut : 3000 millisecondes; maximum : 60 000 millisecondes) |
| `APP_CONTENT_TYPE`             | Text         | IN        | Type du contenu de la requête (JSON et URLENCODED sont supportés; le type par défaut est JSON)                                                        |
| `APP_RESPONSE_CONTENT`         | Text         | OUT       | Charge utile ou message d’erreur facultatif retournée                                                                                                 |
| `APP_RESPONSE_STATUS`          | Text/Numeric | OUT       | Code retourné du statut de la requête HTTP                                                                                                            |
| `APP_HEADER_xxx`               | Text         | IN        | Paramètres d'en-tête d'API externe dans lesquels `xxx` est le nom du champ d'en-tête                                                                  |
| `APP_REQUEST_CONTENT_IS_ARRAY` | Text         | IN        | Lorsque ce paramètre est défini sur `Y`, l'application convertit la charge utile de la demande JSON en un tableau. La valeur par défaut est `N`.      |
|                                |              |           | Seulement pris en charge lors de la construction d'une charge de requête JSON avec des paramètres IN.                                                 |

## Exemples

| Paramètre                  | Type | Direction | Valeur                |
| -------------------------- | ---- | --------- | --------------------- |
| `APP_HEADER_Authorization` | Text | IN        | `Bearer AbCdEf123456` |
| `APP_HEADER_location`      | Text | IN        | `canadaeast`          |

Les paramètres définis ci-dessus généreront deux en-têtes dans la charge de la requête :

```
Authorization: Bearer AbCdEf123456
location: canadaeast
```

### Convertir la charge de la requête JSON en un tableau

Lorsque vous définissez le paramètre `APP_REQUEST_CONTENT_IS_ARRAY` sur `Y`, il convertira le JSON en un tableau :

```
[{
    "person": {
        "address": {
            "street": "160 Guy Street",
            "zipcode": "J4G 1U4"
        },
        "age": 30,
        "name": "John"
    }
}
```
