Moscou voyage hack à travers les yeux des participants

Les équipes informatiques des aéroclubs à Moscou voyagent

salut! Vous avez probablement entendu parler du premier hackathon en Russie sur le thème de la numérisation de l'industrie du tourisme. La société AeroClub IT était représentée par deux équipes à la fois, et nous avons réussi non seulement à passer un bon moment, mais aussi à développer des projets prototypes, à nous essayer à un format de travail inhabituel et à communiquer avec les autres participants. Under the cut - l'histoire d'une de nos équipes!

Lors de la candidature, il a été nécessaire de choisir l'une des 10 tâches (pistes) proposées. Il s'agissait de sociétés bien connues telles que MegaFon, Facebook, PANORAMA 360, MTS Startup Hub, Aeroexpress, Pushkin Museum, Tsaritsyno Park, Discover Moscow, City of Discoveries et Russpass.

Nous avons demandé la participation de deux équipes à la fois: «Team 73» sur la piste «Aeroexpress» , et «Nouveaux horizons» sur «Tsaritsyno» . La première a été choisie car elle est proche du domaine d'activité de notre entreprise (solutions logicielles B2B), et en cas de victoire nous pourrions bien poursuivre la coopération et le développement. Le deuxième - les gars qui voulaient échapper aux tâches quotidiennes et essayer quelque chose de nouveau.

Dans le chat général de l'événement, ils ont dit que 1241 candidatures avaient été soumises (à la fois en équipe et en individuel), et, comme vous pouvez déjà le deviner, nous avons passé la sélection! Et nos deux équipes!
Il ne restait plus qu'à participer au hackathon lui-même.

Hackathon


Tout était comme d'habitude sur le site: inscription, espace snack, tables avec numéros d'équipe.
A 9h30 une brève ouverture a eu lieu: quelques mots des organisateurs, le début solennel du hackathon, et les travaux ont commencé. Ensuite, nous parlerons au nom des participants de l'équipe Team 73, qui a repris la tâche d'Aeroexpress.

Au début, nous avons discuté avec les mentors: nous avons appris ce qu'ils aimeraient voir dans la décision, quelles sont les nuances et à quoi donner la préférence. Les équipes ont été un peu surpris quand il s'est avéré que les ressources promises ne seraient pas fournies. Selon la description de la tâche, nous pourrions obtenir l'API Aeroexpress, l'hébergement, le nom de domaine et le certificat pour le projet. Comme les mentors l'ont expliqué, l'API ne peut pas fournir de raisons de sécurité, mais ils n'ont pas vraiment expliqué le reste. Heureusement, nous avions une «option de sauvegarde» - l'hébergement personnel. En conséquence, il a sauvé notre position.

Décision


Le principal problème à résoudre était l'automatisation de la vente de billets pour Aeroexpress pour les personnes morales. personnes. Nous avons fait des recherches sur le processus actuel et, pour le moins, en état de choc. Comme nous l'avons appris lors d'une offre publique aux personnes morales , une lettre d'acceptation est d'abord envoyée par la société cliente pour demander le nombre de billets requis, indiquant les détails de la société. Ensuite - la facture est payée et, surtout, les billets sont reçus sous la forme d'une archive protégée par mot de passe. C'est, comme vous le comprenez, le niveau minimum d'automatisation.

Nous avons esquissé CJM (carte de parcours client), choisi la fonctionnalité minimale nécessaire et réfléchi à la conception. À un moment donné, nous avons raisonné comme suit: chaque équipe, d'une manière ou d'une autre, présentera approximativement les mêmes solutions: l'enregistrement des personnes morales. personnes, achat de billets, facturation, etc. Pour se démarquer, il fallait trouver quelque chose de spécial. Au minimum, vous avez besoin d'un bon design, puis dans le contexte général, notre solution sera un peu plus perceptible. Heureusement, il y a un designer dans notre autre équipe, et elle nous aidera avec cela. Mais vous aviez besoin d'autre chose, quelque chose de complètement inhabituel pour le B2B. Et puis nous avons décidé d'ajouter l'intégration avec Alice, la très assistante vocale de Yandex.

