01Ce qu'est une source de données
Une commande, une adresse web, une valeur que le bot annonce.
Une source de données est une adresse web enregistrée une seule fois. Quand un spectateur lance une commande qui la cite, le bot appelle cette adresse, extrait une valeur de la réponse et la dit dans le chat. La météo, une statistique de jeu, la longueur de la file sur votre propre serveur: si ça répond en https et renvoie du JSON ou du texte, une commande peut le lire.
sesame_sam !weather
ItsBagelBot Il fait 21°C à Montréal en ce moment.
Derrière cette ligne se cache une commande personnalisée ordinaire. Sa réponse, telle qu'elle est tapée dans l'éditeur:
Il fait {urlfetch:weather}°C à Montréal en ce moment.
Le jeton nomme la source, pas la valeur. L'endroit où le bot va chercher cette valeur
est enregistré sur la source elle-même, sous forme de chemin: une
adresse à l'intérieur de la réponse. La réponse est l'immeuble, current
est l'étage, temperature_2m est la porte. Écrivez le tout avec des points
et vous obtenez current.temperature_2m. La section trois fait ces clics
pour vous, et l'analogie peut rentrer chez elle.
Note Les sources de données sont gratuites sur toutes les formules. Une chaîne premium passe par une voie interne différente, et chaque limite de cette page est la même pour les deux.
02Ajouter une source depuis l'éditeur de commande
Six clics, sans quitter la commande en cours.
Tout se passe dans Commandes, dans l'éditeur qui s'amarre à côté de votre liste de commandes.
- Placez le curseur là où va la valeur
Ouvrez une commande, cliquez dans Réponse, et laissez le curseur à l'endroit exact où la valeur doit apparaître dans la phrase.
- Ouvrez la palette
Sous la réponse, à côté des pastilles
{user}et{args}, se trouve une puce Source de données. Son infobulle indique «Insère une valeur récupérée depuis une définition d'API enregistrée». - Créez-en une
+ Nouvelle source ouvre la fenêtre Ajouter une source de données: «Indiquez une API web, récupérez une vraie réponse, puis cliquez sur la valeur à afficher dans le chat.»
- Nommez-la et collez l'adresse
Nom affiché est pour vous. Il devient automatiquement le Nom de la définition, le mot qui entre dans le jeton: «Lettres minuscules, chiffres et underscores. Utilisé dans {urlfetch:name}.» Puis Adresse web, en https, jusqu'à 512 caractères.
- Récupérez une vraie réponse
Récupérer un exemple appelle votre API pour de vrai, environ une fois toutes les 10 secondes. Si la réponse arrive dans une forme que la fenêtre ne sait pas lire, prenez le lien ou collez une réponse et collez-en une à la main.
- Cliquez la valeur, puis ajoutez la source
La réponse devient une arborescence sous «Cliquez sur la valeur à afficher dans le chat.» Cliquez
temperature_2met la fenêtre affiche Affiche current.temperature_2m. Ajouter la source enregistre le tout, et la ligne de la palette insère{urlfetch:weather}à votre curseur.
Indiquez une API web, récupérez une vraie réponse, puis cliquez sur la valeur à afficher dans le chat.
Lettres minuscules, chiffres et underscores. Utilisé dans {urlfetch:name}.
Cliquez sur la valeur à afficher dans le chat.
- 01 Le nom affiché est celui que vous lisez dans les listes. Il devient automatiquement le nom de la définition en dessous.
- 02 Le nom de la définition est le mot placé dans le jeton: lettres minuscules, chiffres et underscores, jusqu’à 32 caractères.
- 03 Adresse web: https, absolue, jusqu’à 512 caractères. Le bot l’envoie telle quelle, à chaque fois.
- 04 Récupérer un exemple lance une vraie requête vers votre API. Environ un test toutes les 10 secondes.
- 05 Cliquer une valeur enregistre son chemin sur la source. «Utiliser toute la réponse» bascule en texte brut.
Une fois la source créée, la même puce la répertorie. Chaque source enregistrée affiche son chemin, ce qui permet de distinguer deux flux météo d'un coup d'œil, et cliquer une ligne dépose le jeton là où était votre curseur.
Insérer une variable
- 01 La puce Source de données se trouve avec les pastilles de jetons sous Réponse, à côté de Compteur.
- 02 Chaque ligne montre le chemin enregistré sur la source, ou «Texte brut» quand elle affiche toute la réponse.
- 03 + Nouvelle source ouvre la fenêtre sans perdre la commande en cours d’écriture.
Astuce Une chaîne peut garder 20 définitions. Au-delà, l'éditeur affiche «Vous avez atteint la limite de 20 définitions pour votre chaîne. Supprimez-en une pour faire de la place.» La suppression demande deux clics, et le serveur nomme les commandes qui citent la source avant de la lâcher: «Ces commandes la citent. Elles perdront ces données si vous supprimez :».
03Choisir la valeur
Un chemin, ce sont des points entre les étapes. Cliquez une valeur et regardez le jeton s’écrire.
Voici la même arborescence que dans le tableau de bord, avec les mêmes règles. Seules
les valeurs sont cliquables; une branche comme current contient d'autres
choses, elle ne peut donc pas terminer un chemin. Modifiez la réponse à gauche et
l'arborescence suit, ce qui reste la façon la plus rapide de répéter avec votre propre
API avant d'enregistrer quoi que ce soit.
Enregistré sur la source
Jeton que vous tapez
Chemin écrit dans le jeton
Le chat afficheraitcoupé ici, 100 octets
Le mode texte brut n'enregistre aucun chemin. Le bot nettoie la réponse et affiche ses 100 premiers octets.
| Règle | Ce que ça veut dire |
|---|---|
| Des points entre les étapes | current.temperature_2m ouvre current, puis en sort temperature_2m. |
| Les listes utilisent des chiffres nus | items.0.name est la première entrée. Les crochets ne font pas partie de la grammaire. |
| Profondeur | Jusqu’à 8 étapes. Au-delà, l’arborescence refuse la valeur: «Plus profond que 8 niveaux. Choisissez quelque chose de plus proche du sommet.» |
| Chaque étape | Lettres, chiffres, underscore et trait d’union, jusqu’à 64 caractères chacune. |
| La fin du chemin | Se pose sur une valeur: du texte, un nombre, true ou false. S'arrêter sur un objet, une liste ou un champ vide compte comme une définition cassée, et le chat reçoit le jeton brut. |
| Un chemin dans le jeton | L'emporte sur celui enregistré sur la source. {urlfetch:weather.current.wind_speed_10m} lit une autre valeur à la même adresse. |
| Le nom | Insensible à la casse. {URLFETCH:Weather} et {urlfetch:weather} désignent la même source. |
| La valeur | Nettoyée, rognée, puis coupée à 100 octets avant d’arriver dans le chat. |
Astuce
Une seule adresse enregistrée peut nourrir plusieurs commandes. Enregistrez
{urlfetch:weather} sur current.temperature_2m pour
!weather, puis écrivez
{urlfetch:weather.current.wind_speed_10m} dans !wind.
Même source, même budget de 20 définitions, deux réponses différentes.
04Les API qui demandent une clé
Les clés vivent sur votre compte, scellées, et voyagent dans un en-tête Authorization.
Certaines API exigent une clé avant de répondre. Ajoutez-la une fois dans Paramètres, sur le panneau Clés API: un libellé jusqu'à 32 caractères pour la reconnaître plus tard, et le secret lui-même, jusqu'à 512 caractères. L'indication du panneau le dit mieux que nous: «Secrets au niveau du compte pour les sources de données. Les délégués peuvent les utiliser, jamais les lire.»
Le secret est scellé avant d'être écrit et il n'est plus jamais réaffiché. Il vous reste
le libellé et les 4 derniers caractères, ce qui suffit à distinguer deux clés quand vous
en changez une. Quand une source de données porte une clé, le bot l'envoie dans un
en-tête Authorization: Bearer à chaque récupération, et l'adresse reste
propre.
Dans la fenêtre «Ajouter une source de données», le champ Clé API n'apparaît qu'une fois qu'au moins une clé est enregistrée. Avant cela, il indique «Aucune clé requise», ce qui est aussi la bonne réponse pour la plupart des API publiques.
Attention Gardez la clé hors de l'Adresse web et hors de la réponse de la commande. Une adresse est stockée en texte et toute personne ayant accès au tableau de bord peut la lire, et une réponse part dans le chat où tout le monde la voit. Si votre API n'accepte la clé qu'en paramètre d'URL, considérez cette clé comme publique et changez-la régulièrement.
05Limites et délais
Tout est plafonné, et le cache fait le gros du travail.
Les chiffres ci-dessous sont ceux qui tournent en production. Le cache est celui que vous rencontrerez en premier: une réponse acceptée est réutilisée pendant 30 secondes, donc une commande lancée 40 fois en une minute n'appelle votre API que deux fois.
| Limite | Le chiffre |
|---|---|
| Définitions par chaîne | 20. |
| Sources de données dans une réponse | 3. L'éditeur refuse d'en enregistrer une quatrième. |
| Adresse web | https uniquement, absolue, jusqu’à 512 caractères. |
| Adresses refusées | Les adresses IP littérales, localhost, et tout ce qui finit par .local ou .internal. Vérifié à l’enregistrement puis à chaque récupération. |
| Taille de la réponse | 1 Mio, mesuré après décompression. |
| Type de contenu | application/json ou text/*. |
| Délais | L'API a 2,5 secondes, le service de récupération 3 secondes, et le bot cesse d'attendre à 3,5 secondes. |
| Cache | Une bonne réponse est gardée 30 secondes. Un refus, comme un 404 ou un chemin qui ne trouve rien, est gardé 15 secondes. Une panne n'est pas mise en cache. |
| Requêtes par chaîne | 6 par minute, toutes définitions confondues. |
| Requêtes par définition | 30 par minute. |
| Requêtes par hôte d'API | 120 par minute, comptées sur toutes les chaînes pointant vers cet hôte. |
| Redirections | Jusqu’à 3 sauts, chacun restant en https. |
| Un hôte qui échoue en série | Cinq échecs de transport d’affilée et cet hôte est mis au repos 60 secondes. |
| «Récupérer un exemple» | Environ un test toutes les 10 secondes. Le refus reste en anglais: "Too many test runs. Each one calls the real API. Wait about 10 seconds and try again." |
- Requêtes réellement reçues par votre API
- 2 par minute
- Servies par le cache de 30 secondes
- 10 par minute
- Refusées par le plafond de 6 par minute
- 0 par minute
Ces exécutions affichent [source unavailable] dans le chat.
Le cache existe pour votre quota d'API. Sans lui, un seul raid dépenserait un mois d'appels en une soirée, et toutes les autres chaînes pointant vers le même hôte le sentiraient aussi.
Note
Deux secondes de patience, c'est long dans un chat. Si votre API est lente, attendez-vous
à [source timed out] pendant un direct chargé et écrivez la phrase pour
qu'elle se lise encore sans la valeur.
06Ce que le chat affiche en cas d’échec
Quatre replis, tous courts, tous en anglais où que soit votre chat.
Une commande ne devient jamais muette à cause d'une source de données. Le reste de la phrase part quand même et la valeur est remplacée par l'une de ces quatre chaînes, ce qui vous permet de lire le chat et de savoir ce qui a cassé.
| Ce qui s'est passé | Ce que le chat affiche |
|---|---|
| L'API a refusé, elle vous a limité, ou le message est la relecture d'un ancien | [source unavailable] |
| L'API a renvoyé une erreur, ou le chemin n'a rien trouvé d'utilisable | [source error] |
| L'API a mis plus de temps que le bot n'attend | [source timed out] |
| La source manque, est en pause, ou le jeton en nomme une jamais enregistrée | Le jeton, affiché tel quel: {urlfetch:weather} |
sesame_sam!weather
ItsBagelBotIl fait [source unavailable]°C à Montréal en ce moment.
Votre clé a été rejetée, ou le point d'accès a écarté la requête. Testez depuis le tableau de bord et vous obtenez le même verdict: «L'API a refusé la requête. Vérifiez la clé ou l'URL.»
Un plafond a été atteint: 6 récupérations par minute pour la chaîne, 30 pour cette définition, ou 120 par minute pour cette API toutes chaînes confondues. Rien n'est cassé et la minute suivante refonctionne.
Le bot attend 3,5 secondes puis parle sans la valeur. Une API lente sous charge en est la raison habituelle.
Le chemin était correct mais la réponse n'avait rien au bout, en général parce que l'API a renommé un champ. Ouvrez la source, récupérez un exemple, et recliquez la valeur.
Une source en pause ou supprimée n'a rien à développer, donc le jeton est affiché tel qu'il est tapé. Le test du tableau de bord le dit clairement: «Définition manquante ou en pause. Le chat affiche le jeton brut tant qu'elle n'est pas active.»
Trois sources de données par réponse est la limite de l'éditeur, et il refuse d'en enregistrer une quatrième. Le bot garde son propre plafond à huit et affiche tel quel chaque jeton au-delà, comme celui-ci.
Note
Ces quatre chaînes ne sont pas traduites. Une chaîne francophone voit elle aussi
[source unavailable], ce qui les garde faciles à rechercher et garde cette
page honnête sur ce que vos spectateurs liront.
07Ce qu’une source ne fera pas
Les bords, en un écran, avant de concevoir une commande autour.
-
L'adresse est figée à l'enregistrement.
{args}et{user}restent intacts dans une adresse web, donc un spectateur ne peut pas diriger la requête envoyée à votre API. -
Les requêtes sont en
GET, et les en-têtes ne sont pas les vôtres à régler. Le seul que le bot ajoute estAuthorization: Bearer, et seulement quand la source porte une clé. - Les jetons ne se développent que dans les réponses de commandes personnalisées, après les vérifications de permission, de direct et de délai. Un minuteur publie son texte brut, et les compteurs laissent le jeton tranquille.
-
Un message de chat rejoué ne récupère jamais deux fois. Si le bot relit un
évènement ancien, le chat reçoit
[source unavailable]plutôt qu'un second appel à votre API. - Les adresses privées et locales sont écartées aux deux bouts: à l'enregistrement, puis de nouveau au moment de la récupération.
Astuce
Citez deux fois la même source dans une réponse et le bot ne récupère qu'une fois.
Écrivez {urlfetch:weather} dans la phrase et
{urlfetch:weather.current.wind_speed_10m} juste après: deux
valeurs, une requête, une ligne de votre quota.