Partager via


Démarrage rapide : Soumettre un travail à mettre en file d’attente et à router

Commencez avec le Routeur de tâches Azure Communication Services en configurant votre client, puis en configurant les fonctionnalités principales telles que les files d’attente, les stratégies, les workers et les travaux. Pour en savoir plus sur les concepts du routeur de travaux, consultez la documentation conceptuelle du routeur de travaux

Prérequis

Exemple de code

Vous pouvez consulter et télécharger l’exemple de code pour ce démarrage rapide sur GitHub.

Configuration

Créer une application C#

Dans une fenêtre de console (par exemple cmd, PowerShell ou Bash), utilisez la commande dotnet new pour créer une application console avec le nom JobRouterQuickstart. Cette commande crée un projet C# « Hello World » simple avec un seul fichier source : Program.cs.

dotnet new console -o JobRouterQuickstart

Remplacez votre répertoire par le dossier d’application que vous venez de créer, puis utilisez la commande dotnet build pour compiler votre application.

cd JobRouterQuickstart
dotnet build

Installer le package

Installer la bibliothèque de client Routeur de tâches Azure Communication pour .NET avec NuGet :

dotnet add package Azure.Communication.JobRouter

Vous devez utiliser la bibliothèque de client Routeur de tâches Azure Communication pour .NET version 1.0.0 ou ultérieure.

Ajoutez les directives using suivantes en haut de Program.cs pour inclure les espaces de noms JobRouter.

using Azure.Communication.JobRouter;

Initialiser le client Routeur de tâches et le client d’administration

Les clients du routeur de travaux peuvent être authentifiés à l’aide de la chaîne de connexion acquise à partir d’une ressource Azure Communication Services dans le portail Azure. Nous générons à la fois un client et un client d’administration pour interagir avec le service Routeur de tâches. Le client d’administration est utilisé pour provisionner des files d’attente et des stratégies, tandis que le client est utilisé pour envoyer des travaux et inscrire des workers. Pour plus d’informations sur les chaînes de connexion, consultez Accéder à vos chaînes de connexion et points de terminaison de service à l’aide d’Azure CLI.

// Get a connection string to our Azure Communication Services resource.
var routerAdminClient = new JobRouterAdministrationClient("your_connection_string");
var routerClient = new JobRouterClient("your_connection_string");

Créer une stratégie de distribution

Le routeur de travaux utilise une stratégie de distribution pour déterminer la façon dont les Workers doivent être notifiés concernant les travaux disponibles et la durée de vie des notifications. On appelle celles-ci des offres. Créez la stratégie en spécifiant l’ID, un nom, un offerExpiresAfter et un mode de distribution.

var distributionPolicy = await routerAdminClient.CreateDistributionPolicyAsync(
    new CreateDistributionPolicyOptions(
        distributionPolicyId: "distribution-policy-1",
        offerExpiresAfter: TimeSpan.FromMinutes(1),
        mode: new LongestIdleMode())
    {
        Name = "My distribution policy"
    }
);

Créer une file d’attente

Créez la file d’attente en spécifiant un ID, un nom, puis indiquez l’ID de l’objet de stratégie de distribution que vous avez créé ci-dessus.

var queue = await routerAdminClient.CreateQueueAsync(
    new CreateQueueOptions(queueId: "queue-1", distributionPolicyId: distributionPolicy.Value.Id)
    {
        Name = "My Queue" 
    });

Soumettre un travail

Maintenant, nous pouvons soumettre une tâche directement à cette file d’attente, avec un sélecteur de collaborateur qui exige que le collaborateur ait une étiquette Some-Skill supérieure à 10.

var job = await routerClient.CreateJobAsync(
    new CreateJobOptions(jobId: "job-1", channelId: "voice", queueId: queue.Value.Id)
    {
        Priority = 1,
        RequestedWorkerSelectors =
        {
            new RouterWorkerSelector(key: "Some-Skill", labelOperator: LabelOperator.GreaterThan, value: new RouterValue(10))
        }
    });

Créez un rôle de travail

À présent, nous créons un collaborateur pour recevoir la mission de cette file d’attente, avec une étiquette Some-Skill égale à 11 et une capacité de my-channel.

