Node-red: Transférer un appel à une Queue

Bonjour,

Comment transférer l’appel entrant d’une application vers une Queue ?

Bonjour,

Probablement le plus simple est de transférer vers le numéro de la file d’attente tout simplement.

Sylvain

Bonjour @quintana,

Merci pour votre réponse, si cela aurait était réellement aussi simple je n’aurais pas pris une journée avec node-red ou la console api pour faire se transfère d’appel. Malheureusement, il semble qu’aucun api ne puisse être utilisé depuis l’application pour faire un transfert. Je connais le call id, l’extension de destination, le type de transfert en blind et l’uuid de l’application.

Quel api dois-je utiliser ?

Bien à vous.

Intéressant, il me semblait avoir mis un node pour faire cela, je vais check, c’est vrai que c’est pratique de pouvoir sortir de l’appel full programmé pour repartir dans le dialplan où c’est plus statique.

En regardant vite fait, c’est pas le plus élégant je trouve et j’ai pas testé, mais probablement que d’ajouter dans ton node un appel vers ta fille d’attente va marcher. En fait ça dépend de ce que tu veux réellement faire aussi. Mais on a pas d’API pour sortir du mode programmable pour retourner dans un dialplan. Je ne suis pas sûr que ça soit pertinent en plus.

Il y a un node pour l’api nommé “new call node”, difficile à comprendre comment il fonctionne sur node-red. Toutefois, j’ai essayé aussi par l’api et voilà ce qu’il se passe:

Scénario ou j’ai deux appels entrants: Antoine / Sophie à destination d’un groupe de sonnerie: Sales 200

  1. Antoine arrive sur l’application, depuis l’api on peut voir dans le node qu’il y a son call_id.
  2. Depuis l’api j’utilise /applications/uuid/nodes/uuid/calls et je place l’extension 200 dans le node.
  3. Sophie arrive aussi sur l’application et tombe visiblement dans le node où il y a déjà Antoine et l’extension 200, personne ne peut se parler. La notion de nodes n’est pas simple pour moi car j’ai l’impression que ce sont des channels de conférence. Ce qui voudrait dire que je dois créer un node à chaque appel puis ajouter l’extension 200 dans ce node. Seulement voilà, l’appel est toujours sur l’application et ça ne fonctionne pas.

Le scénario que je souhaite faire est simple, transférer un appel entrant dans l’application node red, faire un traitement spécifique, puis l’envoyer à n’importe quelle extension du système (ivr, queue, user, etc…).

Un node est un nœud de mixage audio, comme une conférence en effet. Tu pourrais bâtir un chambre de conf, une file d’attente ou tout autre application que tu veux à partir de là. Tu peux ajouter, supprimer des appels à l’intérieur.
Je ne pense pas qu’on avait mis une sortie générique, faut que je regarde de plus proche pour te faire une réponse sur ton use case plus précise.

Salut,

Je viens de faire un mini plugin pour te permettre de faire ce que tu veux.

Tu as juste à installer comme indiqué dans le readme et tu auras une nouvelle API de dispo.

Il te suffira de lui dire dans ton PUT quel context, extension et priorité tu veux faire jump ton call.
J’ai testé rapidement et j’ai eu le résultat dont tu me parles.

Sylvain

Juste une précision il faudra utiliser le node request pour utiliser l’API car j’ai pas de node continue dans node-red pour cette API. Mais si on l’intègre de base je rajouterai le noeud. Mais je pense que tu peux deja pas mal faire ce que tu veux ainsi.

Exemple de ce que tu pourrais faire avec le node continue dans node-red que j’ai fait pour tester.

La configuration, mais tu pourrais override avec des variables les data en input.

D’une rapidité incroyable ! Je vais tester cela aujourd’hui, en tout cas ça m’a l’air parfait, merci beaucoup !

1 Like

Je m’excuse pour le retard, entre la config wazo, la documentation et l’interface web je n’ai eu que peu de temps.

Je viens de tester le node continue, sauf que c’est impossible de sélectionner un context. Dans le select aucune options n’apparait.

Ducoup j’ai essayé par l’api, mais non j’ai une erreur:

"404 Client Error: Not Found for url: http://localhost:5039/ari/channels/1697827225.36: Channel not found"

Pour être sur:

  • application_uuid: L’identifiant de mon app évidemment
  • call_id: Le call id que j’ai sur GET /applications/{application_uuid}/calls
  • context: ctx-internal-149ae8d8-b819-45f2-b3a4-dc8566356830 // Context des appels internes
  • extension: 100 // L’extension de mon utilisateur
  • label: // J’imagine que c’est le Label du context donc “Internal”
  • priority: Aucune idée donc 0

Je viens de comprendre d’où vient le problème après quelques maux de tête sur la compréhension de l’environnement wazo.

Le problème vient du label, si je le défini j’ai un 404, autrement ça passe. A quoi sert ce label ? J’ai beau regarder le code, je ne comprend pas sa présence.

Ducoup j’ai testé de nouveau avec node-red, toujours le problème du context qui n’affiche aucune option. J’ai donc décidé de créer une fonction pour stocker le call_id au début, puis un injecteur pour continue. Ce qui est embêtant c’est le fait que l’on doit injecter toutes les informations et pas seulement le context id.

Si le contexte n’affiche pas c’est que tu n’as pas les droits sûrement. Faut vérifier tes acl et que tu es bien un utilisateur dans le bon tenant.
Sinon le label est pour labelliser une priorité dans le dialplan Asterisk.

exten => 12345, 1(monlabel), NoOp()

Donc tu choisis soit 1 pour le premier jump ou le label. Mais pas besoin des deux. Le label est clairement plus pour des besoins avancés.

Pour autant j’ai essayé avec l’utilisateur root. De plus d’autres nodes n’ont pas de soucis pour afficher la liste des contextes.

Capture d'écran 2023-10-21 020747

Merci pour tes renseignements, je comprends mieux l’usage du label.

Je n’ai pas du mettre le recurse dans la requête sur ce node.

Je viens de faire un pull request, tu peut me confirmer que de ton coté c’est ok ? Pour ma part ça fonctionne.

1 Like

J’ai mergé ta PR, merci.

1 Like