Queue, agent, user et switchboard

Bonjour,

J’ai utilisé l’inerface wazo-ui pour créer une queue, et j’ai ajouté un utilisateur dans cette queue:

{
  "total": 1,
  "items": [
    {
      "id": 2,
      "tenant_uuid": "958ac4de-d279-4f63-882a-b0e4f8347e56",
      "name": "test",
      "label": null,
      "data_quality": false,
      "dtmf_hangup_callee_enabled": false,
      "dtmf_hangup_caller_enabled": false,
      "dtmf_transfer_callee_enabled": false,
      "dtmf_transfer_caller_enabled": false,
      "dtmf_record_callee_enabled": false,
      "dtmf_record_caller_enabled": false,
      "retry_on_timeout": false,
      "ring_on_hold": false,
      "timeout": null,
      "announce_hold_time_on_entry": false,
      "ignore_forward": false,
      "preprocess_subroutine": null,
      "music_on_hold": null,
      "wait_time_threshold": null,
      "wait_time_destination": {
        "type": "none"
      },
      "wait_ratio_threshold": null,
      "wait_ratio_destination": {
        "type": "none"
      },
      "caller_id_mode": null,
      "caller_id_name": null,
      "mark_answered_elsewhere": false,
      "enabled": true,
      "options": [
        [
          "autopause",
          "no"
        ],
        [
          "timeoutrestart",
          "no"
        ],
        [
          "periodic-announce",
          "queue-periodic-announce"
        ],
        [
          "queue-youarenext",
          "queue-youarenext"
        ],
        [
          "servicelevel",
          "0"
        ],
        [
          "strategy",
          "ringall"
        ],
        [
          "ringinuse",
          "no"
        ],
        [
          "autofill",
          "yes"
        ],
        [
          "retry",
          "5"
        ],
        [
          "announce-round-seconds",
          "0"
        ],
        [
          "maxlen",
          "0"
        ],
        [
          "random-periodic-announce",
          "no"
        ],
        [
          "timeout",
          "15"
        ],
        [
          "setinterfacevar",
          "no"
        ],
        [
          "setqueueentryvar",
          "yes"
        ],
        [
          "timeoutpriority",
          "conf"
        ],
        [
          "reportholdtime",
          "no"
        ],
        [
          "weight",
          "0"
        ],
        [
          "periodic-announce-frequency",
          "0"
        ],
        [
          "queue-reporthold",
          "queue-reporthold"
        ],
        [
          "queue-seconds",
          "queue-seconds"
        ],
        [
          "setqueuevar",
          "yes"
        ],
        [
          "memberdelay",
          "0"
        ],
        [
          "announce-position",
          "yes"
        ],
        [
          "queue-holdtime",
          "queue-holdtime"
        ],
        [
          "announce-holdtime",
          "no"
        ],
        [
          "queue-minutes",
          "queue-minutes"
        ],
        [
          "min-announce-frequency",
          "60"
        ],
        [
          "announce-position-limit",
          "5"
        ],
        [
          "wrapuptime",
          "0"
        ],
        [
          "queue-thereare",
          "queue-thereare"
        ],
        [
          "queue-callswaiting",
          "queue-callswaiting"
        ],
        [
          "queue-thankyou",
          "queue-thankyou"
        ],
        [
          "announce-frequency",
          "0"
        ]
      ],
      "links": [
        {
          "rel": "queues",
          "href": "https://10.92.100.158/api/confd/1.1/queues/2"
        }
      ],
      "extensions": [
        {
          "id": 38,
          "exten": "1100",
          "context": "interne",
          "links": [
            {
              "rel": "extensions",
              "href": "https://10.92.100.158/api/confd/1.1/extensions/38"
            }
          ]
        }
      ],
      "schedules": [],
      "members": {
        "agents": [],
        "users": [
          {
            "priority": 0,
            "uuid": "3b4711bf-1227-4222-86ef-68d15b102f99",
            "firstname": "julien",
            "lastname": "duduclx",
            "links": [
              {
                "rel": "users",
                "href": "https://10.92.100.158/api/confd/1.1/users/1"
              }
            ]
          }
        ]
      }
    }
  ]
}

si je regarde cet utilisateur connecté (aka session), il a la valeur:
agent: null
bon, normal, il n’est pas agent.

et:
user.profile.lines[0].id : 2