var worker = await routerClient.CreateWorkerAsync(
    new CreateWorkerOptions(workerId: "worker-1", capacity: 1)
    {
        Queues = { queue.Value.Id },
        Labels = { ["Some-Skill"] = new RouterValue(11) },
        Channels = { new RouterChannel(channelId: "voice", capacityCostPerJob: 1) },
        AvailableForOffers = true
    });

Recevoir une offre

Nous devrions obtenir un RouterWorkerOfferIssued de notre abonnement Event Grid. Toutefois, nous pouvons aussi attendre quelques secondes et interroger le collaborateur directement sur l’API JobRouter pour savoir si une offre lui a été envoyée.

await Task.Delay(TimeSpan.FromSeconds(10));
worker = await routerClient.GetWorkerAsync(worker.Value.Id);
foreach (var offer in worker.Value.Offers)
{
    Console.WriteLine($"Worker {worker.Value.Id} has an active offer for job {offer.JobId}");
}

Accepter l’offre de travail

Ensuite, le worker peut accepter l’offre de travail à l’aide du SDK, qui l’affecte au worker.

var accept = await routerClient.AcceptJobOfferAsync(workerId: worker.Value.Id, offerId: worker.Value.Offers.FirstOrDefault().OfferId);
Console.WriteLine($"Worker {worker.Value.Id} is assigned job {accept.Value.JobId}");

Terminer le travail

Une fois que le worker a terminé le travail associé à la tâche (par exemple, terminé l’appel), nous complétons le travail.

await routerClient.CompleteJobAsync(new CompleteJobOptions(jobId: accept.Value.JobId, assignmentId: accept.Value.AssignmentId));
Console.WriteLine($"Worker {worker.Value.Id} has completed job {accept.Value.JobId}");

Fermer le travail

Une fois que le worker est prêt à accepter de nouveaux travaux, il doit fermer le travail. Le worker peut également fournir un code de disposition pour indiquer le résultat du travail.

await routerClient.CloseJobAsync(new CloseJobOptions(jobId: accept.Value.JobId, assignmentId: accept.Value.AssignmentId) {
    DispositionCode = "Resolved"
});
Console.WriteLine($"Worker {worker.Value.Id} has closed job {accept.Value.JobId}");

Supprimer le travail

Une fois le travail fermé, nous pouvons le supprimer afin de pouvoir le recréer avec le même identifiant si nous exécutons à nouveau cet échantillon

await routerClient.DeleteJobAsync(accept.Value.JobId);
Console.WriteLine($"Deleting job {accept.Value.JobId}");

Exécuter le code

Exécutez l’application à l’aide de dotnet run et observez les résultats.

dotnet run

Azure Communication Services - Job Router Quickstart
Worker worker-1 has an active offer for job job-1
Worker worker-1 is assigned job job-1
Worker worker-1 has completed job job-1
Worker worker-1 has closed job job-1
Deleting job job-1

Notes

L’exécution de l’application à plusieurs reprises entraîne le placement d’un nouveau travail en file d’attente à chaque fois. Ainsi, le Worker peut se voir proposer un autre travail que celui créé quand vous avez exécuté le code ci-dessus. Dans la mesure où cela peut fausser votre requête, envisagez de supprimer à chaque fois les travaux de la file d’attente. Consultez la documentation du kit SDK pour la gestion d’une file d’attente ou d’un travail.

Documentation de référence

Découvrez l’ensemble complet de fonctionnalités du Routeur de tâches Azure Communication Services en consultant la référence du kit SDK .NET ou les informations de référence de l’API REST.

Prérequis

Exemple de code

Vous pouvez consulter et télécharger l’exemple de code pour ce démarrage rapide sur GitHub.

Configuration

Créer une application web

Dans une fenêtre de terminal ou de console, créez un dossier pour votre application et accédez-y.

mkdir acs-router-quickstart && cd acs-router-quickstart

Exécutez npm init pour créer un fichier package.json avec les paramètres par défaut.

npm init -y

Créez un fichier index.js où vous ajouterez le code de ce guide de démarrage rapide.

Installer les packages

Vous devez utiliser la bibliothèque de client Routeur de tâches Azure Communication pour JavaScript version 1.0.0 ou ultérieure.

Utilisez la commande npm install pour installer les kits de développement logiciel (SDK) Communication Services pour JavaScript ci-dessous.

npm install @azure-rest/communication-job-router --save

Configurer le framework d’application

Dans le fichier index.js, ajoutez le code suivant : Nous allons ajouter le code pour le démarrage rapide dans la fonction main.

