Monthly Archives: augustus 2017

Dynamic DNS met TransIP via de API

Sinds een tijdje host ik mijn blog op een NAS.
Jachimowski.nl en nog enkele andere domeinnamen heb ik geregistreerd bij Transip.nl en dat werkt helemaal prima.
In het beheerpaneel van TransIP kan ik zelf de DNS-records beheren. Die heb ik ingesteld op mijn WAN-ip van mijn internetaansluiting bij Telfort.

Alles lijkt goed te werken, tot ik een zaterdag ochtend wakker werd en aan mijn blog wilde werken. De website was onbereikbaar! Al snel zag ik dat Telfort mijn WAN-ipadres gewijzigd had. Hierdoor was mijn website niet meer te benaderen op het ingestelde IP-adres.

Zo nu en dan kiest Telfort er voor om mijn IP-adres te vernieuwen. Dat is erg vervelend want daar kom ik pas achter wanneer mijn website weer eens niet bereikbaar is. Ook is het nauwelijks te voorspellen wanneer Telfort deze vernieuwing uitvoert. Soms duurt het een jaar en soms slechts enkele maanden. Sinds ik mijn router heb ingewisseld voor een eigen-bouw pfSense-bak, is het aantal ip-vernieuwingen drastisch omlaag gegaan!

