Record via API non lié à un CDR / Impossible de record avec les variables de channel

Bonjour,

Merci pour votre travail sur WAZO.

Avant la mise à jour de wazo en 22.05 j’étais en version 20.04 et les appels sortants étaient enregistrés sans avoir à appeler l’API pour démarrer le record (ni à spécifier des variables spéciales lors de la création de l’appel).
Après la mise à jour j’ai donc activé le call recordinf sur l’utilisateur :
PUT /users/{user_uuid}
{
“call_record_outgoing_internal_enabled”: true,
“call_record_outgoing_external_enabled”: true,
“call_record_incoming_internal_enabled”: true,
“call_record_incoming_external_enabled”: true
}
Puis j’ai dans un premier temps utilisé l’API (en POST) pour faire les appels sortants.
En voyant qu’aucun des appels sortants n’étaient enregistrés je suis passé sur l’API /api/calld/1.0/users/me/calls (POST) :

  • Création du token d’authorisation avec le call_id et le refresh_token de l’utilisateur qui fait l’appel
  • Envoi des informations nécessaire pour passer l’appel :
    array(
    ‘all_lines’ => true,
    ‘extension’ => “06xxxxxx38”,
    ‘variables’ => array(
    ‘WAZO_CALL_RECORD_ACTIVE’ => ‘1’,
    ‘XIVO_USERUUID’ => “d8a5c9b7-xxxx-xxxx-xxxx-72df1a33c8fc”,
    ‘WAZO_TENANT_UUID’ => “b8d37776-xxxx-xxxx-xxxx-cca62fcf23be”
    )
    )
  • Utilisation du token généré pour le header :
    header : X-Auth-Token: token_genere\r\nContent-Type: application/json\r\n

Voici la réponse de l’API :
answer_time: null
bridges: Array []
call_id: “1649747591.24”
caller_id_name: “06xxxxxx38”
caller_id_number: “06xxxxxx38”
conversation_id: “1649747591.24”
creation_time: “2022-04-12T09:13:11.041+0200”
dialed_extension: “06xxxxxx38”
hangup_time: null
is_caller: true
is_video: false
line_id: null
muted: false
on_hold: false
peer_caller_id_name: “06xxxxxx38”
peer_caller_id_number: “06xxxxxx38”
record_state: “active”
sip_call_id: null
status: “Down”
talking_to: Array []
user_uuid: null

Après l’ajout des variables dans l’appel le record_state est passé à active là où il était en inactive avant.
Variables en question :
‘variables’ => array(
‘WAZO_CALL_RECORD_ACTIVE’ => ‘1’,
‘XIVO_USERUUID’ => “d8a5c9b7-xxxx-xxxx-xxxx-72df1a33c8fc”,
‘WAZO_TENANT_UUID’ => “b8d37776-xxxx-xxxx-xxxx-cca62fcf23be”
)

Cependant, à la fin de l’appel le record n’est pas indiqué dans le CRD dans la rubrique recordings et le fichier n’est pas enregistré.
Réponse de l’API lors de la recherche du CDR :
answer: “2022-04-12T09:13:17.459058+02:00”
answered: true
call_direction: “outbound”
destination_extension: “06xxxxxx38”
destination_internal_context: null
destination_internal_extension: null
destination_line_id: null
destination_name: “”
destination_user_uuid: null
duration: 10
end: “2022-04-12T09:13:28.288673+02:00”
id: 1698
recordings: Array []
requested_context: null
requested_extension: null
requested_internal_context: null
requested_internal_extension: null
requested_name: null
source_extension: “10”
source_internal_context: “interne”
source_internal_extension: “10”
source_internal_name: null
source_line_id: 10
source_name: “Pascal Martin”
source_user_uuid: “d8a5c9b7-xxxx-xxxx-xxxx-72df1a33c8fc”
start: “2022-04-12T09:13:11.042009+02:00”
tags: Array []
tenant_uuid: “b8d37776-21b8-4967-9819-cca62fcf23be”

Exemple de la rubrique recordings sur un appel entrant :
​​​​​recordings: Array[
0: {
deleted: false
end_time: “2022-04-12T10:05:46.034618+02:00”
filename: “2022-04-12T08_04_47UTC-1719-959def52-3477-4172-8fd6-16dcae6c283b.wav”
start_time: “2022-04-12T10:04:47.058735+02:00”
uuid: “959def52-3477-4172-8fd6-16dcae6c283b”
}
]