const JobRouterClient = require('@azure-rest/communication-job-router').default;

const main = async () => {
  console.log("Azure Communication Services - Job Router Quickstart")

  // Quickstart code goes here

};

main().catch((error) => {
  console.log("Encountered an error");
  console.log(error);
})

Initialiser le client du Routeur de tâches

Les clients du routeur de travaux peuvent être authentifiés à l’aide de la chaîne de connexion acquise à partir d’une ressource Azure Communication Services dans le portail Azure. Nous générons un client pour interagir avec le service Routeur de tâches. Pour plus d’informations sur les chaînes de connexion, consultez Accéder à vos chaînes de connexion et points de terminaison de service à l’aide d’Azure CLI.

Ajoutez le code suivant dans index.js dans la fonction main.

const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] ||
    "endpoint=https://<resource-name>.communication.azure.com/;<access-key>";
const client = JobRouterClient(connectionString);

Créer une stratégie de distribution

Le Routeur de tâches utilise une stratégie de distribution pour déterminer la façon dont les workers doivent être notifiés concernant les travaux disponibles et la durée de vie des notifications. On appelle celles-ci des offres. Créez la stratégie en spécifiant l’ID, un nom, un offerExpiresAfterSeconds et un mode de distribution.

const distributionPolicy = await client.path("/routing/distributionPolicies/{distributionPolicyId}", "distribution-policy-1").patch({
    body: {
        offerExpiresAfterSeconds: 60,
        mode: { kind: "longest-idle" },
        name: "My distribution policy"
    },
    contentType: "application/merge-patch+json"
});

Créer une file d’attente

Créez la file d’attente en spécifiant un ID, un nom, puis indiquez l’ID de l’objet de stratégie de distribution que vous avez créé ci-dessus.

const queue = await client.path("/routing/queues/{queueId}", "queue-1").patch({
    body: {
        name: "My Queue",
        distributionPolicyId: distributionPolicy.body.id
    },
    contentType: "application/merge-patch+json"
});

Soumettre un travail

Maintenant, nous pouvons soumettre une tâche directement à cette file d’attente, avec un sélecteur de collaborateur qui exige que le collaborateur ait une étiquette Some-Skill supérieure à 10.

const job = await client.path("/routing/jobs/{jobId}", "job-1").patch({
    body: {
        channelId: "voice",
        queueId: queue.body.id,
        priority: 1,
        requestedWorkerSelectors: [{ key: "Some-Skill", labelOperator: "greaterThan", value: 10 }]
    },
    contentType: "application/merge-patch+json"
});

Créez un rôle de travail

À présent, nous créons un collaborateur pour recevoir la mission de cette file d’attente, avec une étiquette Some-Skill égale à 11 et une capacité de my-channel.

let worker = await client.path("/routing/workers/{workerId}", "worker-1").patch({
    body:  {
        capacity: 1,
        queues: [queue.body.id],
        labels: { "Some-Skill": 11 },
        channels: [{ channelId: "voice", capacityCostPerJob: 1 }],
        availableForOffers: true
    },
    contentType: "application/merge-patch+json"
});

Recevoir une offre

Nous devrions obtenir un RouterWorkerOfferIssued de notre abonnement Event Grid. Toutefois, nous pouvons aussi attendre quelques secondes et interroger le collaborateur directement sur l’API JobRouter pour savoir si une offre lui a été envoyée.

await new Promise(r => setTimeout(r, 10000));
worker = await client.path("/routing/workers/{workerId}", worker.body.id).get();
for (const offer of worker.body.offers) {
    console.log(`Worker ${worker.body.id} has an active offer for job ${offer.jobId}`);
}

Accepter l’offre de travail

Ensuite, le worker peut accepter l’offre de travail à l’aide du SDK, qui l’affecte au worker.

const accept = await client.path("/routing/workers/{workerId}/offers/{offerId}:accept", worker.body.id, worker.body.offers[0].offerId).post();
console.log(`Worker ${worker.body.id} is assigned job ${accept.body.jobId}`);

Terminer le travail

Une fois que le worker a terminé le travail associé à la tâche (par exemple, terminé l’appel), nous complétons le travail.

await client.path("/routing/jobs/{jobId}/assignments/{assignmentId}:complete", accept.body.jobId, accept.body.assignmentId).post();
console.log(`Worker ${worker.body.id} has completed job ${accept.body.jobId}`);

