Application sans serveur échéanciers Docusign et Stripe

Préambule

Cette application web a été développée pour un cabinet libéral qui souhaite envoyer des devis et l’échéancier associé via Docusign pour que le client puisse y apposer sa signature électronique.
Une fois le devis signé, l’application doit mettre en place l’échéancier et, à chaque échéance, créer une facture sur Stripe.
L’application doit permettre de suivre finement les devis, les échéances, et les factures.
L’application doit alléger au maximum le travail des assistantes de direction et donc pouvoir générer, avec un minimum de saisies, un document Docusign complet.

C’est une application simple et pour la mettre en oeuvre j’ai décidé de n’utiliser que des outils sans serveur (serverless) pour limiter les coùts de gestion des serveurs.

Chronologie

  1. (hors scope de l’application) Génération au format PDF d’un devis avec une application métier appartenant au cabinet.

  2. Remplissage d’un formulaire à minima sur l’application web et injection du devis.

    • L’application génère automatiquement un échéancier en RTF* (rich tex format) et l’encode en Base64*.
    • L’application récupere le devis et l’encode en Base64*.
    • L’application calcule la position des différents tags à apposer sur les documents Docusign.
    • L’application crée un document JSON et l’envoie à Docusign via son API REST pour générer et envoie une liasse de document à signer via Email.
      Aucun document n’est stocké sur un serveur, tout se passe en front via Javascript, ce qui permet d’envoyer des documents ‘sensibles’.
    • L’application stocke les informations saisies dans Dynamodb pour en assuer le suivi.
  3. Le client reçoit le devis dans sa boite mail, et décide (ou non) de signer électroniquement le devis.

  4. Docusign informe l’application à chaque étape du processus de signature grâce a sa fonctionnalité CONNECT qui envoie des webhooks à l’application.

  5. l’application génére automatiquement l’échéancier prévu dès la réception du signal de signature.

  6. Quotidiennement, l’application vérifie les échéances à facturer. Pour ce faire elle utilise “CloudWatch Rules” qui permet de déclencher une “Step Function” qui est un automate aux fonctionnalités très riches et qui permet de lancer des fonctions Lambda serverless3.

  7. Pour chaque échéance trouvée, l’application envoie un signal à Stripe via son API pour générer une facture. Stripe gère ensuite tout le processus d’envoi d’email, de collecte des paiements, des relances, etc.

  8. Pour chaque étape de la facture (création, paiement, anomalies) STRIPE informe l’application via un webhook.

Voilà!, le devis est envoyé, signé, les factures et les paiements suivent.

Services utilisés :

  • Amazon Web Services : Services dans le cloud https://aws.amazon.com/fr/
  • Docusign : Service de signature électronique https://www.docusign.fr/
  • Stripe : Service de paiement en ligne https://stripe.com/fr

Stack technique :

Toute l’application est dans le cloud et plus précisément :

  • Hébergement front : Cloudfront + Lambda@edge
  • API : API Gateway
  • Identification : Cognito
  • Base de données : DynamoDB
  • Sécurisation : Json Web Token (JWT)

Definitions et explication des outils utilisés

  • Lambda
    c’est une fonction sans serveur (serveless).
    Le language utilisé pour le script peut être (à ce jour) .Net, Go, Java,Node.js Python, Ruby.
    Vous écrivez votre script et voilà il n’y a plus qu’a l’éxécuter, pas besoin de monter un serveur, installer des librairies etc.
    Vous ne payez que lorque le la fonction est lancée.
    https://aws.amazon.com/fr/lambda/features/
  • Lambda@edge : Même chose que Lambda mais elle est déclenchée par Cloudfront ce qui permet de s’affranchir d’un serveur web (Apache, Nginx, IIS, etc) https://aws.amazon.com/fr/lambda/edge/
  • Step Function : Automate très riche https://aws.amazon.com/fr/step-functions/ très facile d’utilisation, cet automate permet des retours sur erreur, et plein d’autres choses très interessantes
  • Cloudfront Réseau de diffusion de contenu (CDN) très pratique d’utilisation https://aws.amazon.com/fr/cloudfront/
  • CloudWatch Rules Permet de lancer des services de manière autonome, je l’utilise à la place de “cron” en serverless https://aws.amazon.com/fr/cloudwatch/
  • DynamoDB Base de données NoSQL Je l’utilise dans cette application car elle nativement couplée avec les fonctions lambda et répond en quelques millisecondes https://aws.amazon.com/fr/dynamodb/
  • Cognito Système d’identification intétgré d’AWS https://aws.amazon.com/fr/cognito/

Glossaire