Telephone system:tijdmelding

From Hackerspace ACKspace
Revision as of 08:20, 14 February 2018 by Xopr (talk | contribs) (added category)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Note: Since it regards a Dutch clock, the wiki is written in Dutch as well.

samenvatting

De tijdmelding, 'bekend' onder de nummers 393131, 002, 06-8002, 0900-8002, als Tante Cor (Hoogendam), Willie Brill en Joke Driessen is gegarandeerd gebeld door iedereen ouder dan 30 jaar.

Tegenwoordig zijn DCF77-atoomklokken, GPS-gestuurde klokken, internet-tijd, teletekst-tijd en de GSM die synchroniseert met de mast vaker gebruikte referenties, maar nog steeds wordt 0900-8002(10cpm) regelmatig gebeld (met name tijdens de wisseling van het jaar en de zomer/wintertijd).

Omdat de tijdmelding gebruikt als inspiratie van dit script (sip:tijd@ptt-tele.com) de UTC-tijd uitspreekt, heb ik besloten zelf een versie te schrijven (die de tijdzone honoreert).

Dit script is een bescheiden ode aan de bekende tijdmelding, die inmiddels al 25 jaar dezelfde stem draagt, al 87 jaar bestaat (met 83 jaar gesproken tijdmelding).

implementatie

Om de File:Tijdmelding fragmenten.zip te verzamelen, moet men elke minuut een seconde of 15 aan de lijn blijven. De kosten hiervan zullen tussen de €5,40 en €9,06 bedragen.

dialplan/default/09_talking_clock.xml

  <extension name="talking Dutch clock" >
    <condition field="destination_number" expression="^(((\+|00)?31|0)9008)?002">

      <action application="set" data="default_language=nl"/>

      <action application="answer"/>
      <action application="sleep" data="1000"/>

      <action application="playback" data="$${sounds_dir}/nl/nl/joke/ivr/ivr-this_information_number_costs.wav"/>

      <action application="sleep" data="1000"/>

      <!-- Since the chime starts after four seconds, play it in advance -->
      <action application="phrase" data="speak_time"/>

      <!-- Put caller in endless queue with a time chime every ~14 seconds -->
      <action application="set" data="fifo_chime_list=phrase:speak_time"/>
      <action application="set" data="fifo_chime_freq=4"/>
      <action application="fifo" data="endless_queue in"/>

    </condition>
  </extension>


lang/nl/ivr/time.xml

Merk op dat de standaardinstallatie van FreeSWITCH geen Nederlandse taal heeft geïnstalleerd; voor het uitspreken van de nummers is dit geen probleem, aangezien de 60 nummers los van elkaar zijn ingesproken. Er moet in freeswitch.xml dus wel <X-PRE-PROCESS cmd="include" data="lang/nl/*.xml"/> toegevoegd worden, en lang/nl/nl.xml heeft dan de aanpassing naar <language name="nl" say-module="nl" sound-prefix="$${sounds_dir}/nl/nl/joke" tts-engine="cepstral" tts-voice="callie"> om de audio-map 'joke' in te laden (ervan uitgaande dat de stem Joke Driessen is)

Ook kan deze "phrase macro" een tijd uitspreken aan de hand van drie meegegeven cijfers.

  <macro name="speak_time">
    <input pattern="^(\d+),(\d+),(\d+)$">
      <match>
        <action function="play-file" data="time/beep.wav"/>
        <action function="sleep" data="3000"/>

        <action function="play-file" data="ivr/ivr-at_the_tone.wav"/>
        <action function="play-file" data="digits/$1.wav"/>
        <action function="play-file" data="time/hour.wav"/>
        <action function="play-file" data="digits/$2.wav"/>
        <action function="play-file" data="time/minutes.wav"/>
        <action function="play-file" data="currency/and.wav"/>
        <action function="play-file" data="digits/$3.wav"/>
        <action function="play-file" data="time/seconds.wav"/>
      </match>
      <nomatch>
        <!-- Calculate Dutch time of day in seconds, 14 seconds in advance -->
        <action function="execute" data="set(futuretime=${expr(${strftime_tz(Europe/Amsterdam 60*(%M+60*%H)+%S)}+14))"/>

        <!-- Distill hours, minutes and seconds (as integers, wrapping around 0-23h, 0-59m 0-59s) -->
        <action function="execute" data="set(hours=${expr(mod(ipart(${futuretime}/3600),24))})"/>
        <action function="execute" data="set(minutes=${expr(mod(ipart(${futuretime}/60),60))})"/>
        <action function="execute" data="set(seconds=${expr(mod(${futuretime},60))})"/>

        <action function="play-file" data="time/beep.wav"/>
        <action function="execute" data="sleep(2000)"/>
        <action function="play-file" data="ivr/ivr-at_the_tone.wav"/>
        <action function="play-file" data="digits/${hours}.wav"/>
        <action function="play-file" data="time/hour.wav"/>
        <action function="play-file" data="digits/${minutes}.wav"/>
        <action function="play-file" data="time/minutes.wav"/>
        <action function="play-file" data="currency/and.wav"/>
        <action function="play-file" data="digits/${seconds}.wav"/>
        <action function="play-file" data="time/seconds.wav"/>
      </nomatch>
    </input>
  </macro>