Fermer le travail

Une fois que le worker est prêt à accepter de nouveaux travaux, il doit fermer le travail. Le worker peut également fournir un code de disposition pour indiquer le résultat du travail.

await client.path("/routing/jobs/{jobId}/assignments/{assignmentId}:close", accept.body.jobId, accept.body.assignmentId).post({
    body: { dispositionCode: "Resolved" }
});
console.log(`Worker ${worker.body.id} has closed job ${accept.body.jobId}`);

Supprimer le travail

Une fois le travail fermé, nous pouvons le supprimer afin de pouvoir le recréer avec le même identifiant si nous exécutons à nouveau cet échantillon

await client.path("/routing/jobs/{jobId}", accept.body.jobId).delete();
console.log(`Deleting job ${accept.body.jobId}`);

Exécuter le code

Pour exécuter le code, vérifiez que vous êtes dans le répertoire où se trouve votre fichier index.js.

node index.js

Azure Communication Services - Job Router Quickstart
Worker worker-1 has an active offer for job job-1
Worker worker-1 is assigned job job-1
Worker worker-1 has completed job job-1
Worker worker-1 has closed job job-1
Deleting job job-1

Notes

L’exécution de l’application à plusieurs reprises entraîne le placement d’un nouveau travail en file d’attente à chaque fois. Ainsi, le Worker peut se voir proposer un autre travail que celui créé quand vous avez exécuté le code ci-dessus. Dans la mesure où cela peut fausser votre requête, envisagez de supprimer à chaque fois les travaux de la file d’attente. Consultez la documentation du kit SDK pour la gestion d’une file d’attente ou d’un travail.

Documentation de référence

Découvrez l’ensemble complet de fonctionnalités du Routeur de tâches Azure Communication Services en consultant la référence du kit SDK JavaScript ou les informations de référence de l’API REST.

Prérequis

Exemple de code

Vous pouvez consulter et télécharger l’exemple de code pour ce démarrage rapide sur GitHub.

Configuration

Créer une application Python

Dans une fenêtre de terminal ou de console, créez un dossier pour votre application et accédez-y.

mkdir jobrouter-quickstart && cd jobrouter-quickstart

Installer le package

Vous devez utiliser la bibliothèque de client Routeur de tâches Azure Communication pour Python version 1.0.0 ou ultérieure.

À partir de l'invite de commandes, exécutez la commande suivante :

pip install azure-communication-jobrouter

Configurer le framework d’application

Créez un nouveau fichier appelé router-quickstart.py et ajoutez la structure de programme de base.

import time
from azure.communication.jobrouter import (
    JobRouterClient,
    JobRouterAdministrationClient
)
from azure.communication.jobrouter.models import (
    LongestIdleMode,
    RouterWorkerSelector,
    LabelOperator,
    RouterChannel,
    CloseJobOptions
)

class RouterQuickstart(object):
    print("Azure Communication Services - Job Router Quickstart")
    #Job Router method implementations goes here

if __name__ == '__main__':
    router = RouterQuickstart()

Initialiser le client Routeur de tâches et le client d’administration

Les clients du routeur de travaux peuvent être authentifiés à l’aide de la chaîne de connexion acquise à partir d’une ressource Azure Communication Services dans le portail Azure. Nous générons à la fois un client et un client d’administration pour interagir avec le service Routeur de tâches. Le client d’administration est utilisé pour provisionner des files d’attente et des stratégies, tandis que le client est utilisé pour envoyer des travaux et inscrire des workers. Pour plus d’informations sur les chaînes de connexion, consultez Accéder à vos chaînes de connexion et points de terminaison de service à l’aide d’Azure CLI.

# Get a connection string to our Azure Communication Services resource.
router_admin_client = JobRouterAdministrationClient.from_connection_string(conn_str = "your_connection_string")
router_client = JobRouterClient.from_connection_string(conn_str = "your_connection_string")

Créer une stratégie de distribution

Le routeur de travaux utilise une stratégie de distribution pour déterminer la façon dont les Workers doivent être notifiés concernant les travaux disponibles et la durée de vie des notifications. On appelle celles-ci des offres. Créez la politique en spécifiant l'identifiant distribution_policy_id, un nom, une valeur offer_expires_after_seconds et un mode de distribution.

