Het hier voorgestelde actiemodel maakt het mogelijk om te communiceren met ChatGPT. Dit vereist de installatie van de plugin MercatorAI.OpenAI en werkt enkel met een Core-versie van Mercator. (De code is echter ook compileerbaar in een klassieke versie). Deze basisactie maakt het mogelijk om een gesprek te voeren met ChatGPT. De vraag wordt ingevoerd in het veld bovenaan het scherm en via de knop "Ondervragen" naar ChatGPT gestuurd. De gestelde vraag en het bijhorende antwoord worden weergegeven in HTML-formaat. De volledige gespreksgeschiedenis wordt opgeslagen, waardoor het altijd mogelijk is om het gesprek later verder te zetten. ChatGPT zal zich steeds blijven positioneren binnen de context van dat gesprek.
In de code moet de parameter systemMessage aangepast worden. Deze parameter geeft bij het versturen van de eerste vraag aan wat de context is en in welke vorm ChatGPT moet antwoorden.
Deze basisactie kan uitgebreid worden met vragen die bijvoorbeeld gegevens bevatten uit de database van Mercator.
Er zijn drie kolommen van het type varchar(MAX) vereist in de tabel ACTIONS:
- NOTE : voor de vraag
- HTML : voor het gesprek in HTML-formaat
- RESULTAT : voor het gesprek in JSON-formaat (mag nooit handmatig worden aangepast)
Om deze actie te installeren:
- Unzip het bijgevoegde ZIP bestand
- Unzip het bijgevoegde ZIP bestand
Het zip bestand bevat twee bestanden in "Mercator Action" formaat: - een MACTX bestand gebruikt voor de Aruba versie
- een MACT bestand gebruikt voor de Legacy versies
- Meer informatie voor een snelle installatie
Belangrijke opmerking: dit actiemodel, zoals hier gepresenteerd, heeft weinig nut, aangezien het overeenkomt met een eenvoudige chat. Het wordt pas interessant wanneer de informatie die naar ChatGPT wordt gestuurd, uit Mercator wordt gehaald. Bijvoorbeeld, als men een aanbeveling wil krijgen van klanten om te bezoeken, kunnen deze gegevens uit Mercator worden gehaald:
- Identificatiedata
- Klant-ID
- Bedrijfsnaam
- Locatie (stad, regio, land)
- Businessdata
- Gerealiseerde omzet (CA, aankoopvolume)
- Omzetevolutie (groei of daling in de laatste maanden)
- Gegenereerde marge
- Geschat potentieel (marktgrootte, opportuniteiten)
- Relationele data
- Laatste bezoek / laatste contact
- Gewenste bezoekfrequentie
- Tevredenheidsniveau (indien beschikbaar)
- Openheid voor nieuwe aanbiedingen
- Logistieke beperking (indien van toepassing)
- Afstand / reistijd
- Geografische zone (handig om de rondes te optimaliseren)
Deze gegevens kunnen worden verpakt in de vorm van een JSON- of CSV-tekenreeks. Deze laatste wordt aan systemMessage toegevoegd en dient als context voor de generatie van het antwoord door ChatGPT.
De code van de knop die communiceert met ChatGPT is als volgt:
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Linq;
using MercatorApi;
using MercatorController;
using System.Windows.Forms;
using MercatorExtensions;
using MercatorDatabase;
// <CompileWithRoslyn />
namespace MercatorUi.MovableControls.ButtonsCodes
{
public static class Script
{
public static void Exec(MercatorUi.MovableControls.MovableButton clickedButton)
{
// enter your customized code here
Forms.Action.ActionForm actionForm = (Forms.Action.ActionForm)clickedButton.Form;
Engine.Crm.ActionEngine actionEngine = actionForm.ActionEngine;
if (string.IsNullOrWhiteSpace(actionEngine.ActionsRecord.NOTE))
{
MovableTextBox textBoxNote = actionForm.MovableControls.Values.OfType<MovableTextBox>().First(p => p.Source == "NOTE");
_Divers.FocusError(textBoxNote);
return;
}
MercatorAI.FactoryOpenAI factory = new MercatorAI.FactoryOpenAI();
MercatorAI.Interfaces.IOpenAiChat openAiChat = factory.CreateOpenAiChat("gpt-5-mini", actionEngine.ActionsRecord.RESULTAT, out string error); // actionEngine.ActionsRecord.RESULTAT contient la conversation sous forme json
if (!string.IsNullOrEmpty(error))
{
Dialogs.Stop("Kan de OpenAI-chat niet initialiseren: " + error);
return;
}
Wait.WaitStatic.WaitWindowBaseThread(Api.Iif_langue(Globals.Langue, IifLangueEnum.AIisThinking));
string ret = "Geen antwoord";
_BaseClasses.ExclusiveBackgroundWorkerAsync exclusiveBackgroundWorkerAsync = new _BaseClasses.ExclusiveBackgroundWorkerAsync(async () => ret = await openAiChat.AskAsync(actionEngine.ActionsRecord.NOTE.Trim(),
responseFormat: MercatorAI.Tools.ChatResponseFormat.HtmlContent,
systemMessage: actionEngine.ActionsRecord.RESULTAT == "" ? "Je bent een assistent die vragen beantwoordt als onderdeel van mijn bedrijf genaamd Widget nv." : ""), formWhereToCenterLoadingCircle: actionForm);
Wait.WaitStatic.WaitClearBaseThread();
if (exclusiveBackgroundWorkerAsync.ExceptionDuringDoWork != null)
{
Dialogs.Stop(exclusiveBackgroundWorkerAsync.ExceptionDuringDoWork.Message);
return;
}
actionEngine.ActionsRecord.HTML =
"<div style=\"margin-top: 25px; margin-bottom: 25px; padding: 25px 15px; border-radius: 10px; background-color: rgb(249, 246, 241);\">"
+ actionEngine.ActionsRecord.NOTE.Trim().Replace("\r\n", "<br>")
+ "</div>"
+ "<div style=\"padding: 0px 15px 0px 15px;\">"
+ ret
+ "</div>"
+ (actionEngine.ActionsRecord.HTML != "" ? "<hr style=\"margin-top: 25px; margin-bottom: 25px\">" + actionEngine.ActionsRecord.HTML : "");
actionEngine.ActionsRecord.RESULTAT = openAiChat.ConversationJson;
actionEngine.ActionsRecord.NOTE = "";
}
}
}
De informatie wordt verzonden naar een derde partij (OpenAI). Er mogen dus geen vertrouwelijke gegevens worden doorgestuurd.
De antwoorden die door deze code worden gegenereerd, zijn automatisch gegenereerd met behulp van een model voor kunstmatige intelligentie (AI). Hoewel het ontworpen is om nuttige en relevante antwoorden te geven, kunnen deze antwoorden onvolledig, onjuist of gedeeltelijk fout zijn.
De gebruiker blijft als enige verantwoordelijk voor de evaluatie en het gebruik van deze antwoorden. Mercator of de leverancier van de AI-dienst kan in geen geval aansprakelijk worden gesteld voor de gevolgen van het gebruik van deze antwoorden.
Het gebruik van deze dienst moet compatibel zijn met de GDPR-voorschriften die binnen het bedrijf van toepassing zijn.
Te laden :
0000003304.zip (21 Kb - 24-09-2025)