Table of Contents

Interface IWebhookHandler

Espace de noms
SESARWebHook.Core.Interfaces

Interface simplifiée pour les clients qui veulent implémenter leur propre webhook handler.

RESPONSABILITÉS :

  • Vous recevez le manifest SESAR déchiffré
  • Vous utilisez nos helpers d'authentification (OAuth2, API Key, etc.)
  • Vous faites vos propres appels API
  • Vous implémentez VOTRE logique d'affaire

CE QUE NOUS GÉRONS :

  • Réception du webhook SESAR
  • Déchiffrement du manifest
  • Helpers d'authentification (OAuth2ClientCredentialsHelper, OAuth2RefreshTokenHelper, ApiKeyHelper)

CE QUE VOUS GÉREZ :

  • Transformation des données vers votre format
  • Appels HTTP vers votre système
  • Logique d'affaire spécifique

EXEMPLE :

public class MyHandler : WebhookHandlerBase
{
    private OAuth2ClientCredentialsHelper _auth;

    public override string HandlerId => "my-handler";
    public override string DisplayName => "My Handler";

    public override void Initialize(Dictionary<string, string> settings)
    {
        base.Initialize(settings);
        _auth = OAuth2ClientCredentialsHelper.ForDynamics365(
            GetRequiredSetting("TenantId"),
            GetRequiredSetting("ClientId"),
            GetRequiredSetting("ClientSecret"),
            GetRequiredSetting("ResourceUrl")
        );
    }

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

        // 2. Obtenir le token (avec notre helper)
        var token = await _auth.GetAccessTokenAsync();

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

            var response = await client.PostAsync("https://your-api.com/endpoint",
                new StringContent(JsonConvert.SerializeObject(new {
                    email, subject
                })));

            if (response.IsSuccessStatusCode)
                return IntegrationResult.Ok("Success");
            else
                return IntegrationResult.Fail("Error", await response.Content.ReadAsStringAsync());
        }
    }
}
public interface IWebhookHandler

Properties

Description

Description de ce que fait ce handler

string Description { get; }

Valeur de la propriété

string

DisplayName

Nom affiché dans les logs et interfaces d'admin

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.

string HandlerId { get; }

Valeur de la propriété

string

Version

Version du handler

string Version { get; }

Valeur de la propriété

string

Methods

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.

void Initialize(Dictionary<string, string> settings)

Paramètres

settings Dictionary<string, string>

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

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.

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.

Task<bool> TestConnectionAsync()

Retour

Task<bool>

ValidateConfigurationAsync(Dictionary<string, string>)

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

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

Paramètres

settings Dictionary<string, string>

Retour

Task<bool>