all repos — blog @ 8d3f3ea102f855e39fb4891b48a540d211c2a971

Code and content for 5ika.ch

Add new post: Kokyo
Tim Izzo tim@5ika.ch
Fri, 16 Aug 2024 15:38:46 +0200
commit

8d3f3ea102f855e39fb4891b48a540d211c2a971

parent

ab5d07adb2253e99619aceed1d9cf1e27581364c

2 files changed, 53 insertions(+), 12 deletions(-)

jump to
A content/posts/un-bot-pour-les-transports-en-commun.md

@@ -0,0 +1,36 @@

+--- +Title: Un chatbot pour les transports en Suisse +Date: 2024-08-16 +--- + +Il y a environ 7 ans, j'ai développé un chatbot nommé Tipigee fonctionannt sur Telegram et Facebook Messenger qui permettait d'avoir des informations sur les transports publics genevois ([TPG](https://www.tpg.ch/)) rapidement en chattant. + +Ce service, totalement gratuit, reposait sur l'API Open Data des TPG et utilisait DialogFlow de Google (avant l'arrivée des LLMs). Le chatbot a eu un gentil succès et j'ai même eu l'occasion de le présenter à une conférence sur l'Open Data à Lausanne en novembre 2017. Les retours étaient riches et les utilisateurs semblaient contents... jusqu'à ce que les TPG arrêtent leur API Open Data en 2019 pour se raccorder à un service centralisé au niveau fédéral. + +Manquant de temps à cette époque pour effectuer la migration (qui demandait un gros redéveloppement), j'ai dû arrêter le service avec regrets. + +La semaine dernière, dans le cadre de veille technique pour [Caroster](/caroster/), j'ai pris le temps de me plonger dans le service Open Data des transports en commun suisses. Avec 7 ans d'expérience supplémentaire et du temps permis par la période des vacances estivales, j'ai relancé, pour le plaisir, le développement d'un chatbot dans la même idée que Tipigee mais plus droit au but et fonctionnant pour l'ensemble du réseau de transport public du pays, pas juste Genève. + +Ça faisait un moment que l'idée me trottait dans la tête. En tant qu'usager quotidien des transports en commun, j'ai été très déçu par la nouvelle app des TPG, bien moins pratique que la précédente. Quand on arrive à un arrêt de bus ou de tram, on veut savoir rapidement quand part le prochain et si on a le temps de l'attraper. S'il faut faire une dizaine d'actions dans l'app pour avoir la bonne information, cela casse le côté pratique d'un service mobile. +Aussi, la nouvelle app donne **plein** d'informations mais noie l'essentiel dans des écrans complexes. + +L'approche chatbot est bien plus pratique pour cela: on ouvre notre app de messagerie, on fait deux clics et boum, on a les prochains départs pour le train. + +C'est ainsi que j'ai développé [Kokyo](https://t.me/KokyoBot), un chatbot Telegram qui permet d'obtenir des infos sur les transports en commun partout en Suisse (et un peu en Europe aussi). +Pour le moment, les fonctionnalités sont simples et limitées: on recherche un arrêt de bus, tram, train ou bateau et il retourne les 5 prochains départs à cet arrêt. Pour permettre un accès rapide, un système de favoris permet de stocker vos arrêts les plus courants. + +J'envisage prochainement d'ajouter les fonctionnalités suivantes: + +- Possibilité de filtrer les départs pour une certaine ligne +- Recherche d'un arrêt à partir de sa position GPS +- Recherche d'itinéraire + +Techniquement, les données sont récupérées depuis la [plateforme open data pour la mobilité en Suisse](https://opentransportdata.swiss/fr) et leur API _Open Journey Planner_ (standard européen). Le serveur, développé avec Deno, est hébergé sur un VPS chez Infomaniak. + +Ça vous intéresse ? Vous pouvez... + +- tester le bot ici: https://t.me/KokyoBot +- me partager vos retours sur [Mastodon](https://tooting.ch/@5ika) ou par mail +- récupérer le code source: `git clone ssh://5ika.ch:1917/tccli` + +> Pour le moment, le chatbot est encore jeune et potentiellement instable. C'est un service gratuit que je m'efforce de maintenir avec le temps que j'ai à disposition.
M layouts/page/contact.htmllayouts/page/contact.html

@@ -1,15 +1,20 @@

-{{ define "main" }} - {{ $js := resources.Get "js/e2e_contact.js" | minify }} - <script type="text/javascript" src="{{ $js.RelPermalink }}" defer></script> +{{ define "main" }} {{ $js := resources.Get "js/e2e_contact.js" }} +<script type="text/javascript" src="{{ $js.RelPermalink }}" defer></script> - <h1>{{ .Title }}</h1> - {{ .Content }} +<h1>{{ .Title }}</h1> +{{ .Content }} - <form id="contact-form"> - <input id="msg-author" name="author" placeholder="Nom"/> - <textarea id="msg-content" name="content" placeholder="Message confidentiel" rows="5"></textarea> - <button type="submit">Chiffrer le message</button> - </form> +<form id="contact-form"> + <input id="msg-author" name="author" placeholder="Nom" required /> + <textarea + id="msg-content" + name="content" + placeholder="Message confidentiel" + rows="5" + required + ></textarea> + <button type="submit">Chiffrer le message</button> +</form> - <div id="msg-encrypted"></div> -{{ end }}+<div id="msg-encrypted"></div> +{{ end }}