Pour résumer :
Quand on fait un appel sortant avec un compte SIP, l’appel s’enregistre et se met dans le dossier /var/lib/wazo/sounds/tenants/{tenant_uuid}/monitor/.
Quand on fait un appel sortant mais cette fois-ci en utilisant l’API (/api/calld/1.0/users/me/calls ou /api/calld/1.0/calls avec et sans les variables) l’appel ne s’enregistre pas
Quand on fait un appel sortant avec /api/calld/1.0/users/me/calls et qu’on utilise l’API pour record l’appel, il s’enregistre mais n’est pas présent dans les informations du CDR dans la rubrique recordings

Le but :
Enregistrer les appels sortants pour les récupérer avec l’API /api/1.0/cdr/{cdr_id}/recordings/{recording_uuid}/media

Savez-vous pourquoi je n’ai pas d’enregistrement lors de l’utilsation des variables ? Il m’en manque peut-être une mais je ne vois pas laquelle.

L’enregistrement se fait lors de l’appel à l’API une foit l’appel créé (/api/1.0/users/me/calls/{call_id}/record/start) mais aucune information dans le CRD donc impossible de récupérer le recording

J’ai l’impression que ce que je tente de réalisé est lié au bug/ticket suivant :
https://wazo-dev.atlassian.net/browse/WAZO-2350

Cependant, je ne vois pas pourquoi le record_state passe en active (grâce à WAZO_CALL_RECORD_ACTIVE) sans enregister l’appel…

Merci d’avance pour votre aide et n’hésitez évidemment pas à demander plus de précisions / code si nécessaire .

MARTIN Pascal.

Allo, on a pas connaissance de regression de ce côté là. Je ne suis pas complètement sûr de comprendre pourquoi tu passes des variables. Normalement dès qu’il y a un me dans le endpoint d’une API c’est qu’il représente l’utilisateur par son token. Par contre, oui le ticket WAZO-2350 est pour améliorer l’API qui a quelques lacunes pour simplifier la récupération des infos sur les enregistrements d’appel. Je vais essayer de trouver le temps de reproduire pour mieux te répondre.

Sylvain

Merci pour la réponse !
En fait je passe des variables pour tenter de record l’appel car sans utiliser WAZO_CALL_RECORD_ACTIVE le record_state est en ‘inactive’. Avec, il passe en ‘active’ mais sans pour autant record l’appel.
Je me suis donc dit qu’il fallait trigger le record en fournissant plus de variables de channel. D’ou l’ajout de XIVO_USERUUID et WAZO_TENANT_UUID qui sont les seules variables que j’ai trouvé dans le code de l’API qui semblait pouvoir être utile mais sans succès.

D’accord, si c’est juste pour simplifier la récupération ça n’est pas vraiment en lien avec mon soucis du coup.

De ce côté là je suppose qu’il n’y a aucun soucis vu que je récupère bien le token d’authorisation de l’utilisateur et que l’appel est bien enregistré sur cet utilisateur. Par contre peut-être qu’en faisant un appel via l’API les authorisations de record de l’utilisateur (call_record_outgoing_internal_enabled, call_record_outgoing_external_enabled) ne sont pas récupérées ?

Salut,

Entre la version 20.04 et aujourd’hui on a fait des changements important sur l’enregistrement et via l’api qui simule du click du call cela ne semble pas fonctionner. As tu essayé de lancer un enregistrement après ton post avec l’api pour le faire ? C’est un workaround pas parfait mais qui peut déjà régler ton problème. Nous avons noté ce point et on le priorisera dans le futur.

Sylvain

Bonjour,

Oui en effet, j’y avais pensé :

Mais malheureusement ça n’indique rien dans le CDR (la rubrique “recordings” reste un tableau vide) donc impossible de le récupérer avec /api/1.0/cdr/{cdr_id}/recordings/{recording_uuid}/media.
C’est un comportement normal ?

Par contre oui il enregistre bien l’appel et le sauve au bon endroit.

Parfait je garderai un oeil sur les nouvelles versions alors !

Merci encore pour la réponse.

Non c’est pas normal, mais c’est sûrement lié au fait qu’on ne gère pas correctement cette api pour l’enregistrement.