distribution_policy = router_admin_client.upsert_distribution_policy(
    distribution_policy_id ="distribution-policy-1",
    offer_expires_after_seconds = 60,
    mode = LongestIdleMode(),
    name = "My distribution policy")

Créer une file d’attente

Créez la file d’attente en spécifiant un ID, un nom, puis indiquez l’ID de l’objet de stratégie de distribution que vous avez créé ci-dessus.

queue = router_admin_client.upsert_queue(
    queue_id = "queue-1",
    name = "My Queue",
    distribution_policy_id = distribution_policy.id)

Soumettre un travail

Maintenant, nous pouvons soumettre une tâche directement à cette file d’attente, avec un sélecteur de collaborateur qui exige que le collaborateur ait une étiquette Some-Skill supérieure à 10.

job = router_client.upsert_job(
    job_id = "job-1",
    channel_id = "voice",
    queue_id = queue.id,
    priority = 1,
    requested_worker_selectors = [
        RouterWorkerSelector(
            key = "Some-Skill",
            label_operator = LabelOperator.GREATER_THAN,
            value = 10
        )
    ])

Créez un rôle de travail

À présent, nous créons un collaborateur pour recevoir la mission de cette file d’attente, avec une étiquette Some-Skill égale à 11 et une capacité de my-channel.

worker = router_client.upsert_worker(
    worker_id = "worker-1",
    capacity = 1,
    queues = ["queue-1"],
    labels = {
        "Some-Skill": 11
    },
    channels = [RouterChannel(channel_id = "voice", capacity_cost_per_job = 1)],
    available_for_offers = True
)

Recevoir une offre

Nous devrions obtenir un RouterWorkerOfferIssued de notre abonnement Event Grid. Toutefois, nous pouvons aussi attendre quelques secondes et interroger le collaborateur directement sur l’API JobRouter pour savoir si une offre lui a été envoyée.

time.sleep(10)
worker = router_client.get_worker(worker_id = worker.id)
for offer in worker.offers:
    print(f"Worker {worker.id} has an active offer for job {offer.job_id}")

Accepter l’offre de travail

Ensuite, le worker peut accepter l’offre de travail à l’aide du SDK, qui l’affecte au worker.

accept = router_client.accept_job_offer(worker_id = worker.id, offer_id = worker.offers[0].offer_id)
print(f"Worker {worker.id} is assigned job {accept.job_id}")

Terminer le travail

Une fois que le worker a terminé le travail associé à la tâche (par exemple, terminé l’appel), nous complétons le travail.

router_client.complete_job(job_id = job.id, assignment_id = accept.assignment_id)
print(f"Worker {worker.id} has completed job {accept.job_id}")

Fermer le travail

Une fois que le worker est prêt à accepter de nouveaux travaux, il doit fermer le travail. Le worker peut également fournir un code de disposition pour indiquer le résultat du travail.

router_client.close_job(job_id = job.id, assignment_id = accept.assignment_id, options = CloseJobOptions(disposition_code = "Resolved"))
print(f"Worker {worker.id} has closed job {accept.job_id}")

Supprimer le travail

Une fois le travail fermé, nous pouvons le supprimer afin de pouvoir le recréer avec le même identifiant si nous exécutons à nouveau cet échantillon

router_client.delete_job(accept.job_id)
print(f"Deleting {accept.job_id}")

Exécuter le code

Pour exécuter le code, vérifiez que vous êtes dans le répertoire où se trouve votre fichier router-quickstart.py.

python router-quickstart.py

Azure Communication Services - Job Router Quickstart
Worker worker-1 has an active offer for job job-1
Worker worker-1 is assigned job job-1
Worker worker-1 has completed job job-1
Worker worker-1 has closed job job-1
Deleting job job-1

Notes

L’exécution de l’application à plusieurs reprises entraîne le placement d’un nouveau travail en file d’attente à chaque fois. Ainsi, le Worker peut se voir proposer un autre travail que celui créé quand vous avez exécuté le code ci-dessus. Dans la mesure où cela peut fausser votre requête, envisagez de supprimer à chaque fois les travaux de la file d’attente. Consultez la documentation du kit SDK pour la gestion d’une file d’attente ou d’un travail.

Documentation de référence

Découvrez l’ensemble complet de fonctionnalités du Routeur de tâches Azure Communication Services en consultant la référence du kit SDK Python ou les informations de référence de l’API REST.