Il y avait plusieurs raisons: la principale - nous avons une certaine expériencetravailler avec elle pour réaliser rapidement un prototype plus ou moins utile. Un autre - le B2B, en règle générale, est associé à quelque chose d'ennuyeux et de formel, et obtenir des billets via une colonne parlante est quelque chose de nouveau. De plus, nous avons deux développeurs backend, et pousser ensemble dans le même projet n'est pas très pratique, et en parallèle, nous ferons à la fois la fonctionnalité principale et la fonctionnalité supplémentaire.
Je vais commencer par la solution principale - Aeroexpress Wholesale Portal. Selon notre idée, il se compose de deux parties: le front-end et, bien sûr, le back-end.

L'extrémité avant


Notre front-end est un adhérent d'Angular, d'où le choix de ce framework particulier. Angulaire «prêt à l'emploi» fournit un bon environnement de démarrage, dans lequel vous n'avez pas à vous soucier de la configuration, du routage et de la connexion au backend - c'est ce dont le hackathon a besoin. De plus, notre développeur travaille avec lui depuis longtemps et a accumulé plusieurs de ses bibliothèques avec lesquelles vous pouvez gagner un peu de temps sur le hackathon.

En conséquence, nous avons eu une telle interface:


Nous avons essayé de rendre l'apparence moderne, élégante, en gardant les couleurs d'Aeroexpress.

Ici, nous avons implémenté les fonctionnalités suivantes:

  1. Rechercher le nom de l'entreprise par TIN
  2. Inscription d'une entreprise et d'une personne de contact avec indication du volume approximatif de vente de billets par mois.
  3. Autorisation des employés de l'entreprise
  4. Commande de billets
  5. Nombre de voyages à venir
  6. Historique des commandes
  7. Compte personnel du gestionnaire Aeroexpress

Nous avons essayé de rendre l'enregistrement de l'entreprise aussi simple que possible sur le portail: son représentant n'a qu'à connaître le NIF du légal. personnes et entrez-le dans le champ approprié. Si le nom qui apparaît est approprié, vous pouvez continuer. L'inscription sur le portail est simultanément une demande de coopération avec Aeroexpress. Les mentors ont suggéré qu'il leur serait plus facile d'examiner de telles demandes si les représentants indiquaient le volume approximatif de ventes de billets par mois, pour cela nous avons ajouté un champ approprié.

À première vue, il peut sembler que peu de choses ont été faites, mais notre solution a un design très beau et bien conçu. Il a été fabriqué à partir de zéro, sans utiliser de modèles prêts à l'emploi. Selon l'expérience antérieure, les hackathons ont souvent remporté des décisions qui n'étaient pas si bien élaborées, mais «emballées dans un bel emballage», et cette fois, nous avons décidé de nous fier à une belle apparence. Pour l'avenir, je dirai que les mentors étaient ravis de notre conception, mais ont jugé les solutions précisément en fonction du nombre de fonctions mises en œuvre et des perspectives futures d'application de la solution (que certaines équipes ont bien réfléchies).

Backend


