Projet

Général

Profil

Development #44313

sms OVH : migrer vers l'API plus officielle

Ajouté par Thomas Noël il y a presque 4 ans. Mis à jour il y a plus de 3 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
22 juin 2020
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Dans le connecteur SMS OVH, on utilise un vieux truc http2sms qui va un jour disparaitre de l'offre OVH. De plus ce webservice est plutôt mal fichu, il ne répond pas dans des standard normaux (code http 2xx en cas d'erreur..).

Il faut plutôt utiliser https://eu.api.ovh.com/console/#/sms/%7BserviceName%7D/jobs#POST

Doc : https://docs.ovh.com/fr/sms/api_sms_cookbook/


Fichiers

Révisions associées

Révision 20179809 (diff)
Ajouté par Valentin Deniaud il y a plus de 3 ans

ovh: support /jobs/ API endpoint (#44313)

Historique

#1

Mis à jour par Valentin Deniaud il y a presque 4 ans

J'ai regardé et pas tout compris, sans avoir non plus réussi à savoir si ces deux api servent vraiment le même objectif.

Déjà, la doc de http2sms a été mise à jour récemment (la page indique 18/05/2020) sans mention de déprécation aucune (https://docs.ovh.com/fr/sms/envoyer_des_sms_depuis_une_url_-_http2sms/).

Ensuite, l'API /sms/{serviceName}/jobs, il n'y a rien du tout pour spécifier un utilisateur SMS comme avec http2sms. Sans avoir été vérifier je suppose qu'on a un serviceName commun à tous les clients et qu'on a créé pour chacun un utilisateur, donc on ne peut pas utiliser cette API (du moins, sans comprendre comment lui donner un utilisateur à manger).

Il faut aussi noter que l'usage de cette API est nettement moins simple, il faut dépendre du client python ovh, ou implémenter le système de signature qui va bien. En plus il faudra gérer des API keys côté OVH, dont je ne suis pas sûr qu'on puisse en générer sans date d'expiration.

Bref, pas fun, sauf si je passe complètement à côté du truc.

#2

Mis à jour par Thomas Noël il y a presque 4 ans

Valentin Deniaud a écrit :

Bref, pas fun, sauf si je passe complètement à côté du truc.

(Vu ensemble au bureau)

En fait ça changera notre façon de gérer les SMS OVH, en achetant un compte SMS dédié pour chaque client (qui aura son serviceName genre sms-xxx), puis un token d'utilisation permanent lié à ce compte sms-xxx via https://eu.api.ovh.com/createToken/index.cgi?GET=/sms&GET=/sms/sms-xxx/jobs&POST=/sms/sms-xxx/jobs. C'est le résultat de cette création de token qu'il faudra renseigner dans le connecteur SMS.

Ca sera nettement plus facile à suivre dans l'interface OVH, pas de "mix" bizarre entre utilisateur d'API et expéditeurs, etc. Et plus facile aussi de suivre la facturation, etc.

Cela signifie cependant qu'il faut créer un nouveau connecteur car l'actuel, qui utilise http2sms, devra perdurer quelques temps.

On peut aussi choisir de créer un nouveau endpoint dans le connecteur actuel... mais je ne sais pas si ça va être clair.

#3

Mis à jour par Benjamin Dauvergne il y a presque 4 ans

Ouaip :

Si vous gérez plusieurs comptes SMS (serviceName : sms-XXXX-1, sms-XXXXX-2 …) vous pouvez transférer des crédits entre vos différents comptes. Pour cela utilisez la méthode POST /sms/{serviceName}/transferCredits en indiquant le compte SMS à débiter, celui à créditer et enfin le montant de crédits à transférer.

Ce mécanisme est très intéressant pour gérer plusieurs comptes SMS de façon indépendante notamment pour de la revente à différents acteurs. Pour isoler les comptes vous devez mettre en place des Tokens distincts afin d’isoler les droits. Cette opération se réalise au moment de créer vos Tokens d’application, dans les droits vous aurez à spécifier explicitement que telle application n’a des droits que sur un ServiceName spécifié dans les url autorisées.

C'est un peu casse couille les histoires de tokens par contre, on dirait des signatures Publik.

#4

Mis à jour par Valentin Deniaud il y a presque 4 ans

Valentin Deniaud a écrit :

gérer des API keys côté OVH, dont je ne suis pas sûr qu'on puisse en générer sans date d'expiration

(on peut)

Benjamin Dauvergne a écrit :

C'est un peu casse couille les histoires de tokens par contre, on dirait des signatures Publik.

Ouais, pour bien faire il faudrait créer un token par client, et le restreindre à POST /sms/{LeServiceNameDuClient}/jobs.
Si on estime que c'est lourdingue, ça sera possible d'avoir le même token pour tous les clients qui donne accès à POST /sms/*/jobs, mais bon.
Btw un token c'est en fait trois paramètres, ça occupera de toute façon du temps de copier coller (https://docs.ovh.com/fr/api/api-premiers-pas/).

#5

Mis à jour par Valentin Deniaud il y a presque 4 ans

Bon Thomas avait déjà dit tout ça, j'ai lu trop en diagonale.

#6

Mis à jour par Valentin Deniaud il y a presque 4 ans

On avait un peu les yeux dans nos poches, bien entendu il existe /sms/{serviceName}/users/{login}/jobs qui permet de faire la même chose que http2sms...

Ensuite il y a toute l'API en /users/ qui devrait permettre de suivre correctement la consommation, si on a envie de mettre quelque chose comme ça en place.

Donc j'en reviendrais bien au point du départ du ticket, simplement mettre à jour l'endpoint. Mais comme discuté plus haut, il faut un token pour utiliser la nouvelle API, on ne peut pas juste remplacer sans changer le paramétrage du connecteur.

On pourrait exploiter le fait que http2sms demande login et mot de passe, alors que l'API demande seulement le login, puisque la sécu est gérée au niveau de l'API. Par ex :
  • ajouter les nouveaux champs clés d'API au connecteur
  • marquer le champs mot de passe comme déprécié
  • dans le code, si le mot de passe est renseigné, utiliser http2sms, si les clés le sont, utiliser l'API

Et hop l'existant continue à marcher, il peut être migré au fil de l'eau. Ça me semble mieux que d'ajouter un nouvel endpoint/nouveau connecteur.

#7

Mis à jour par Thomas Noël il y a presque 4 ans

Valentin Deniaud a écrit :

  • dans le code, si le mot de passe est renseigné, utiliser http2sms, si les clés le sont, utiliser l'API

Yep c'est la bonne idée.

#8

Mis à jour par Valentin Deniaud il y a plus de 3 ans

  • Assigné à mis à Valentin Deniaud
#9

Mis à jour par Valentin Deniaud il y a plus de 3 ans

Hop, works for me.

#10

Mis à jour par Thomas Noël il y a plus de 3 ans

J'aimerai qu'on ne profite pour ajouter quelques help_text parce que c'est pas simple de savoir comment tout ça se bouine :

  • account : « identifiant du compte, de la forme sms-xxxx » (si c'est bien ça ?)
  • application_key : « à obtenir via https://eu.api.ovh.com/createToken/ pour un POST sur /sms/ » (si c'est bien ça aussi...)
  • application_secret : « obtenu en même temps que application_key »
  • consumer_key : « obtenu en même temps que application_key »
  • username : ? « utilisateur API créée sur le compte SMS » (si c'est bien ça, again ?)
#11

Mis à jour par Valentin Deniaud il y a plus de 3 ans

Done, modulo

Qui pour moi sort de l'explication de ce que c'est pour aller vers le comment faire, et le comment faire c'est https://doc-publik.entrouvert.com/admin-fonctionnel/les-tutos/configuration-envoi-sms/.
C'est aussi trop facile de générer n'importe quoi comme token, et il y a plein de choses à expliquer, l'url non pas /sms/ mais bien /sms/{serviceName}/users/{login}/jobs, l'expiration, bref trop long à écrire clairement dans un help_text.

#13

Mis à jour par Thomas Noël il y a plus de 3 ans

Valentin Deniaud a écrit :

(oublié le help_text de username)

Il manque la migration correspondante ; merci pour les help_text et d'accord pour dire que c'est trop long. Allez ajoutons un documentation_url :

class OVHSMSGateway(SMSResource):
  documentation_url = 'https://doc-publik.entrouvert.com/admin-fonctionnel/les-tutos/configuration-envoi-sms/'
  ...

(Ça et la migration, ça sera poussable.)

#15

Mis à jour par Thomas Noël il y a plus de 3 ans

  • Statut changé de Solution proposée à Solution validée
#16

Mis à jour par Valentin Deniaud il y a plus de 3 ans

  • Statut changé de Solution validée à Résolu (à déployer)
commit 2017980938bc2ad30bc6a9cb77db936abd7733f2
Author: Valentin Deniaud <vdeniaud@entrouvert.com>
Date:   Wed Jul 29 10:32:41 2020 +0200

    ovh: support /jobs/ API endpoint (#44313)
#17

Mis à jour par Frédéric Péters il y a plus de 3 ans

  • Statut changé de Résolu (à déployer) à Solution déployée

Formats disponibles : Atom PDF