Prérequis

Exemple de code

Vous pouvez consulter et télécharger l’exemple de code pour ce démarrage rapide sur GitHub.

Configuration

Créer une application Java

Dans une fenêtre de console (par exemple cmd, PowerShell ou Bash), utilisez la commande mvn ci-dessous pour créer une application console portant le nom router-quickstart. Cette commande crée un projet Java simple nommé « Hello World » avec un seul fichier source : App.java.

mvn archetype:generate -DgroupId=com.communication.jobrouter.quickstart -DartifactId=jobrouter-quickstart-java -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false

Inclure le package

Vous devez utiliser la bibliothèque de client Routeur de tâches Azure Communication pour Java version 1.0.0 ou ultérieure.

Inclure le fichier de nomenclature

Incluez le fichier azure-sdk-bom à votre projet pour établir une dépendance vis-à-vis de la version en disponibilité générale (GA) de la bibliothèque. Dans l’extrait de code suivant, remplacez l’espace réservé {bom_version_to_target} par le numéro de version. Pour en savoir plus sur la nomenclature, consultez le fichier Lisez-moi de la nomenclature du SDK Azure.

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.azure</groupId>
            <artifactId>azure-sdk-bom</artifactId>
            <version>{bom_version_to_target}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

Incluez ensuite la dépendance directe dans la section des dépendances sans la balise de version.

<dependencies>
  <dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-communication-jobrouter</artifactId>
  </dependency>
</dependencies>

Inclure une dépendance directe

Si vous voulez établir une dépendance vis-à-vis d’une version particulière de la bibliothèque qui n’est pas présente dans la nomenclature, ajoutez la dépendance directe à votre projet comme suit.

<dependency>
  <groupId>com.azure</groupId>
  <artifactId>azure-communication-jobrouter</artifactId>
  <version>1.0.0</version>
</dependency>

Configurer le framework d’application

Accédez au répertoire /src/main/java/com/communication/quickstart et ouvrez le fichier App.java. Ajoutez le code suivant :

package com.communication.quickstart;

import com.azure.communication.jobrouter.JobRouterAdministrationClient;
import com.azure.communication.jobrouter.JobRouterAdministrationClientBuilder;
import com.azure.communication.jobrouter.JobRouterClient;
import com.azure.communication.jobrouter.JobRouterClientBuilder;
import com.azure.communication.jobrouter.*;
import com.azure.communication.jobrouter.models.*;

import java.time.Duration;
import java.util.List;
import java.util.Map;

public class App
{
    public static void main(String[] args) throws IOException
    {
        System.out.println("Azure Communication Services - Job Router Quickstart");
        // Quickstart code goes here
    }
}

Initialiser le client Routeur de tâches et le client d’administration

Les clients du routeur de travaux peuvent être authentifiés à l’aide de la chaîne de connexion acquise à partir d’une ressource Azure Communication Services dans le portail Azure. Nous générons à la fois un client et un client d’administration pour interagir avec le service Routeur de tâches. Le client d’administration est utilisé pour provisionner des files d’attente et des stratégies, tandis que le client est utilisé pour envoyer des travaux et inscrire des workers. Pour plus d’informations sur les chaînes de connexion, consultez Accéder à vos chaînes de connexion et points de terminaison de service à l’aide d’Azure CLI.

// Get a connection string to our Azure Communication Services resource.
JobRouterAdministrationClient routerAdminClient = new JobRouterAdministrationClientBuilder().connectionString("your_connection_string").buildClient();
JobRouterClient routerClient = new JobRouterClientBuilder().connectionString("your_connection_string").buildClient();

Créer une stratégie de distribution

Le routeur de travaux utilise une stratégie de distribution pour déterminer la façon dont les Workers doivent être notifiés concernant les travaux disponibles et la durée de vie des notifications. On appelle celles-ci des offres. Créez la stratégie en spécifiant l’ID, un nom, un offerExpiresAfter et un mode de distribution.

DistributionPolicy distributionPolicy = routerAdminClient.createDistributionPolicy(
    new CreateDistributionPolicyOptions("distribution-policy-1", Duration.ofMinutes(1), new LongestIdleMode())
        .setName("My distribution policy"));

Créer une file d’attente

Créez la file d’attente en spécifiant un ID, un nom, puis indiquez l’ID de l’objet de stratégie de distribution que vous avez créé ci-dessus.

RouterQueue queue = routerAdminClient.createQueue(
    new CreateQueueOptions("queue-1", distributionPolicy.getId()).setName("My queue")
);

Soumettre un travail

Maintenant, nous pouvons soumettre une tâche directement à cette file d’attente, avec un sélecteur de collaborateur qui exige que le collaborateur ait une étiquette Some-Skill supérieure à 10.

RouterJob job = routerClient.createJob(new CreateJobOptions("job-1", "voice", queue.getId())
    .setPriority(1)
    .setRequestedWorkerSelectors(List.of(
        new RouterWorkerSelector("Some-Skill", LabelOperator.GREATER_THAN, new RouterValue(10)))));

Créez un rôle de travail

À présent, nous créons un collaborateur pour recevoir la mission de cette file d’attente, avec une étiquette Some-Skill égale à 11 et une capacité de my-channel.

RouterWorker worker = routerClient.createWorker(
    new CreateWorkerOptions("worker-1", 1)
        .setQueues(List.of(queue.getId()))
        .setLabels(Map.of("Some-Skill", new RouterValue(11)))
        .setChannels(List.of(new RouterChannel("voice", 1))));

Recevoir une offre

Nous devrions obtenir un RouterWorkerOfferIssued de notre abonnement Event Grid. Toutefois, nous pouvons aussi attendre quelques secondes et interroger le collaborateur directement sur l’API JobRouter pour savoir si une offre lui a été envoyée.

Thread.sleep(10000);
worker = routerClient.getWorker(worker.getId());
for (RouterJobOffer offer : worker.getOffers()) {
    System.out.printf("Worker %s has an active offer for job %s\n", worker.getId(), offer.getJobId());
}

Accepter l’offre de travail

Ensuite, le worker peut accepter l’offre de travail à l’aide du SDK, qui l’affecte au worker.

AcceptJobOfferResult accept = routerClient.acceptJobOffer(worker.getId(), worker.getOffers().get(0).getOfferId());
System.out.printf("Worker %s is assigned job %s\n", worker.getId(), accept.getJobId());

Terminer le travail

Une fois que le worker a terminé le travail associé à la tâche (par exemple, terminé l’appel), nous complétons le travail.

routerClient.completeJobWithResponse(accept.getJobId(), accept.getAssignmentId(), null);
System.out.printf("Worker %s has completed job %s\n", worker.getId(), accept.getJobId());

Fermer le travail

Une fois que le worker est prêt à accepter de nouveaux travaux, il doit fermer le travail.

routerClient.closeJobWithResponse(accept.getJobId(), accept.getAssignmentId(), null);
System.out.printf("Worker %s has closed job %s\n", worker.getId(), accept.getJobId());

Supprimer le travail

Une fois le travail fermé, nous pouvons le supprimer afin de pouvoir le recréer avec le même identifiant si nous exécutons à nouveau cet échantillon

routerClient.deleteJob(accept.getJobId());
System.out.printf("Deleting job %s\n", accept.getJobId());

Exécuter le code

Pour exécuter le code, accédez au répertoire qui contient le fichier pom.xml et compilez le programme.

mvn compile

Ensuite, générez le package :

mvn package

Exécutez l’application

mvn exec:java -Dexec.mainClass="com.communication.jobrouter.quickstart.App" -Dexec.cleanupDaemonThreads=false

La sortie de l’application décrit chaque action terminée :

Azure Communication Services - Job Router Quickstart
Worker worker-1 has an active offer for job job-1
Worker worker-1 is assigned job job-1
Worker worker-1 has completed job job-1
Worker worker-1 has closed job job-1
Deleting job job-1

Notes

L’exécution de l’application à plusieurs reprises entraîne le placement d’un nouveau travail en file d’attente à chaque fois. Ainsi, le Worker peut se voir proposer un autre travail que celui créé quand vous avez exécuté le code ci-dessus. Dans la mesure où cela peut fausser votre requête, envisagez de supprimer à chaque fois les travaux de la file d’attente. Consultez la documentation du kit SDK pour la gestion d’une file d’attente ou d’un travail.

Documentation de référence

Découvrez l’ensemble complet de fonctionnalités du Routeur de tâches Azure Communication Services en consultant la référence du kit SDK Java ou les informations de référence de l’API REST.

Étapes suivantes

Explorer les didacticiels de procédure du routeur de tâches