Project

General

Profile

Bug #8789

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

Added by Benjamin Dauvergne over 8 years ago. Updated about 8 years ago.

Status:
Fermé
Priority:
Haut
Category:
Canal : appels téléphoniques
Target version:
-
Start date:
27 October 2015
Due date:
% Done:

0%

Estimated time:
Patch proposed:
Yes
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)

Files

Associated revisions

Revision 46cd46df (diff)
Added by Benjamin Dauvergne over 8 years ago

setup.py: add missing dependencies (#8789)

Revision 2b36c695 (diff)
Added by Benjamin Dauvergne over 8 years ago

README: add section on tests (#8789)

Revision 661ccf47 (diff)
Added by Benjamin Dauvergne over 8 years ago

add jenkins.sh (#8789)

Revision 5cedd087 (diff)
Added by Benjamin Dauvergne over 8 years ago

implement telephony models and web services (#8789)

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

History

#2

Updated by Benjamin Dauvergne over 8 years ago

  • Description updated (diff)
#3

Updated by Benjamin Dauvergne over 8 years ago

  • Category set to Canal : appels téléphoniques
  • Assignee set to Benjamin Dauvergne
#4

Updated by Benjamin Dauvergne over 8 years ago

  • Description updated (diff)
#5

Updated by Thomas Noël over 8 years ago

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

Updated by Benjamin Dauvergne over 8 years ago

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

Updated by Frédéric Péters over 8 years ago

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

#8

Updated by Thomas Noël over 8 years ago

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

Updated by Benjamin Dauvergne over 8 years ago

  • Status changed from Nouveau to En cours
#11

Updated by Benjamin Dauvergne over 8 years ago

  • Priority changed from Normal to Haut
#12

Updated by Frédéric Péters over 8 years ago

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

Updated by Benjamin Dauvergne over 8 years ago

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

Updated by Frédéric Péters over 8 years ago

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

Updated by Benjamin Dauvergne over 8 years ago

Elle est déjà faite et poussée l'interface dans passerelle #8795

#16

Updated by Frédéric Péters over 8 years ago

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

Updated by Frédéric Péters over 8 years ago

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

Updated by Frédéric Péters over 8 years ago

  • Status changed from En cours to 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

Updated by Benjamin Dauvergne over 8 years ago

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

Updated by Frédéric Péters about 8 years ago

  • Status changed from Résolu (à déployer) to Solution déployée

Also available in: Atom PDF