Table of Contents

Class WebhookHandlerBase

Namespace
SESARWebHook.Core

Classe de base pour les webhook handlers. Fournit des helpers pour accéder aux données du manifest et à la configuration.

UTILISATION :

  1. Héritez de cette classe
  2. Implémentez HandlerId, DisplayName, et ProcessAsync
  3. Utilisez les helpers d'auth dans Core.Auth

EXEMPLE COMPLET :

using SESARWebHook.Core;
using SESARWebHook.Core.Auth;
using SESARWebHook.Core.Models;

public class MyDynamicsHandler : WebhookHandlerBase
{
    private OAuth2ClientCredentialsHelper _auth;

    public override string HandlerId => "my-dynamics";
    public override string DisplayName => "My Dynamics 365 Handler";

    public override void Initialize(Dictionary<string, string> settings)
    {
        base.Initialize(settings);

        // Créer le helper d'auth avec vos paramètres
        _auth = OAuth2ClientCredentialsHelper.ForDynamics365(
            tenantId: GetRequiredSetting("TenantId"),
            clientId: GetRequiredSetting("ClientId"),
            clientSecret: GetRequiredSetting("ClientSecret"),
            dynamicsUrl: GetRequiredSetting("DynamicsUrl")
        );
    }

    public override async Task<IntegrationResult> ProcessAsync(
        StoreManifest manifest,
        WebhookContext context)
    {
        // Extraire les données avec les helpers
        var email = GetSenderEmail(manifest);
        var subject = GetSubject(manifest);

        // Obtenir un token (auto-refresh géré par le helper)
        var token = await _auth.GetAccessTokenAsync();

        // Faire votre appel API
        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Authorization =
                new AuthenticationHeaderValue("Bearer", token);

            var payload = new {
                emailaddress1 = email,
                subject = subject,
                description = $"From SESAR: {context.RequestId}"
            };

            var response = await client.PostAsync(
                $"{GetRequiredSetting("DynamicsUrl")}/api/data/v9.2/contacts",
                new StringContent(
                    JsonConvert.SerializeObject(payload),
                    Encoding.UTF8,
                    "application/json"));

            if (response.IsSuccessStatusCode)
            {
                return IntegrationResult.Ok("Contact created", HandlerId);
            }
            else
            {
                var error = await response.Content.ReadAsStringAsync();
                return IntegrationResult.Fail("API error", error, HandlerId);
            }
        }
    }
}
public abstract class WebhookHandlerBase : IWebhookHandler
Inheritance
WebhookHandlerBase
Implements
Inherited Members

Properties

Description

Description de ce que fait ce handler

public virtual string Description { get; }

Property Value

string

DisplayName

Nom affiché dans les logs et interfaces d'admin

public abstract string DisplayName { get; }

Property Value

string

HandlerId

Identifiant unique de ce handler (ex: "my-company-crm") Utilisé dans la configuration et le routage.

public abstract string HandlerId { get; }

Property Value

string

Settings

Configuration chargée depuis Web.config et connectors.secrets.json

protected Dictionary<string, string> Settings { get; }

Property Value

Dictionary<string, string>

Version

Version du handler

public virtual string Version { get; }

Property Value

string

Methods

DecodeBase64(string)

Décode une chaîne Base64 en texte UTF-8.

protected string DecodeBase64(string base64)

Parameters

base64 string

Returns

string

GetFileCount(StoreManifest)

Récupère le nombre de fichiers dans le manifest.

protected int GetFileCount(StoreManifest manifest)

Parameters

manifest StoreManifest

Returns

int

GetRecipientEmails(StoreManifest)

Récupère la liste des emails des destinataires.

protected List<string> GetRecipientEmails(StoreManifest manifest)

Parameters

manifest StoreManifest

Returns

List<string>

GetRequiredSetting(string)

Récupère un paramètre de configuration obligatoire. Lève une exception si non trouvé.

protected string GetRequiredSetting(string key)

Parameters

key string

Returns

string

GetSenderEmail(StoreManifest)

Récupère l'email de l'expéditeur depuis le manifest.

protected string GetSenderEmail(StoreManifest manifest)

Parameters

manifest StoreManifest

Returns

string

GetSetting(string)

Récupère un paramètre de configuration. Retourne null si non trouvé.

protected string GetSetting(string key)

Parameters

key string

Returns

string

GetSetting(string, string)

Récupère un paramètre de configuration avec valeur par défaut.

protected string GetSetting(string key, string defaultValue)

Parameters

key string
defaultValue string

Returns

string

GetSettingBool(string, bool)

Récupère un paramètre booléen.

protected bool GetSettingBool(string key, bool defaultValue = false)

Parameters

key string
defaultValue bool

Returns

bool

GetSettingInt(string, int)

Récupère un paramètre entier.

protected int GetSettingInt(string key, int defaultValue = 0)

Parameters

key string
defaultValue int

Returns

int

GetSubject(StoreManifest)

Récupère le sujet décodé depuis le manifest.

protected string GetSubject(StoreManifest manifest)

Parameters

manifest StoreManifest

Returns

string

GetTrackingId(StoreManifest)

Récupère le premier tracking ID disponible.

protected string GetTrackingId(StoreManifest manifest)

Parameters

manifest StoreManifest

Returns

string

Initialize(Dictionary<string, string>)

Initialise le handler avec les paramètres de configuration. Appelé une fois au chargement.

C'est ici que vous devez créer vos helpers d'authentification.

public virtual void Initialize(Dictionary<string, string> settings)

Parameters

settings Dictionary<string, string>

Paramètres fusionnés de Web.config et connectors.secrets.json

IsReply(StoreManifest)

Vérifie si c'est une réponse à un échange précédent.

protected bool IsReply(StoreManifest manifest)

Parameters

manifest StoreManifest

Returns

bool

ProcessAsync(StoreManifest, WebhookContext)

Traite un manifest SESAR et fait les actions nécessaires.

C'est la méthode principale. Vous recevez le manifest déchiffré et vous faites ce que vous voulez : appels API, transformation, etc.

public abstract Task<IntegrationResult> ProcessAsync(StoreManifest manifest, WebhookContext context)

Parameters

manifest StoreManifest

Le manifest SESAR déchiffré

context WebhookContext

Contexte de la requête webhook

Returns

Task<IntegrationResult>

Résultat de l'intégration

TestConnectionAsync()

Teste la connexion aux systèmes externes.

public virtual Task<bool> TestConnectionAsync()

Returns

Task<bool>

ValidateConfigurationAsync(Dictionary<string, string>)

Valide que la configuration est correcte. Appelé au démarrage et lors des tests.

public virtual Task<bool> ValidateConfigurationAsync(Dictionary<string, string> settings)

Parameters

settings Dictionary<string, string>

Returns

Task<bool>