Nos deux développeurs sont des Sharpists chevronnés (ils écrivent en C #), donc le back est également basé sur le noyau .net. La version 2.1 a été choisie, car les applications sur elle montent définitivement sur un hébergement de sauvegarde, et il est dangereux d'expérimenter sur un hackathon - vous pouvez perdre du temps et vous retrouver sans solution. Nous avons eu la web-api habituelle, avec blackjack et DI.
Ici, nous avons fait tout le nécessaire pour le "front":

  1. Recherche d'informations sur la société par TIN
  2. Enregistrement de l'entreprise et de sa personne de contact
  3. Authentification par mot de passe
  4. Autorisation de jeton au porteur
  5. Obtention d'informations utilisateur
  6. Obtention de la liste des employés de l'entreprise de l'utilisateur actuel
  7. Créer une commande
  8. Envoi d'un ticket par la poste après avoir créé une commande
  9. Envoi d'un ticket par mail à l'utilisateur demandé (pour intégration externe)
  10. Obtenir des informations sur tous les billets d'entreprise
  11. Liste des commandes
  12. Liste des sociétés enregistrées

Intéressant - intégration avec la recherche d'organisations par TIN ou BIN dans Dadata , pour un enregistrement facile des personnes morales . visages. En bref, le backend reçoit une requête «trouver une entreprise» avec le TIN donné et envoie ces informations à l'API de service. En réponse, si l'entreprise est trouvée, nous obtenons des informations à son sujet: un nom court (nous donnons la réponse), et des détails. Il est utile de sauvegarder les données obtenues quelque part, car elles seront utiles dans la formation des comptes: il suffira à l'utilisateur de vérifier leur exactitude, ce qui est beaucoup plus facile que de «conduire seul».

Compétence de l'assistant vocal


Les compétences des assistants sont généralement des services Web qui fonctionnent avec un protocole de demande et de réponse spécifique. Comme déjà mentionné, nous avons choisi l'intégration avec Alice en complément de la solution principale. Vous pouvez en savoir plus sur le protocole pour travailler avec lui à partir de la documentation , ainsi que dans le dernier article sur les compétences . Dans notre cas, le service Web de compétences était également basé sur le noyau .net.

L'utilisateur doit être à l'aise pour interagir avec la compétence, comme s'il parlait avec son ami proche. Pour ce faire, au minimum, il est nécessaire de maintenir le contexte de la conversation, de comprendre de quel type d'objet l'utilisateur parle et de répondre sur le sujet. Si l'utilisateur s'écarte de l'objectif du dialogue, vous devez pouvoir le remettre sur la bonne voie. Et tout cela ne devrait pas se produire plus de 3 secondes - c'est combien de temps la plate-forme Yandex.Dialog vous donne la possibilité de répondre. Si la réponse n'est pas reçue dans le délai imparti, le dialogue se termine et l'utilisateur est informé que la compétence ne répond pas et il est peu probable qu'il veuille y revenir.

Vous pouvez faire face à cette tâche à l'aide de divers services conçus pour maintenir un dialogue avec l'utilisateur. Nous avions déjà une certaine expérience avec Dialogflow.de Google, alors choisissez-le. À tout le moins, il existe pour lui une alternative russe: Aimylogic de JustAI, mais je n'ai pas encore eu à travailler avec.

Dans notre cas, un dialogue assez simple est supposé: l'utilisateur demande de lui envoyer un ticket, et s'il a immédiatement nommé son nom, nous l'envoyons. Sinon, nous spécifions le nom complet, puis nous envoyons déjà.

Affiner un nom d'utilisateur à tout prix

Clarification du nom d'utilisateur à tout prix

À notre avis, la chose la plus difficile dans cette tâche est d'obtenir le nom de l'utilisateur. S'ils ne sont pas nommés, vous devez les obtenir d'une manière ou d'une autre de l'utilisateur, puis effectuer l'action souhaitée. Heureusement, DF (Dialogflow) vous permet de le faire hors de la boîte.
Pour ce faire, dans l'intention (intention), dans laquelle le nom est censé être reçu, vous devez ajouter des phrases de formation contenant le nom complet et les marquer de sorte que ces informations tombent dans le paramètre d'intention correspondant. Si le nom est reconnu, le paramètre contiendra cette valeur.

Phrases de formation balisées

Phrases de formation balisées

Paramètres d'intention

Paramètres d'intention

Sinon, vous devez obtenir ces paramètres à tout prix. Pour ce faire, marquez le paramètre avec le nom complet comme obligatoire (une coche dans la colonne «Obligatoire») et spécifiez des phrases de clarification pour celui-ci («Invites»). Maintenant, si nécessaire, DF leur rendra en réponse. Et si le nom est reconnu - alors les réponses habituelles à cette intention, ainsi que l'action ("Action").

Clarification des phrases

Clarification des phrases

Réponses communes

Réponses habituelles

Alors tout est simple: si le nom de l'action est reçu et que la réponse DF a tous les paramètres nécessaires, nous effectuons cette action et transmettons la réponse à l'utilisateur. Sinon, envoyez le texte de clarification.

Pour envoyer des billets, la compétence doit répondre à une demande au backend de notre portail avec l'en-tête d'autorisation et le nom de l'utilisateur dans le corps. L'entreprise sera déterminée par le titre et par le nom, il est facile de trouver le bon utilisateur. Dans la vie, le titre peut être obtenu en autorisant la compétence, mais au hackathon nous l'avons simplement «codé en dur» pour gagner du temps. Avec un nom complet, c'est un peu plus compliqué.

Vous pouvez utiliser les noms reconnus dans DF, mais il y a un petit problème: si l'utilisateur ne s'appelle pas dans le cas nominatif, alors ce paramètre sera également écrit dans le paramètre. Sur le backend, les noms d'utilisateur sont écrits sous une forme normale (dans le cas nominatif), et une incompatibilité d'orthographe le rendra difficile à trouver.

Et ici, nous avons remarqué que dans la demande d'Alice viennent des noms reconnus, normalisés et enregistrés dans des champs séparés!

Nom reconnu

Nom reconnu

Malheureusement, la NLU des dialogues Yandex ne gère pas très bien les noms plus complexes, par exemple Mamedov Polad Murtuza oglu, mais cette option convient également pour une démonstration lors du hackathon.

En conséquence, nous avons obtenu une telle chaîne:

Graphique de requête

Diagramme de requête

À la fin du hackathon, nous avions les trois parties de notre solution prêtes, que nous avons montrées aux mentors. Par leur réaction, il était difficile de dire s'ils aimaient notre développement ou non, mais, comme nous l'avons appris plus tard lors d'une conversation personnelle, une démonstration d'intégration avec Alice a certainement eu l'effet wow attendu.

Une commission technique a également eu lieu pendant les travaux: chaque équipe devait donner accès à leurs référentiels, et y faire des «commits» au moins une fois par heure. Parfois, des représentants de la commission venaient nous voir et discutaient de la solution en cours d'élaboration. Au fait, vous pouvez découvrir leur impression du hackathon ici .

Gagnants


Après les discours des conférenciers invités, les présentations finales des équipes gagnantes dans une tâche ou une autre ont commencé. L'équipe AeroTeam a remporté la piste Aeroexpress. Comme les mentors nous l'ont dit plus tard (ils sont également le jury), c'est cette équipe qui avait le concept le plus réfléchi pour le développement de la solution, et les gars ont pris en compte et travaillé sur certains points auxquels même les clients eux-mêmes n'ont pas pensé (malheureusement, ils n'ont pas mentionné lesquels). Pour la victoire, il nous manquait des détails vraiment intéressants pour les mentors d'un point de vue commercial. Ils ont choisi une solution suffisamment développée pour entamer son développement «tout de suite», ce qui signifie qu'ils étaient très objectifs dans leur décision, et c'est formidable.

Comme nous l'avons appris plus tard lors d'une conversation avec les participants d'AeroTeam, ils se sont réunis dans une équipe en désordre: ils ont découvert le hackathon de sources complètement différentes, sont entrés d'une manière ou d'une autre dans le chat général de l'événement, et ils se sont unis. Il y avait trois personnes à AeroTeam. À un moment donné, on leur a également proposé un concepteur UX, mais ils ont refusé et se sont plutôt bien débrouillés sans ce rôle. Les gars n'avaient pas de conditions préalables spéciales pour la victoire (par exemple, sous la forme de travaux préparatoires), et ils ont réussi à faire un travail si puissant, qui, à mon avis, méritait à juste titre une victoire.

Notre autre équipe, malheureusement, n'est pas non plus montée sur scène avec un pitch, ce qui signifie qu'elle n'a pas gagné sur sa piste, mais nous raconterons cette histoire une autre fois. En attendant, qui est devenu le super vainqueur du hackathon? Cette nomination a été donnée à l'équipe qui, selon le jury, a pris la meilleure décision parmi tous les vainqueurs d'une catégorie ou d'une autre: le Golden PSG. Ils ont travaillé sur une tâche depuis la plate-forme d'observation Panorama 360.. Lors de la mission, il a été supposé que les visiteurs du site seraient photographiés sur un «chromakey» (toile ordinaire), choisiraient un autre arrière-plan coloré à la place et imprimeraient immédiatement la photo. Les gars sont allés plus loin et leur solution vous permet de supprimer tout arrière-plan (et par programme, il est beaucoup plus difficile à faire que de supprimer la même couleur) autour de l'objet principal (personne) et de le remplacer par un autre. À notre avis, cette décision mérite également la victoire.

Les participants eux-mêmes sont des étudiants du département du budget de l'ITMO. Comme les gars l'ont dit dans une conversation personnelle, ils étaient toujours sur le site, la nuit, ils ne sont allés nulle part et ont «labouré» pendant près de 26 heures sur 30 (par intermittence, bien sûr). Ils avaient déjà de l'expérience dans les hackathons, mais le prix est remporté pour la première fois.

résultats


Tout d'abord, il vaut la peine de consacrer plus de temps à la mise en œuvre de la décision principale, afin que le jury puisse la «toucher», la voir en direct sur le prototype, et non sur des maquettes et des mots. Il convient également d'envisager de nouvelles perspectives de développement du projet. Toutes choses étant égales par ailleurs, les juges peuvent donner la préférence à une décision qui remplit non seulement la tâche en cours, mais aussi les objectifs d'accompagnement du client.

Néanmoins, si vous pouvez vous démarquer d'une manière ou d'une autre - pour faire un beau design ou pour mettre en œuvre une idée inhabituelle, cela vaut vraiment la peine d'être utilisé. De l’expérience de la participation à d’autres compétitions, cela peut aider à gagner, sinon au principal, puis au moins dans la nomination supplémentaire - par exemple, pour recevoir un «prix du spectateur», le cas échéant. Ou les participants et les juges se souviendront simplement de leur approche inhabituelle.

Avant l'événement, il vaut la peine de faire des recherches sur les affaires du client afin de mieux connaître sa «douleur» et de trouver quelque chose pour l'éliminer. Les idées et les petits développements ne sont pas une «solution toute faite», de sorte que les règles du hackathon ne seront pas violées et qu'il y aura plus de temps dans la compétition elle-même.

Vous ne devez pas vous fier à la fourniture de ressources par le client, même si elle est prescrite dans la tâche. En général, il faut toujours être bien préparé pour un hackathon: augmenter l'infrastructure minimale nécessaire, envisager de publier un projet, rechercher l'API des services nécessaires, etc. Il vaut vraiment la peine d'envisager une solution à un problème tel que votre propre accès à Internet, car la plupart de ces événements ont des difficultés avec cela. Ici, par exemple, la plupart du temps, il n'y avait pas de connexion stable. L'ironie est que le symbole du hackathon était un dinosaure hors ligne, qui peut être vu dans Chrome lorsque vous n'avez pas Internet.

Je voudrais noter séparément l'organisation du hackathon: en général, c'était à son meilleur. Chaque étape s'est déroulée à l'heure, sur le site lui-même était également en ordre: il y avait assez de nourriture pour tout le monde, il y avait beaucoup de snacks. Le deuxième jour, en théorie, il était possible de se rendre à la partie publique après l'enregistrement préalable, mais, par conséquent, n'importe qui pouvait y accéder. Une petite fête avec un groupe musical et une table de buffet ont également été un succès! Nous exprimons notre gratitude et notre respect aux organisateurs. Notre note - quatre dinosaures verts sur cinq - donc il y avait quelque chose à rechercher!

C'était le hack de voyage de Moscou pour nous: quelque chose dans notre solution était mauvais, et quelque chose était bon. Dans tous les cas, nous tiendrons compte de nos erreurs et nous nous en souviendrons lors de la prochaine compétition. En général, participer à un hackathon, en particulier dans une équipe de collègues, c'est super! Pour nous, ce n'était pas seulement une expérience en or, mais aussi le meilleur team building. Nous avons joué très cool, fait des choses folles sans sommeil ni repos. Nous étions convaincus que nous pouvons travailler de manière productive sur des tâches complexes en peu de temps et dans une situation stressante. L'essentiel est de profiter du processus!

Si vous êtes intéressé par les détails techniques de la mise en œuvre de notre solution - écrivez dans les commentaires, nous nous ferons un plaisir de vous le dire.
Ne dis pas au revoir, à bientôt au hub
Équipe 73 Team, Aero Club IT

Les équipes informatiques des aéroclubs à Moscou voyagent

All Articles