Skip to content

nowgua/nowgua-net

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Librairie nowgua .net/c#

Build status AppVeyor tests NuGet

Firebase

Fonctionnalités

  • Gestion des sites
  • Gestion des interventions
  • Moteur de recherche
  • Download Images/Vidéos et Rapport
  • WebHook

Pré-requis

Vous devez disposer d'un compte utilisateur à nowgua http://manage.nowgua.com. Il faut ensuite créer un compte utilisateur de type API et récupérer les champs "ClientId" et "ClientSecret".

Pour celà :

  • Cliquez sur Menu => Utilisateur => Création
  • Indiquer "Créer un utilisateur API?" à 'Oui'
  • Renseignez le reste du formulaire
  • Dirigez-vous dans la fiche de l'utilisateur créé
  • Puis dans le widget "Informations d'authentification utilisateur API" récupérez vos clés

Guide de Démarrage

Installation

Depuis la console de package Nuget:

PM> Install-Package nowgua-net

ou recherchez simplement nowgua-net dans le gestionnaire de package Nuget.

Connexion

Vous devez disposer d'un ClientId et ClientSecret pour vous connecter à l'API

var settings = new NowguaConnectionSettings("$PROD-SERVER",
                                            "$CLIENT-ID",
                                            "$CLIENT-SECRET");
var ng = new NowguaClient(settings);

Gestion des sites

Rechercher un site depuis un numéro télé-transmeteur

var site = await ng.Sites.Search("00203855");

Console.WriteLine($"{site.Name} : {site.Address.Text}");

Créer un site

// Création d'un site
var createModel = new CreateSiteModel("Site de Test", "0123456789", 2);

// Adresse du site (obligatoire)
createModel.Address = new Address("228 Boulevard Alsace-Lorraine, Rosny-sous-Bois, France", 48.882485, 2.494292);

// Groupe de site¹
createModel.GroupSiteId = "5a4b435c20c6c622587e2ca6";

// Information de reconnaissance 
createModel.Recognition.Access = "Moyen d'accès au site";
createModel.Recognition.ExitInformations = "Information sur les issues du site";
createModel.Notes = "Notes concernant le site";

// Instructions d'intervention
createModel.Instructions.Add(1, true); //L'agent doit t'il réaliser une ronde extérieure
createModel.Instructions.Add(3, "123"); //Code secret pour s'assurer que c'est bien le client
createModel.Instructions.Add(4, "963258"); //Code d'entrée sur le site
// ...

//Moyen d'acces (Obligatoire si l'intervention nécessite une ronde interieure)
  createModel.AccessInformation = new SiteAccessInformation {
  Code = "12345"; // Si un code est nécessaire pour rentrer dans le site
  Commentaire = "New Commentaire ! ",
  KeyRef = "referenceClef",
  LocationType = new LabelModel<int>() { Id = 1, Label = "surSite" },
  Type = new List<LabelModel<int>>(){ new LabelModel<int>() { Id = 0, Label = "Badge" }, new LabelModel<int>() { Id = 1, Label = "Code"}
  	} 
   };

// Ajout de contact 
createModel.Contacts.Add("Albert", "SMITH", "albert.smith@gmail.com", "+33600000000", true); // reception automatique des rapports d'intervention du site
createModel.Contacts.Add("Henry", "KESTREL", "h.kestrel@outlook.com", "+33600000000", false);

string siteId = await ng.Sites.Create(createModel);

Consulter la liste des différents type de site, instructions et encore bien d'autres informations depuis cette url : https://nowgua-prod-api.azurewebsites.net/swagger/ui/#!/AppSettings/Api1_0AppsettingsGet

¹Récupérer les informations d'un groupe de site

2 possibilités pour récupérer les informations d'un groupe de site :

  • Via le nom du group
var groupSite = await ng.GroupsSites.GetByName("NowGua-Group-test1");

Console.WriteLine($"{groupSite.Id} : {groupSite.Name}");
  • Via l'Id du group
var groupSite = await ng.GroupsSites.GetById("5a4b435c20c6c622587e2ca6");

Console.WriteLine($"{groupSite.Id} : {groupSite.Name}");

Récupérer les informations d'un site

// Récupération des informations du site 
var site = await ng.Sites.Get(siteId);

Console.WriteLine($"{site.Id} : {site.Name} => {site.Address.Text}");

Modification des informations d'un site

// Modification du site 
EditSiteModel editSiteModel = await ng.Sites.Get(siteId);
editSiteModel.Name = "Nouveau Nom";
editSiteModel.TransmitterNumber = "T0123456789";
editSiteModel.Address = new Address("229 Boulevard Alsace-Lorraine, Rosny-sous-Bois, France", 48.882486, 2.494292);

await ng.Sites.Edit(editSiteModel);

Gestion des interventions

Création d'une intervention

Pour créer une intervention, il vous faut obligatoirement un identifiant de Site nowgua.

