01. Contract verzoeken verwerken

In dit scenario laat de Media Partner niet zomaar alle makelaarskantoren toe als 'klant'. De makelaar dient een verzoek in voor een contract en de Media Partner keurt dit verzoek goed of af. Dit scenario is van toepassing als de instelling 'Auto Accept' op 'nee' staat ingesteld voor de specifieke Media Partner.


Dit scenario is niet van toepassing indien 'Auto Accept' op 'ja' staat ingesteld. In het geval dat 'Auto Accept' op 'ja' staat gebeurt dit gehele proces namelijk automatisch en worden altijd alle Contract verzoeken direct geaccepteerd.



Het scenario 'Contract verzoeken verwerken' is bijvoorbeeld toepasbaar bij een Media Partner die een (papieren) overeenkomst wilt hebben met de makelaar voordat hij toestaat dat de makelaar panden gaat publiceren naar de Media Partner. Vaak worden deze overeenkomsten éérst getekend om duidelijk te maken aan de makelaar dat hij, zodra hij een pand gaat publiceren naar de Media Partner, feitelijk de opdracht geeft aan de Media Partner om een product of dienst voor het pand te leveren. En dat de kosten vervolgens (uiteraard) voor rekening zijn van deze makelaar.

Voor dit scenario haalt de Media Partner met regelmaat (bijvoorbeeld 1x per dag) een lijst op bij de Connector met alle contract verzoeken. Deze verzoeken verwerkt de Media Partner, bijvoorbeeld door overeenkomsten op te stellen en per post te versturen naar de makelaar. Is de makelaar uiteindelijk (enkele dagen later) akkoord met de voorwaarden en heeft de Media Partner alle benodigde getekende documenten ontvangen dan bevestigd de Media Partner dit bij de Connector. Gaat de makelaar niet akkoord dan laat de Media Partner dit ook weten bij de Connector.

Pas als een Contract actief is (in dit scenario: pas als de Media Partner het verzoek voor het contract geaccepteerd heeft) kan de makelaar panden publiceren naar de Media Partner.

In onderstaand sequence diagram wordt de workflow voor het verwerken van verzoeken voor een Contract weergegeven.

Stap A + B: Ophalen van verzoeken

Als eerste haalt de Media Partner alle verzoeken voor Contracten op. Dit gaat met een HTTP GET request op alle MediaContracts met de status van het Contract 'pendingactivation'. De URL van dit GET request ziet er voor versie 16.0 van de connector en token ABCDEFG als volgt uit:

https://api.wazzupsoftware.com/ActivateService.svc/16/0/ABCDEFG/mediacontract/?state=pendingactivation

Hieronder een code voorbeeld

private IList<MediaContractSnapshot> getMediaContractSnapshots(string constractState)
{
     var url = string.Format(@"{0}ActivateService.svc/16/0/{1}/mediacontract/?state={2}", 
                m_connectorURL, m_token, constractState);
     var result = XmlLib.GetObject<MediaContractSnapshotResult>(url);
     if (!result.IsSuccess)
            throw new Exception(result.ErrorMessage);
     return result.ArrayOfMediaContractSnapshot;
}

Met een geldig token maar zonder Contract verzoeken ziet het resultaat er als volgt uit:



Met een geldig token en één verzoek ziet het resultaat er als volgt uit:

Geen recht om de API method aan te roepen.

Is het token geldig maar heb je als Media Partner niet het recht om verzoeken op te halen (bijvoorbeeld omdat 'Auto Accept' op 'ja' staat ingesteld) dan krijg je het volgende resultaat:

Ongeldig token

Indien de Connector wordt aangeroepen met een ongeldig token kun je het onderstaande resultaat verwachten:

Stap C + D: Goedkeuren van contract verzoeken

Als de contract verzoeken éénmaal zijn opgehaald kunnen ze verwerkt worden. Dit verwerken is per Media Partner anders: de ene partner belt de makelaar om de voorwaarden te bespreken; de ander stuurt per post een overeenkomst op, etc. Zodra dit verwerken is afgerond kan de Media Partner aan de Connector doorgeven of het verzoek geaccepteerd of geweigerd wordt.

Het accepteren gaat door een bericht te posten met als actie 'acceptactivation'. Het resultaat van de actie geeft aan of de actie gelukt of mislukt is. De URL van deze POST actie ziet er voor versie 1.0 van de Connector, token ABCDEFG en Contract 12 als volgt uit:

https://api.wazzupsoftware.com/ActivateService.svc/16/0/ABCDEFG/mediacontract/?id=12&action=acceptactivation

Hieronder een code voorbeeld waarin een verzoek van een contract wordt geaccepteerd:

public void AcceptActivation(int mediaContractID)
{
    var url = string.Format("{0}ActivateService.svc/16/0/{1}/mediacontract/?id={2}&action={3}", 
        m_connectorURL, m_token, mediaContractID, "acceptactivation");
    postMessage(url);
}
private static void postMessage(string url)
{
    var request = WebRequest.Create(url);
    request.Method = "POST";

    request.ContentLength = 0;
    using (var response = request.GetResponse())
    {
        var result = XmlLib.GetObject<DefaultResult>(response.GetResponseStream());
        if (!result.IsSuccess)
            throw new Exception(result.ErrorMessage);
    }
}
Stap E + F: Weigeren van contract verzoeken

Uiteraard kan een verzoek voor een contract ook geweigerd worden. Het weigeren gaat op een soortgelijke manier als het accepteren, alleen is de actie dan 'rejectactivation' en niet 'acceptactivation'. Daarnaast kan de Media Partner bij het weigeren een reden meegeven. Deze reden wordt via de software van de Content Provider (b.v. Kolibri) getoond aan de makelaar.

De URL van de POST actie ziet er voor versie 16.0 van de Connector, token ABCDEFG en Contract 12 als volgt uit:

https://api.wazzupsoftware.com/ActivateService.svc/16/0/ABCDEFG/mediacontract/?id=12&action=rejectactivation&reason=Overeenkomst%20niet%20op%20tijd%20ontvangen

Hieronder een C# code voorbeeld waarin een verzoek van een contract wordt geweigerd:

public void RejectActivation(int mediaContractID, string reason)
{
    var url = string.Format("{0}ActivateService.svc/16/0/{1}/mediacontract/?id={2}&action={3}&reason={4}",
        m_connectorURL, m_token, mediaContractID, "rejectactivation", HttpUtility.UrlEncode(reason));
    postMessage(url);
}
private static void postMessage(string url)
{
    var request = WebRequest.Create(url);
    request.Method = "POST";
    request.ContentLength = 0;

    using (var response = request.GetResponse())
    {
        var result = XmlLib.GetObject<DefaultResult>(response.GetResponseStream());
        if (!result.IsSuccess)
            throw new Exception(result.ErrorMessage);
    }
}