dans le sdk, je trouve
Wazo.agentd.loginWithLineId: (lineId: number) => Promise<boolean>

mais si je tente de connecter mon utilisateur avec:
Wazo.agentd.loginWithLineId(user.profile.lines[0].id)

j’ai en réponse:
Error: {"error":"no such agent"}

En regardant plus loin:

il faudrait un agent …
je créé donc un agent, mais rien dans wazo-ui pour lier mon user et mon agent

Je suis donc passé par l’api:
https://10.92.100.158/api/#!/agents/associate_user_agent

une fois l’utilisateur lié à l’agent:
Wazo.agentd.loginWithLineId(user.profile.lines[0].id)
me renvoi ‘true’
haa connecté !

mais c’est laborieux !

d’où mes questions:

  1. Est-il possible de connecter l’utilisateur à la queue sans qu’il soit lié à un agent ?
  2. Est-il prévu ou possible de prévoir d’avoir le ‘associate_user_agent’ disponible dans wazo-ui ?
  3. Pourquoi un agent peut avoir plusieurs utilisateurs ? quelle utilité, quelle limite ?
  4. Quelle est la différence entre queue et switchboard ?

merci !

J’ai remarqué aussi que
si on lie un user et un agent
puis on supprime l’agent (sans les dissocier)
alors l’user n’est plus agent mais il n’est plus possible:

  1. de le dissocier à l’agent (car celui-ci n’existe plus)
  2. de l’associer à un autre agent (car il est vu comme déjà associer)
  3. l’utilisateur n’est donc plus un agent et ne peut plus être associer comme un agent, il faut supprimer l’utilisateur et le recréer pour pouvoir l’associer de nouveau à un agent.

ce cas doit pouvoir s’éviter avec une interface d’administration moins minimaliste.

j’ai remarqué aussi (ce qui répond à ma question 1), que si on aoute un utilisateur à la queue, alors il est automatiquement lié, et n’a pas à se connecter à la queue comme le fait un agent.

pour mes précédentes questions, je ne trouve pas de réponses …

  • Est-il prévu ou possible de prévoir d’avoir le ‘associate_user_agent’ disponible dans wazo-ui ?
  • Pourquoi un agent peut avoir plusieurs utilisateurs ? quelle utilité, quelle limite ?
  • Quelle est la différence entre queue et switchboard ?

Salut,

  1. C’est pas prévu pour le moment, mais une PR pour le mettre est aussi bienvenue.
  2. Aucun intérêt en effet, je ne me rappelle pas pourquoi on avait mis cela, as-tu essayé, n’est-ce pas un souci de doc sinon?
  3. Une queue est pour le centre d’appel avec des agents, on utilise l’application queue d’Asterisk alors qu’un switchboard est une application que nous avons créé pour les besoins de standard d’accueil principalement, les fonctions/usages sont différents et techniquement, il ne fonctionne pas pareil non plus.

Sylvain

  1. Je me dis que j’aimerai développer une interface administrateur avec le SDK, mais dans tous les cas, il serait bien de faire une PR sur wazo-ui.
    Ne connaissant pas bien Python et l’architecture du code, ça me prendrait pas mal de temps pour un petit champ en plus dans le menu agent.
    Mais ça serait un bon exercice pour pouvoir intervenir sur d’autres points si nécessaire.

  2. je n’ai pas essayé, et peut-être que je dis une bêtise, car je le dis seulement car je vois que agent.users = [Array]
    le users au pluriel et le array d’objet user me disent que c’est possible.
    Il me semble l’avoir vu dans le xivo il y a 7 ans.
    Je ne me souviens plus de la raison et de l’impact, et je n’avais pas pris le risque de tester me semble-t-il.
    Mais a première vue, en imaginant les impacts, c’est plutôt une mauvaise pratique, mais qui peut sûrement trouver un intérêt dans un cas particulier.

  3. Merci pour le rappel.
    la file d’attente (queue) renvoi les appels sur les agents (en fonction des règles de la queue).
    le switchboard (call center) permet de remettre un appel dans la file (hold) et décrocher un appel choisi parmis la liste d’appel en attente.
    la nuance est légère a première vue, mais oui, l’usage et les possibilités sont différentes.
    Pour le client WebRtc, il est bon de prévoir une vue bien spécifique pour traiter les appels du switchboard.

merci !!