Om mijn website bereikbaar te houden, kan ik gebruik maken van diensten zoals no-ip.com. Dat is een dynamische DNS dienst welke via een programma (of zelfs een functie op mijn pfSense router) automatisch de DNS records bijwerkt wanneer jouw WAN-ip veranderd. Deze dienst kost circa 30 dollar per jaar (bovenop de kosten voor de domeinna(a)m(en).

Helaas biedt TransIP geen dynamische DNS dienst zoals no-ip.com dat doet. Logisch, want de corebusiness van TransIP is het verkopen van webhosting en VPS diensten! Toch is het automatisch updaten via Dynamic DNS wel een groot gemis.

Omdat mijn NAS 24/7 aan staat, heb ik er voor gekozen zelf een script te schrijven welke ieder uur een check doet of mijn IP-adres gewijzigd is tenopzichte van de DNS-record van mijn domeinnaam jachimowski.nl. Wanneer het ip-adres afwijkt zorgt het script voor een aanpassing van de DNS-records bij Transip.nl. Hierdoor is mijn website maximaal een uurtje offline (wat voor een hobby blog acceptabel is). 😉

Benodigdheden:

Ga naar het Controlepaneel van TransIP en klik op “account” en vervolgens op “API”.
https://www.transip.nl/cp/account/api/

Daar kan je een nieuwe “keypair” maken en vergeet niet “whitelist IP” UIT te vinken. Anders zou je alleen met jouw huidige IP-adres de API gebruiken. Dat is natuurlijk niet handig. Geeft de nieuwe keypair een nuttige naam. Daarna verschijnt een flinke key. Bewaar deze key goed want dit is het enige moment dat je de key kan zien.

Download het PHP script en plaats het op een plek waar de webserver bij kan.
Pas het script aan:

<JOUWDOMEINNAAM> = De domeinnaam waarvan je het DNS-record wilt bijwerken
<JOUW TRANSIP USERNAME> = Jouw controlpanel account (username)
<PLAATS HIER JOWU KEYPAIR> = Plak hier de code die je in de eerdere stap hebt verkregen. Let op dat alles netjes tussen de quotes ” staan.

// Benodigde API en instellingen (graag nalopen!)
require_once(‘lib/Transip/DomainService.php’);
define(‘DOMAIN’, ‘<JOUWDOMEINNAAM>’);

 

// TRANSIP Account
define(‘USERNAME’, ‘<JOUW TRANSIP USERNAME’);
// API Key
define(‘PRIVATE_KEY’, ‘<PLAATS HIER JOUW KEYPAIR>’);

Vergeet niet om vanaf regel 60 enkele aanvullende DNS-records aan te passen:

$dnsEntries[] = new Transip_DnsEntry(‘@’, 86400, Transip_DnsEntry::TYPE_A, $ipAddress);

Het apenstaartje @ staat voor een wildcard waarmee domeinnaam.nl beschikbaar komt.
Je kan dus het beste ook “www” en andere subdomeinen toevoegen. (Hanteer hierin per DNS-record 1 nieuwe regel).

Als je alles juist hebt ingesteld, kan je een test doen door de DNS-records bij TransIP tijdelijk aan te passen naar bijv. 127.0.0.1. Roep daarna de pagina op die je inmiddels zelf hebt gehost: https://jouwdomeinnaam.nl/transip/wanupdate.php Hierdoor wordt het script geactiveerd en zal het een vergelijking doen met het WAN-ip en de DNS-record bij Trans-IP. In dit geval zullen alle records bijgewerkt worden.

Nu is het natuurlijk niet de bedoeling dat je zelf ieder uur dit scrip draait. Je kan het beste dit script ieder uur automatisch laten aftrappen. Hiervoor gebruiken we de Cronjob of de geplande taken van Synoloy.

Cronjob:

Maak een nieuwe regel aan in het /etc/crontab bestand. Voeg de volgende regel toe:

0 * * * * root curl https://jouwdomeinnaam.nl/transip/wanupdate.php

Op de Synology NAS kan je een geplande taak aanmaken. In dat geval kies je voor uitvoering “Ieder uur” en vervolgens een gescript commando:

curl https://jouwdomeinnaam.nl/transip/wanupdate.php

CURL doet eigenlijk een aanvraag op het opgegeven URL. Wat daar precies op terugkomt is niet belangrijk. Het script is immers afgetrapt en zorgt ervoor dat jouw WAN-ip aangepast wordt.

Je kan in de logging.txt (welke zich in dezelfde folder als het script bevind) controleren of de DNS-records succesvol bijgewerkt zijn.

DOWNLOAD PHP SCRIPT

Een chatbot bouwen met QnaMaker.ai en Azure Bot Service

Bots zijn cool ! Ze bestaan natuurlijk al een tijdje. Denk bijvoorbeeld aan de “hoe kan ik je helpen” chatschermen op websites als bol.com. Microsoft heeft in Azure de mogelijkheid om een eigen bot te bouwen. Het programmeren van een bot vergt enige programmeerkennis. Om toch een eenvoudige bot te kunnen ontwikkelen, heeft Microsoft deQnA Maker portal gelanceerd.

Via de QnaMaker.ai portal kan je eenvoudig (zonder technische kennis) een eigen chatbot ontwerpen die jouw organisatie kan helpen bij het beantwoorden van simpele vragen rondom een onderwerp. Een simpele FAQ is met QnaMaker.ai zo gebouwd!
Let op: QnaMaker.ai is momenteel 6-8-2017 nog in preview. Dat betekend dat de dienst officieel nog in ontwikkeling is en dat dagelijks bepaalde functies toegevoegd of aangepast kunnen worden. Let daarbij goed op tijdens de implementatie en het onderhoud.

In deze blog gaan wij een eigen bot bouwen en implementeren op een website.
Hiervoor maken wij gebruik van de volgende technieken en diensten:

  • QnaMaker.ai (de portal waar je de bot kan beheren)
  • Microsoft Azure (Bot Service)

Inloggen op QnaMaker.ai

Ga naar https://qnamaker.ai en log in met een Microsoft account.
Kies voor “Create new Service”.

Let op: afhankelijk van het type account waarmee je inlogt, kan het voorkomen dat je een “access denied” melding krijgt. In enkele gevallen is de applicatie QnAmaker.ai uitgeschakeld voor gebruik binnen jouw organisatie. Neem contact op met de Azure AD beheerder om deze applicatie toe te staan.

Nadat je op “Create new service” hebt geklikt, kan je de service een naam geven.
In dit voorbeeld gaan wij de Windows FAQ https://www.microsoft.com/nl-nl/software-download/faq in onze bot gebruiken. De vragen (en natuurlijk de antwoorden) op de bovengenoemde website worden door QnA Maker ingeladen.

Geef tevens de URL op naar de externe FAQ pagina. Let op: deze pagina dient publiekelijk toegankelijk te zijn. Je kan dus (nog) helaas geen SharePoint Online (intranet) pagina inladen.

Je kan ook een Excel, Word of TXT bestand inladen. Dit bestand dient wel aan een bepaalde indeling te voldoen. (Vraag, Antwoord, Bron) komma-gescheiden. Je kan een voorbeeld bestand downloaden via de knop: “See an example“.

 

Klik op “Create” de QnaMaker.ai portal gaat nu de opgegeven site onderzoeken (crawlen) op nieuwe vraag/antwoord combinaties. Dit kan even duren.

 

De bot testen en trainen

Nadat het inladen voltooid is, kan je de bot testen en trainen.
Je kan de bot direct vragen stellen in het chatvenster. Wanneer de bot een onjuist antwoord geeft, kan je in het linker menu (1) een gewenst antwoord kiezen. De bot wordt hierdoor getraind om in het vervolg een beter antwoord te geven.

Moet ik dan alle vragen vooraf definiëren !?
Nee zeker niet! De bot is slim genoeg om verschillende formuleringen van vragen te begrijpen. Maar soms is een “steuntje in de rug” nodig!

In dat geval kan je zelf alternatieve formuleringen toevoegen. (2) Op deze wijze wordt de bot nog slimmer en kan het in vervolg ook deze vraag beantwoorden.

 

Chat historie downloaden

Wanneer jouw chatbot eenmaal via een kanaal gepubliceerd is, kan je de chathistorie downloaden. Druk daarvoor op de link “Download chat log”. (3) Met deze historie kan je precies nagaan welke vragen de gebruikers stellen en welke antwoorden ze terug krijgen. Met deze gegevens kan je de bot uitbreiden met vraag/antwoord combinaties welke nog niet bestonden. Vaak zie je dat gebruikers hele conversaties aan gaan met de bot. Een soort van Turing Test ?! 😉

Ben je helemaal klaar met trainen? sla de bot op via “Save and retrain”.

De bot publiceren

Wanneer de bot gereed is voor productie, kan je de bot publiceren.
Druk daarvoor op de knop “Publish”. Je krijgt daarmee een stukje code welke je kan implementeren op ieder willekeurige applicatie. In dit voorbeeld gaan wij gebruik maken van de Azure Bot service.

Login op de Azure Portal en zoek naar “Bot service” (preview) en klik op “Create”.

Geef de nieuwe service een toepasselijke naam en voeg deze toe aan een nieuwe (of bestaande) resource groep. Geef tevens een locatie op in welk Azure Datacenter de data verwerkt en gehost mag worden.

Klik op “Create” en de service wordt nu aangemaakt.
Nadat de nieuwe service is uitgerold kunnen we de QnaMaker.ai bot integreren in de service. Hiervoor zoek je de nieuwe “WINDOWSFAQBOT” Bot Service op.


Voordat we de service kunnen verbinden, dienen we een Microsoft App ID aan te maken.
Er wordt automatisch een App ID gegenereerd en een bijhorend wachtwoord. Sla de gegevens goed op! Deze gegevens heb je in een latere stap nodig.

Nadat de App ID en Password zijn aangemaakt dien je het wachtwoord in te voeren waarna ook de “Choose a language” opties beschikbaar komen.

 

Kies voor de programmeertaal “C#” en kies voor de “Question and Answer” blok.
Klik vervolgens op “Create bot”. Er wordt nu om een account gevraagd. Geef daar het account op dat is gebruikt tijdens het inloggen op de qnamaker.ai portal.

Na het inloggen kies je de aangemaakte service “Windows FAQ”. Indien je meerdere services hebt aangemaakt op QnaMaker.ai, zie je die ook in een dropdown lijst.
Ga akkoord met de voorwaarde en klik op “OK”. De bot wordt nu uitgerold in de Azure Bot Service.

Limieten: De QnaMaker is momenteel nog in preview. Je kan deze dienst gratis gebruikten tot 10 transacties per minuut en maximaal 10.000 transacties per maand.

Foutmelding:
Tijdens het uitrollen van de bot kreeg ik een foutmelding dat de naam “Windows FAQ Bot” niet gebruikt mocht worden vanwege inbreuk op merkrechten. (Logisch!) maar wel een beetje laat! Ik heb de naam van de service in QnaMaker.ai moeten aanpassen naar FAQBOT.

In webpagina embedden

Als de uitrol succesvol is verlopen, dan zie je het Azure Bot Service ontwikkelscherm.
Via de knop “Channels” kan je de bot in een kanaal laten landen. Er zijn verschillende kanalen beschikbaar zoals; Skype, Facebook, Teams en Web Chat. In dit voorbeeld kiezen we voor “Web Chat”. Hiermee kan je een stukje code implementeren op een webpagina waarna een chatscherm zichtbaar wordt.

Klik in de regel “Web Chat” op “Edit”. Nu zie je 2 “Secret”keys. Deze keys worden gebruikt om vanaf een webpagina gebruik te kunnen maken van de bot service.

Ook is HTML-code beschikbaar waarmee je de Web Chat in een webpagina kan embedden:

<iframe src=’https://webchat.botframework.com/embed/WINDOWSFAQBOT?s=YOUR_SECRET_HERE’></iframe>

Op de plek van “YOUR_SECRET_HERE” plak je de “secret” die je zojuist hebt gekregen.
Nu kan je de HTML code opnemen in de webpagina of SharePoint site.

De Azure Bot (QnAMaker) is nu geïntegreerd in een SharePoint pagina.

Analytics

Om te weten te komen of de bot ook daadwerkelijk gebruikt wordt, kan je analytische gegevens opvragen. Dit kan via de Azure Portal (App Service).

De gegevens over de afgelopen 10 dagen zijn inzichtelijk in de volgende grafieken: