Blog overzicht

Werken met datums

Binnen Flow.ai hebben we een geavanceerd systeem dat een datum en tijd kan detecteren, extraheren, converteren en formatteren. Hierdoor is het bijvoorbeeld mogelijk om een klant een datum te vragen en daarmee een afspraak in te plannen.

Slot filling

De makkelijkste manier om met data te werken is via een Any text slot voor het entity type Date.

Chatbot with Data

Wanneer iemand iets zegt zoals today, next Saturday of 12th of September zal de AI het omzetten in een UTC datum, in de tijdzone van de gebruiker.

Tryout Chatbot Data

De datum en tijd zijn relatief

Flow.ai werkt met ingebouwde tijdzone-ondersteuning. Als de huidige datum en tijd van een klant in Amsterdam 27 augustus 14.00 uur is, wordt dit vertaald naar een UTC-datum en tijd met de waarde ‘2019-08-27T12:00:00.000Z’

Chatbot Tijdzone

Met UTC is het mogelijk om een datum om te zetten naar elk lokaal formaat. Aangezien tijd relatief is, zou tomorrow iets anders betekenen voor een klant in Japan, vergeleken met iemand die aan de westkust van de VS woont.

Data formatteren

Als je data naar een lokaal formaat wilt opmaken, moet je een codeactie gebruiken.

Formatting Chatbot Data

Om data te formatteren gebruiken we het populaire Moment.js en Moment Timezone packages om te gebruiken in code actions.

// Convert a date to Dutch date format
moment(date).tz('Europe/Amsterdam').format('LLLL')

De volgende voorbeeldcode laat zien hoe je gegevens opmaakt en toevoegt aan een parameter die binnen je flows moet worden gebruikt.

async payload => {
  const {
    params
  } = payload
  
  if(Array.isArray(params.some_date)) {
    // Format a date in Europe/Amsterdam format
    return {
      params: {
        ...payload.params,
        formatted_date: [{
          value: moment(params.some_date[0].value).tz('Europe/Amsterdam').format('LLLL')
        }]
      }
    }
  }
}

Telkens wanneer de bovenstaande codeactie wordt uitgevoerd, wordt een datum geconverteerd en geretourneerd als een nieuwe parameter.

Formatted Chatbot Data Test

Gebruik de timezone offset van de gebruiker

Binnen de payload van een codeactie ontvang je alle gebruikersprofielgegevens, inclusief timezone offset (indien beschikbaar).

De offset is het aantal uren dat een gebruiker ten opzichte van UTC heeft. Het onderstaande voorbeeld laat zien hoe je de timezone offset kunt gebruiken om een datum naar een lokaal formaat te converteren.

async payload => {
  const {
    params,
    user
  } = payload
  
  const {
    profile
  } = user
  
  if(!Array.isArray(params.some_date)) {
    // Skip if there is no date to format
    return
  }
  
  // Dynamic timezone based on user timezone offset
  const region = profile.timezone < 0 ? `Etc/GMT${profile.timezone}` : `Etc/GMT+${profile.timezone || 0}` 
    
  return {
    params: {
      ...payload.params,
      formatted_date: [{
        value: moment(params.some_date[0].value).tz(region).format('LLLL')
      }]
    }
  }
}

Meer lezen

Demo aanvragen