Development #36921
connecteur sms orange, basculer sur zeep
0%
Description
Dans #21464 qui a migré les connecteurs SMS vers l'utilisation du wrapper requests, le connecteur SMS Orange a été zappé parce qu'il utilise la vieille stack SOAPpy, qu'on gagnerait plutôt à le passer à zeep.
Fichiers
Demandes liées
Historique
Mis à jour par Nicolas Roche il y a plus de 4 ans
- Fichier 0001-sms-add-test-for-Orange-SMS-gateway-connector-36921.patch 0001-sms-add-test-for-Orange-SMS-gateway-connector-36921.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Assigné à mis à Nicolas Roche
- Patch proposed changé de Non à Oui
Je commence par ajouter un test de non régression.
Mis à jour par Nicolas Roche il y a plus de 4 ans
- Fichier API-manuel_utilisateur.txt API-manuel_utilisateur.txt ajouté
- Fichier 0001-sms-handle-return-of-unique-msgId-on-orange-connecto.patch 0001-sms-handle-return-of-unique-msgId-on-orange-connecto.patch ajouté
- Fichier 0002-sms-add-test-for-Orange-SMS-gateway-connector-36921.patch 0002-sms-add-test-for-Orange-SMS-gateway-connector-36921.patch ajouté
- Fichier 0003-sms-upgrade-orange-connector-to-use-zeep-library-369.patch 0003-sms-upgrade-orange-connector-to-use-zeep-library-369.patch ajouté
Beaucoup de chose à dire...
1. Premier patch :
En passant à zeep je réalise que le paramètre sortant devrait être unique.
Paramètre de sortie | Type | Description | |
WSSendReport | msgId | Chaîne | Identifiant de diffusion. |
<complexType name="WSSendReport"> <sequence> <element name="msgId" nillable="true" type="soapenc:string"/> </sequence> </complexType>
2. Second patch :
Un tests de non régression écrit avec suds (mais sans réelle connexion à orange)
3. Troisième patch :
La migration vers zeep.
Je suis coincé et ne peux pas porter sur zeep sans changer le message SOAP.
Actuellement, suds envoie des tags HTML vide pour les éléments booléen non renseignés bien que n'ayant pas l'attribut nillable="true".
wsdl :
<complexType name="WSAdvancedMessage"> <sequence> ... <element name="validFaxReplyTo" type="xsd:boolean"/> <element name="validFormatMailReplyTo" type="xsd:boolean"/> <element name="validMaxStartCall" type="xsd:boolean"/> <element name="validMinStartCall" type="xsd:boolean"/> <element name="validSmsReplyTo" type="xsd:boolean"/> <element name="validTelReplyTo" type="xsd:boolean"/>
message soap envoyé :
<ns0:wsAdvancedMessage> ... <ns0:validFaxReplyTo/> <ns0:validFormatMailReplyTo/> <ns0:validMaxStartCall/> <ns0:validMinStartCall/> <ns0:validSmsReplyTo/> <ns0:validTelReplyTo/>Avec Zeep, on ne peut pas (un booléen est soit vrai soit faux)
On doit choisir entre :
- Ne pas inclure le tag HTML
https://python-zeep.readthedocs.io/en/master/datastructures.html#skipvalue
- Envoyer un tag null
https://www.w3.org/TR/xmlschema11-1/#xsi_nil
- Renseigner une valeur
D'après API-manuel_utilisateur.doc (archivé dans #8428) que j'ai du éxhumer avec antiword.
(l'API semble avoir évolué en REST mais qui n'a plus grand chose à voir :
https://contact-everyone.orange-business.com/api/docs/guides/?shell#6-declencher-une-diffusion-creer-une-diffusion-sms)
Je devine que ces option permettent de désactiver les exceptions relatives à l'argument relatif (ex: validFaxReplyTo à False : désactive la validation de faxReplyTo)
- faxReplyTo -> Pour usage ultérieur
- mailReplyTo -> Adresse e-mail de retour
- startCall -> Date de début de diffusion
- smsReplyTo -> Nom émetteur sms personnalisé
- telReplyTo -> Numéro présenté
Pour notre connecteur, on utilise seulement smsReplyTo.
C'est le seul paramètre dont l'éventuelle erreur validation n'est pas décrite.
La validation semble lié à des contraintes de taille min et/ou max de caractères.
ex:
|Paramètre |Description |Type |Requis|Contraintes | |d'entrée | | | | | |smsReplyTo |Nom émetteur sms |Chaîne |Non |11 caractères | | |personnalisé (souscription | | |maximum | | |option nécessaire, valeur | | | | | |par défaut) | | | |
Tout ça pour dire qu'il me semblerais indolore de passer ces booléens à vrai ou faux.
Dans tous les cas il faudrait que j’appelle "en vrai" l'API pour valider l'option choisie.
4. Enfin,
- J'ai supprimé la propriété "verify", qui n'est plus nécessaire pour passer les tests.
def verify(self): # Do not break if certificate is not updated
- Il manque la définition de la fonction abstraite check_status(), peut-être que le endpoint "about" ferait l'affaire.
Mis à jour par Nicolas Roche il y a plus de 4 ans
- Lié à Bug #9163: Ajouter une backend SMS contact everyone ajouté
Mis à jour par Frédéric Péters il y a plus de 4 ans
(l'API semble avoir évolué en REST mais qui n'a plus grand chose à voir :
Ça me semble alors inutile de faire un travail de portage vers la même obsolète API, plutôt faire le travail pour utiliser la nouvelle API d'Orange.
Mis à jour par Benjamin Dauvergne il y a plus de 4 ans
Juste pour dire que je n'ai trouvé qu'une instance sur notre SaaS de ce connecteur à Fondettes et qu'on ne dispose pas d'identifiants pour la nouvelle API (login/mdp pour obtenir un jeton OAuth2 alors que là c'est un certificat SSL):
bdauvergne@passerelle:~$ cat /tmp/search-orange.py from passerelle.apps.orange.models import OrangeSMSGateway from django.db import connection if OrangeSMSGateway.objects.exists(): print connection.tenant.domain_url, OrangeSMSGateway.objects.values() bdauvergne@passerelle:~$ sudo -u passerelle passerelle-manage tenant_command runscript --all-tenants /tmp/search-orange.py passerelle-fondettes.entrouvert.com <InheritanceQuerySet [{'keystore': u'orange/fondettes2_XYrecSw.pem', 'description': u'orange', u'id': 1, 'slug': u'orange', 'title': u'Orange'}]>
Donc au minimum il faudrait prendre contact avec Fondettes pour obtenir des identifiants si on souhaite aller plus loin.
Mis à jour par Nicolas Roche il y a plus de 4 ans
- Statut changé de Solution proposée à En cours
Brice me dit que s'il y a besoin il les recontacte.
Mis à jour par Frédéric Péters il y a presque 4 ans
- Statut changé de En cours à Rejeté
Orange ne fournit plus ce service, il faudrait intégrer leur nouvelle API. (le CD44 a une implémentation).
Mis à jour par Nicolas Roche il y a presque 4 ans
- Lié à Support #41166: Intégrer le connecteur sms-orange-rest du CD44 ajouté