Projet

Général

Profil

Bug #8789

Créer une application pour la téléphonie

Ajouté par Benjamin Dauvergne il y a plus de 8 ans. Mis à jour il y a plus de 8 ans.

Statut:
Fermé
Priorité:
Haut
Assigné à:
Catégorie:
Canal : appels téléphoniques
Version cible:
-
Début:
27 octobre 2015
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

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

Révision 46cd46df (diff)
Ajouté par Benjamin Dauvergne il y a plus de 8 ans

setup.py: add missing dependencies (#8789)

Révision 2b36c695 (diff)
Ajouté par Benjamin Dauvergne il y a plus de 8 ans

README: add section on tests (#8789)

Révision 661ccf47 (diff)
Ajouté par Benjamin Dauvergne il y a plus de 8 ans

add jenkins.sh (#8789)

Révision 5cedd087 (diff)
Ajouté par Benjamin Dauvergne il y a plus de 8 ans

implement telephony models and web services (#8789)

- 2 new models: PhoneCall, PhoneLine
- 4 web-services:
- call_event
- current_calls
- take_line
- release_line

Historique

#2

Mis à jour par Benjamin Dauvergne il y a plus de 8 ans

  • Description mis à jour (diff)
#3

Mis à jour par Benjamin Dauvergne il y a plus de 8 ans

  • Catégorie mis à Canal : appels téléphoniques
  • Assigné à mis à Benjamin Dauvergne
#4

Mis à jour par Benjamin Dauvergne il y a plus de 8 ans

  • Description mis à jour (diff)
#5

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.

#6

Mis à jour par Benjamin Dauvergne il y a plus de 8 ans

Questions existentielles:
  • 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 ?
#7

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

1. fermer l'appel en cours.
2. ignorer.

#8

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.

#10

Mis à jour par Benjamin Dauvergne il y a plus de 8 ans

  • Statut changé de Nouveau à En cours
#11

Mis à jour par Benjamin Dauvergne il y a plus de 8 ans

  • Priorité changé de Normal à Haut
#12

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)).

#13

Mis à jour par Benjamin Dauvergne il y a plus de 8 ans

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.

#14

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à.

#15

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

#16

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é.)

#17

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/

#18

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.

#19

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.

#20

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

Formats disponibles : Atom PDF