// Récupération du site
string TransmetterNumber = "3241";
var site = await ng.Sites.Search(TransmetterNumber);

// Création de l'intervention
var interventionModel = new CreateInterventionModel(site.Id, 1, DateTime.Now, "Attention présence sur le site. Merci de contacter Mr Andre une fois arrivé sur place ...");
var interventionId = await ng.Interventions.Create(interventionModel);

Consulter la liste des différents type d'alarme, instructions et encore bien d'autres informations depuis cette url : https://nowgua-prod-api.azurewebsites.net/swagger/ui/#!/AppSettings/Api1_0AppsettingsGet

On peut récupérer facilement les données de l'intervention (date, type, état etc ...) et son rapport

// Récupération de toutes les informations concernant l'intervention
var intervention = await ng.Interventions.Get(interventionId);

// Récupération des données du rapport
var report = await ng.Interventions.GetReport(interventionId);

Moteur de recherche

nowgua support les requetes elasticsearch (librairie NEST : https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/search.html)

Recherchons par exemple tous les sites disponibles

var sites = await ng.Sites.Search(s => s.Type(ng.Sites.SearchTypeName).Query(q => q.MatchAll()));

ou recherchons les interventions créées sur un site en particulier et avec un certain type d'alarme

var interventions = await ng.Interventions.Search(i => i.Type(ng.Interventions.SearchTypeName)
                                                                            .Query(q => q
                                                                                .Term(t => t.Site.TransmitterNumber, "3241")
                                                                                && q.Term(t => t.AlarmType.Id, 1)
                                                                            ).Take(1000)
                                                                );

Attention par défaut le nombre d'éléments remontés est limité à 10 (TOP 10), vous devez spécifier si vous voulez plus de résultat.

// .Take(1000)
var sites = await ng.Sites.Search(s => s.Type(ng.Sites.SearchTypeName).Query(q => q.MatchAll()).Take(1000));

Download Images/Vidéos et Rapport

Vous pouvez télécharger les images ou vidéos présentes dans les rapports d'intervention ou dans les sites par exemple. Prenons l'exemple du rapport :

var report = await ng.Interventions.GetReport(interventionId);

foreach (var picture in report.Pictures)
{
	Console.WriteLine($"Download - FileName: {picture.FileName} - ContentType: {picture.ContentType}");
	
	// Download du fichier image
	var filebyte = await ng.Files.Download(picture.Id);
	
	// Sauvegarde sur le disque
	File.WriteAllBytes(picture.FileName, filebyte);
}

ou télécharger le rapport d'une intervention au format PDF

var report = await ng.Interventions.DownloadReport(interventionId);
File.WriteAllBytes($"{interventionId}.pdf", report);

WebHook

Les webhook servent à notifier votre application qu'un événement a eu lieu. Ainsi, vous pouvez demander à ce que des notifications soient envoyées sur une page de votre choix pour vous aviser de divers événements survenus dans nowgua.

Je vais par exemple, m'abonner à tous les évènements de changements sur mes interventions

var model = new CreateWebHookModel { Type = WebHookType.Intervention, URL = "https://api.monsite.com/key=d4s5qd4f8sf" };
await ng.WebHooks.Create(model);

Ainsi dès qu'une intervention sera créée, affectée ou peu importe ... je recevrai un POST sur https://api.monsite.com/key=d4s5qd4f8sf avec le message concerné.

Voici la liste des messages :

EvènementNomModel
CréationCreateInterventionModel
AssignationAssignInterventionModel
ConfirmationConfirmInterventionModel
Départ vers siteStartInterventionModel
Arrivé sur siteArrivedOnSiteInterventionModel
Mise à jour RapportReportReportModel
Fin InterventionEndOfInterventionInterventionModel
ClôtureCloseInterventionModel
AnnulationCancelInterventionModel
DésaffectationUnAssignInterventionModel

Tous les messages sont typés en WebHookMessage qui contient le type de webhook, la date, le nom du message et le modèle. Vous pouvez récupérer les données du modèle grâce à la fonction .Parse()

[HttpPost()]
public IActionResult YourActionOnController([FromBody] WebHookMessage message)
{
    if (message.Name == "Assign")
    {
    	// Récupération du message
	var intervention = message.Parse<InterventionModel>();

	var Agent = intervention.SecurityAgent.FullName;
    }

    return Ok();
}

Il est aussi possible de s'abonner à tous les évènements de changements sur mes sites

var model = new CreateWebHookModel { Type = WebHookType.Site, URL = "https://api.monsite.com/key=d4s5qd4f8sf" };
await ng.WebHooks.Create(model);

Ainsi dès qu'un site sera créée, modifié ou peu importe ... je recevrai un POST sur https://api.monsite.com/key=d4s5qd4f8sf avec le message concerné.

Voici la liste des messages :

EvènementNomModel
CréationCreateSiteModel
ModificationEditSiteModel
SuppressiondeleteSiteModel