Bug #8789
Créer une application pour la téléphonie
0%
Description
- un web-service pour recevoir les notifications d'appel:
POST /api/phone-call/?orig=yyy&signature=xxx Content-Type: application/json { "event": "start", "caller": "+33630682999", "callee": "103", "data": { ... } }
- un web-service pour voir les appels en cours d'un utilisateur à utiliser par des requêtes AJAX
- un modèle PhoneCall:
- caller: char(32)
- callee: char(32)
- start: datetime
- end: datetime
- data: json
- un modèle PhoneLine
- number: char(32) unique
- groups: m2m
- users: m2m
À discuter:
- une page de manage pour gérer les affectation ligne/utilisateurs/rôles
- ou alors permettre à n'importe quel utilisateur de désigner sa ligne depuis la vue téléphonie
- le web-service pour voir les appels en cours va impliquer du polling, est-ce que c'est acceptable (si il n'y a que quelques utilisateurs ce n'est pas grand chose), est-ce qu'on passe du temps à regarder des trucs comme comet ou websocket ? Sachant que comet ça bloque quand même un worker (mais bon on peut passer à gevent aussi)
Fichiers
Révisions associées
README: add section on tests (#8789)
add jenkins.sh (#8789)
implement telephony models and web services (#8789)
- 2 new models: PhoneCall, PhoneLine
- 4 web-services:
- call_event
- current_calls
- take_line
- release_line
Historique
Mis à jour par Benjamin Dauvergne il y a plus de 8 ans
- Catégorie mis à Canal : appels téléphoniques
- Assigné à mis à Benjamin Dauvergne
Mis à jour par Thomas Noël il y a plus de 8 ans
permettre à n'importe quel utilisateur de désigner sa ligne depuis la vue téléphonie
Partons sur cela. Même si ça voudrait dire que n'importe quel utilisateur pourrait "profiter" de la fonctionnalité pour savoir qui téléphone à qui...
le web-service pour voir les appels en cours va impliquer du polling
Posons un bouton "Téléphone" que l'agent doit appuyer, et à partir de là, ajax ou pas, welco cherche qui est à l'autre bout de la ligne actuellement dans son journal, et fait l'affichage. S'il faut du polling, on verra, pas important pour l'instant je pense.
Mis à jour par Benjamin Dauvergne il y a plus de 8 ans
- un événement call-start arrive pour l'appelant x et la ligne y; il y a déjà un appel ouvert et non terminé pour cette ligne, que faire ?
- un événement call-end arrive pour l'appelant x et la ligne y; il n'y a aucun appel en court entre ces deux numéros, que faire ?
Mis à jour par Thomas Noël il y a plus de 8 ans
Frédéric Péters a écrit :
1. fermer l'appel en cours.
Voire les appels en cours. Et log.notice (voire log.warn).
Ceci étant, on verra à l'usage, mais en cas de double appel (avec mise en attente du premier), le cas pourrait se produire.
2. ignorer.
Yep.
Mis à jour par Benjamin Dauvergne il y a plus de 8 ans
- Fichier 0001-setup.py-add-missing-dependencies-8789.patch 0001-setup.py-add-missing-dependencies-8789.patch ajouté
- Fichier 0002-README-add-section-on-tests-8789.patch 0002-README-add-section-on-tests-8789.patch ajouté
- Fichier 0003-add-jenkins.sh-8789.patch 0003-add-jenkins.sh-8789.patch ajouté
- Fichier 0004-implement-telphony-models-and-web-services-fixes-878.patch 0004-implement-telphony-models-and-web-services-fixes-878.patch ajouté
- Patch proposed changé de Non à Oui
Voilà un premier jet, j'ai commencé à mettre en place des tests pour welco et un fichier jenkins.sh.
Mis à jour par Frédéric Péters il y a plus de 8 ans
Je dois quand même dire qu'il y a des moments où ton nouveau module d'indentation fait des trucs que je trouve très moches, par exemple dans ces moments :
urlpatterns = patterns('', url(r'^phone/call-event/$', views.call_event,
Dans le modèle PhoneCall, garde creation_timestamp et last_update_timestamp, ils sont prévus pour être communs à toutes les sources; en fait, même, il en faut d'autres, tu peux les mettre sans t'en soucier :
# common to all source types: status = models.CharField(_('Status'), blank=True, max_length=50) contact_id = models.CharField(max_length=50, null=True) associations = generic.GenericRelation(Association, content_type_field='source_type', object_id_field='source_pk') creation_timestamp = models.DateTimeField(auto_now_add=True) last_update_timestamp = models.DateTimeField(auto_now=True)
Pour les URL, tu peux les faire commencer par /api/, ou /ajax/ ?
Pour le "current_calls", ça pourrait en partie être une méthode de classe sur PhoneCall (current_calls(cls, user)).
Mis à jour par Benjamin Dauvergne il y a plus de 8 ans
- Fichier 0001-setup.py-add-missing-dependencies-8789.patch 0001-setup.py-add-missing-dependencies-8789.patch ajouté
- Fichier 0002-README-add-section-on-tests-8789.patch 0002-README-add-section-on-tests-8789.patch ajouté
- Fichier 0003-add-jenkins.sh-8789.patch 0003-add-jenkins.sh-8789.patch ajouté
- Fichier 0004-implement-telphony-models-and-web-services-fixes-878.patch 0004-implement-telphony-models-and-web-services-fixes-878.patch ajouté
Frédéric Péters a écrit :
Je dois quand même dire qu'il y a des moments où ton nouveau module d'indentation fait des trucs que je trouve très moches, par exemple dans ces moments :
[...]
Il parait que PEP8 impose d'aligner tous les arguments, je lui fais confiance :)
Dans le modèle PhoneCall, garde creation_timestamp et last_update_timestamp, ils sont prévus pour être communs à toutes les sources; en fait, même, il en faut d'autres, tu peux les mettre sans t'en soucier :
[...]
Ok.
Pour les URL, tu peux les faire commencer par /api/, ou /ajax/ ?
Pour le "current_calls", ça pourrait en partie être une méthode de classe sur PhoneCall (current_calls(cls, user)).
D'ac.
Mis à jour par Frédéric Péters il y a plus de 8 ans
Il parait que PEP8 impose d'aligner tous les arguments, je lui fais confiance :)
Heureusement qu'il autorise l'hanging indentation, merci d'avoir fait le changement.
Là c'est comme tu veux, tu gardes les patchs en local pendant que tu fais l'interface dans passerelle, au cas où tu voudrais changer des choses, ou tu pousses déjà.
Mis à jour par Benjamin Dauvergne il y a plus de 8 ans
Elle est déjà faite et poussée l'interface dans passerelle #8795
Mis à jour par Frédéric Péters il y a plus de 8 ans
Benjamin Dauvergne a écrit :
Elle est déjà faite et poussée l'interface dans passerelle #8795
Ok, je commence donc et elle demande un welco_url, dont l'usage que je vois est le suivant :
requests.post(self.welco_url, data=json.dumps(payload), headers={'content-type': 'application/json'})
Mais dans ce patch, il y a introduction de quatre endpoints différents. C'est supposé fonctionner comment ?
(Aussi, "détail" pour plus tard, il n'y a aucune espèce de notion de sécurité.)
Mis à jour par Frédéric Péters il y a plus de 8 ans
Je me demandais :
Ok, je commence donc et elle demande un welco_url, dont l'usage que je vois est le suivant :
[...]
Mais dans ce patch, il y a introduction de quatre endpoints différents. C'est supposé fonctionner comment ?
Ok, en pointant vers …/api/phone/call-event/
Mis à jour par Frédéric Péters il y a plus de 8 ans
- Statut changé de En cours à Résolu (à déployer)
Je viens de pousser ces commits; il y aura sans doute des changements pour l'UI mais je vais partir avec ça.
Mis à jour par Benjamin Dauvergne il y a plus de 8 ans
Frédéric Péters a écrit :
Benjamin Dauvergne a écrit :
Elle est déjà faite et poussée l'interface dans passerelle #8795
Ok, je commence donc et elle demande un welco_url, dont l'usage que je vois est le suivant :
[...]
Mais dans ce patch, il y a introduction de quatre endpoints différents. C'est supposé fonctionner comment ?
(Aussi, "détail" pour plus tard, il n'y a aucune espèce de notion de sécurité.)
2 choses: concernant une simple notification d'appel ce n'est, je pense, pas vraiment important, ensuite j'attends que les histoires de clé de signature se stabilisent.
Mis à jour par Frédéric Péters il y a plus de 8 ans
- Statut changé de Résolu (à déployer) à Solution déployée
setup.py: add missing dependencies (#8789)