Table of Contents

Class WebhookHandlerBase

Espace de noms
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
Héritage
WebhookHandlerBase
Implements
Membres hérités

Properties

Description

Description de ce que fait ce handler

public virtual string Description { get; }

Valeur de la propriété

string

DisplayName

Nom affiché dans les logs et interfaces d'admin

public abstract string DisplayName { get; }

Valeur de la propriété

string

HandlerId

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

public abstract string HandlerId { get; }

Valeur de la propriété

string

Settings

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

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

Valeur de la propriété

Dictionary<string, string>

Version

Version du handler

public virtual string Version { get; }

Valeur de la propriété

string

Methods

DecodeBase64(string)

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

protected string DecodeBase64(string base64)

Paramètres

base64 string

Retour

string

GetFileCount(StoreManifest)

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

protected int GetFileCount(StoreManifest manifest)

Paramètres

manifest StoreManifest

Retour

int

GetRecipientEmails(StoreManifest)

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

protected List<string> GetRecipientEmails(StoreManifest manifest)

Paramètres

manifest StoreManifest

Retour

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)

Paramètres

key string

Retour

string

GetSenderEmail(StoreManifest)

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

protected string GetSenderEmail(StoreManifest manifest)

Paramètres

manifest StoreManifest

Retour

string

GetSetting(string)

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

protected string GetSetting(string key)

Paramètres

key string

Retour

string

GetSetting(string, string)

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

protected string GetSetting(string key, string defaultValue)

Paramètres

key string
defaultValue string

Retour

string

GetSettingBool(string, bool)

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

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

Paramètres

key string
defaultValue bool

Retour

bool

GetSettingInt(string, int)

Récupère un paramètre entier.

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

Paramètres

key string
defaultValue int

Retour

int

GetSubject(StoreManifest)

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

protected string GetSubject(StoreManifest manifest)

Paramètres

manifest StoreManifest

Retour

string

GetTrackingId(StoreManifest)

Récupère le premier tracking ID disponible.

protected string GetTrackingId(StoreManifest manifest)

Paramètres

manifest StoreManifest

Retour

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)

Paramètres

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)

Paramètres

manifest StoreManifest

Retour

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)

Paramètres

manifest StoreManifest

Le manifest SESAR déchiffré

context WebhookContext

Contexte de la requête webhook

Retour

Task<IntegrationResult>

Résultat de l'intégration

TestConnectionAsync()

Teste la connexion aux systèmes externes.

public virtual Task<bool> TestConnectionAsync()

Retour

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)

Paramètres

settings Dictionary<string, string>

Retour

Task<bool>