Sdílet prostřednictvím


Rychlý start: Odeslání úlohy pro řazení do fronty a směrování

Začněte se směrovačem úloh Azure Communication Services tím, že nastavíte klienta a nakonfigurujete základní funkce, jako jsou fronty, zásady, pracovní procesy a úlohy. Další informace o konceptech směrovače úloh najdete v koncepční dokumentaci ke směrovači úloh.

Požadavky

Ukázkový kód

Ukázkový kód pro tento rychlý start si můžete prohlédnout a stáhnout na GitHubu.

Nastavení

Vytvoření nové aplikace jazyka C#

V okně konzoly (například cmd, PowerShell nebo Bash) pomocí dotnet new příkazu vytvořte novou konzolovou aplikaci s názvem JobRouterQuickstart. Tento příkaz vytvoří jednoduchý projekt "Hello World" C# s jedním zdrojovým souborem: Program.cs.

dotnet new console -o JobRouterQuickstart

Změňte adresář na nově vytvořenou složku aplikace a pomocí dotnet build příkazu zkompilujte aplikaci.

cd JobRouterQuickstart
dotnet build

Nainstalujte balíček .

Nainstalujte klientskou knihovnu směrovačů komunikačních úloh Azure pro .NET pomocí NuGetu:

dotnet add package Azure.Communication.JobRouter

Pro .NET verze 1.0.0 nebo vyšší budete muset použít klientskou knihovnu směrovačů úloh Azure Communication Job Router.

Do horní části Program.cs přidejte následující using direktivy, které budou zahrnovat obory názvů JobRouter.

using Azure.Communication.JobRouter;

Inicializace klienta směrovače úloh a klienta správy

Klienti směrovače úloh se dají ověřit pomocí vašeho připojovací řetězec získaného z prostředku Azure Communication Services na webu Azure Portal. Pro interakci se službou Směrovač úloh vygenerujeme klienta i klienta pro správu. Klient pro správu se používá ke zřizování front a zásad, zatímco klient se používá k odesílání úloh a registraci pracovních procesů. Další informace o připojovací řetězec najdete v tématu access-your-connection-strings-and-service-endpoints.

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

Vytvoření zásady distribuce

Směrovač úloh pomocí distribučních zásad rozhoduje o tom, jak budou pracovníci upozorněni na dostupné úlohy a čas, kdy se budou zobrazovat oznámení, označovaná jako Nabídky. Vytvořte zásadu zadáním ID, názvu, nabídkyExpiresAfter a distribučního režimu.

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

Vytvořit frontu

Vytvořte frontu zadáním ID, názvu a zadání ID objektu zásad distribuce, které jste vytvořili výše.

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

Odeslání úlohy

Teď můžeme odeslat úlohu přímo do této fronty s selektorem pracovního procesu, který vyžaduje, aby pracovní proces měl popisek Some-Skill větší než 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))
        }
    });

Vytvoření pracovního procesu

Teď vytvoříme pracovní proces pro příjem práce z této fronty s popiskem Some-Skill rovnajícím se 11 a kapacitě 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
    });

Přijetí nabídky

Měli bychom získat RouterWorkerOfferIssud z odběru Event Gridu. Mohli bychom ale také několik sekund počkat a pak dotazovat pracovníka přímo na rozhraní JOBRouter API, abychom zjistili, jestli byla pro něj vydána nabídka.

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}");
}

Přijetí nabídky úloh

Potom může pracovní proces přijmout nabídku úlohy pomocí sady SDK, která tuto úlohu přiřadí pracovnímu procesu.

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}");

Dokončení úlohy

Jakmile pracovní proces dokončí práci přidruženou k úloze (například dokončil hovor), dokončíme úlohu.

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}");

Zavření úlohy

Jakmile je pracovní proces připravený k převzetí nových úloh, měl by pracovní proces úlohu zavřít. Volitelně může pracovník poskytnout kód dispozice, který bude indikovat výsledek úlohy.

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}");

Odstranění úlohy

Po zavření úlohy můžeme úlohu odstranit, abychom mohli znovu vytvořit úlohu se stejným ID, pokud tuto ukázku spustíme znovu.

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

Spuštění kódu

Spusťte aplikaci pomocí dotnet run a sledujte výsledky.

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

Poznámka:

Spuštění aplikace více než jednou způsobí, že se nová úloha pokaždé umístí do fronty. To může způsobit, že pracovní proces nabídne jinou úlohu než úlohu vytvořenou při spuštění výše uvedeného kódu. Vzhledem k tomu, že to může vaši žádost zkosit, zvažte odstranění úloh ve frontě pokaždé. Informace o správě fronty nebo úlohy najdete v dokumentaci k sadě SDK.

Referenční dokumentace

Přečtěte si o úplné sadě funkcí směrovače úloh Azure Communication Services z referenčních informací k sadě .NET SDK nebo referenčních informací k rozhraní REST API.

Požadavky

Ukázkový kód

Ukázkový kód pro tento rychlý start si můžete prohlédnout a stáhnout na GitHubu.

Nastavení

Vytvoření nové webové aplikace

V okně terminálu nebo konzoly vytvořte pro aplikaci novou složku a přejděte na ni.

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

Spuštěním příkazu npm init vytvořte soubor package.json s výchozím nastavením.

npm init -y

Vytvořte nový soubor index.js , do kterého přidáte kód pro tento rychlý start.

Instalace balíčků

Pro JavaScript verze 1.0.0 nebo novější budete muset použít klientskou knihovnu směrovačů úloh Azure Communication Job Router.

npm install Pomocí příkazu nainstalujte následující sady SDK komunikačních služeb pro JavaScript.

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

Nastavení architektury aplikace

index.js Do souboru přidejte následující kód. Do funkce přidáme kód pro rychlý start 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);
})

Inicializace klienta směrovače úloh

Klienti směrovače úloh se dají ověřit pomocí vašeho připojovací řetězec získaného z prostředku Azure Communication Services na webu Azure Portal. Vygenerujeme klienta pro interakci se službou Směrovač úloh. Další informace o připojovací řetězec najdete v tématu access-your-connection-strings-and-service-endpoints.

Do funkce přidejte následující kód index.js main .

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

Vytvoření zásady distribuce

Směrovač úloh používá zásady distribuce k rozhodnutí, jak budou pracovníci upozorněni na dostupné úlohy a čas, kdy se budou oznámení zobrazovat, označované jako Nabídky. Vytvořte zásadu zadáním ID, názvu, nabídkyExpiresAfterSeconds a distribučního režimu.

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"
});

Vytvořit frontu

Vytvořte frontu zadáním ID, názvu a zadání ID objektu zásad distribuce, které jste vytvořili výše.

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

Odeslání úlohy

Teď můžeme odeslat úlohu přímo do této fronty s selektorem pracovního procesu, který vyžaduje, aby pracovní proces měl popisek Some-Skill větší než 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"
});

Vytvoření pracovního procesu

Teď vytvoříme pracovní proces pro příjem práce z této fronty s popiskem Some-Skill rovnajícím se 11 a kapacitě 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"
});

Přijetí nabídky

Měli bychom získat RouterWorkerOfferIssud z odběru Event Gridu. Mohli bychom ale také několik sekund počkat a pak dotazovat pracovníka přímo na rozhraní JOBRouter API, abychom zjistili, jestli byla pro něj vydána nabídka.

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}`);
}

Přijetí nabídky úloh

Potom může pracovní proces přijmout nabídku úlohy pomocí sady SDK, která tuto úlohu přiřadí pracovnímu procesu.

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}`);

Dokončení úlohy

Jakmile pracovní proces dokončí práci přidruženou k úloze (například dokončil hovor), dokončíme úlohu.

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}`);

Zavření úlohy

Jakmile je pracovní proces připravený k převzetí nových úloh, měl by pracovní proces úlohu zavřít. Volitelně může pracovník poskytnout kód dispozice, který bude indikovat výsledek úlohy.

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}`);

Odstranění úlohy

Po zavření úlohy můžeme úlohu odstranit, abychom mohli znovu vytvořit úlohu se stejným ID, pokud tuto ukázku spustíme znovu.

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

Spuštění kódu

Pokud chcete kód spustit, ujistěte se, že jste v adresáři, kde je váš index.js soubor.

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

Poznámka:

Spuštění aplikace více než jednou způsobí, že se nová úloha pokaždé umístí do fronty. To může způsobit, že pracovní proces nabídne jinou úlohu než úlohu vytvořenou při spuštění výše uvedeného kódu. Vzhledem k tomu, že to může vaši žádost zkosit, zvažte odstranění úloh ve frontě pokaždé. Informace o správě fronty nebo úlohy najdete v dokumentaci k sadě SDK.

Referenční dokumentace

Přečtěte si o úplné sadě funkcí směrovače úloh Azure Communication Services z referenčních informací k sadě JavaScript SDK nebo referenčních informací k rozhraní REST API.

Požadavky

Ukázkový kód

Ukázkový kód pro tento rychlý start si můžete prohlédnout a stáhnout na GitHubu.

Nastavení

Vytvoření nové aplikace v Pythonu

V okně terminálu nebo konzoly vytvořte pro aplikaci novou složku a přejděte na ni.

mkdir jobrouter-quickstart && cd jobrouter-quickstart

Nainstalujte balíček .

Budete muset použít klientskou knihovnu směrovačů úloh Azure pro Python verze 1.0.0 nebo vyšší.

Z příkazového řádku konzoly spusťte následující příkaz:

pip install azure-communication-jobrouter

Nastavení architektury aplikace

Vytvořte volaný router-quickstart.py nový soubor a přidejte základní strukturu programu.

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()

Inicializace klienta směrovače úloh a klienta správy

Klienti směrovače úloh se dají ověřit pomocí vašeho připojovací řetězec získaného z prostředku Azure Communication Services na webu Azure Portal. Pro interakci se službou Směrovač úloh vygenerujeme klienta i klienta pro správu. Klient pro správu se používá ke zřizování front a zásad, zatímco klient se používá k odesílání úloh a registraci pracovních procesů. Další informace o připojovací řetězec najdete v tématu access-your-connection-strings-and-service-endpoints.

# 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")

Vytvoření zásady distribuce

Směrovač úloh pomocí distribučních zásad rozhoduje o tom, jak budou pracovníci upozorněni na dostupné úlohy a čas, kdy se budou zobrazovat oznámení, označovaná jako Nabídky. Vytvořte zásadu zadáním distribution_policy_id, názvu, hodnoty offer_expires_after_seconds a distribučního režimu.

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")

Vytvořit frontu

Vytvořte frontu zadáním ID, názvu a zadání ID objektu zásad distribuce, které jste vytvořili výše.

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

Odeslání úlohy

Teď můžeme odeslat úlohu přímo do této fronty s selektorem pracovního procesu, který vyžaduje, aby pracovní proces měl popisek Some-Skill větší než 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
        )
    ])

Vytvoření pracovního procesu

Teď vytvoříme pracovní proces pro příjem práce z této fronty s popiskem Some-Skill rovnajícím se 11 a kapacitě 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
)

Přijetí nabídky

Měli bychom získat RouterWorkerOfferIssud z odběru Event Gridu. Mohli bychom ale také několik sekund počkat a pak dotazovat pracovníka přímo na rozhraní JOBRouter API, abychom zjistili, jestli byla pro něj vydána nabídka.

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}")

Přijetí nabídky úloh

Potom může pracovní proces přijmout nabídku úlohy pomocí sady SDK, která tuto úlohu přiřadí pracovnímu procesu.

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}")

Dokončení úlohy

Jakmile pracovní proces dokončí práci přidruženou k úloze (například dokončil hovor), dokončíme úlohu.

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

Zavření úlohy

Jakmile je pracovní proces připravený k převzetí nových úloh, měl by pracovní proces úlohu zavřít. Volitelně může pracovník poskytnout kód dispozice, který bude indikovat výsledek úlohy.

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}")

Odstranění úlohy

Po zavření úlohy můžeme úlohu odstranit, abychom mohli znovu vytvořit úlohu se stejným ID, pokud tuto ukázku spustíme znovu.

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

Spuštění kódu

Pokud chcete kód spustit, ujistěte se, že jste v adresáři, kde je váš router-quickstart.py soubor.

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

Poznámka:

Spuštění aplikace více než jednou způsobí, že se nová úloha pokaždé umístí do fronty. To může způsobit, že pracovní proces nabídne jinou úlohu než úlohu vytvořenou při spuštění výše uvedeného kódu. Vzhledem k tomu, že to může vaši žádost zkosit, zvažte odstranění úloh ve frontě pokaždé. Informace o správě fronty nebo úlohy najdete v dokumentaci k sadě SDK.

Referenční dokumentace

Přečtěte si o úplné sadě funkcí směrovače úloh Azure Communication Services z referenčních informací k sadě Python SDK nebo referenčních informací k rozhraní REST API.

Požadavky

Ukázkový kód

Ukázkový kód pro tento rychlý start si můžete prohlédnout a stáhnout na GitHubu.

Nastavení

Vytvoření nové aplikace v Javě

V okně konzoly (například cmd, PowerShell nebo Bash) pomocí mvn následujícího příkazu vytvořte novou konzolovou aplikaci s názvem router-quickstart. Tento příkaz vytvoří jednoduchý projekt "Hello World" Java s jedním zdrojovým souborem: App.java.

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

Zahrnout balíček

Budete muset použít klientskou knihovnu směrovačů úloh Azure pro Javu verze 1.0.0 nebo vyšší.

Zahrnutí souboru kusovníku

azure-sdk-bom Zahrňte do projektu závislost na verzi obecné dostupnosti (GA) knihovny. V následujícím fragmentu kódu nahraďte zástupný symbol {bom_version_to_target} číslem verze. Další informace o kusovníku najdete v souboru readme kusovníku sady Azure SDK.

<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>

a vložte přímou závislost do oddílu závislostí bez značky verze.

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

Zahrnout přímou závislost

Pokud chcete závislost na konkrétní verzi knihovny, která není v kusovníku, přidejte do projektu přímou závislost následujícím způsobem.

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

Nastavení architektury aplikací

Přejděte do adresáře /src/main/java/com/communication/quickstart a otevřete App.java soubor. Přidejte následující kód:

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
    }
}

Inicializace klienta směrovače úloh a klienta správy

Klienti směrovače úloh se dají ověřit pomocí vašeho připojovací řetězec získaného z prostředku Azure Communication Services na webu Azure Portal. Pro interakci se službou Směrovač úloh vygenerujeme klienta i klienta pro správu. Klient pro správu se používá ke zřizování front a zásad, zatímco klient se používá k odesílání úloh a registraci pracovních procesů. Další informace o připojovací řetězec najdete v tématu access-your-connection-strings-and-service-endpoints.

// 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();

Vytvoření zásady distribuce

Směrovač úloh pomocí distribučních zásad rozhoduje o tom, jak budou pracovníci upozorněni na dostupné úlohy a čas, kdy se budou zobrazovat oznámení, označovaná jako Nabídky. Vytvořte zásadu zadáním ID, názvu, nabídkyExpiresAfter a distribučního režimu.

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

Vytvořit frontu

Vytvořte frontu zadáním ID, názvu a zadání ID objektu zásad distribuce, které jste vytvořili výše.

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

Odeslání úlohy

Teď můžeme odeslat úlohu přímo do této fronty s selektorem pracovního procesu, který vyžaduje, aby pracovní proces měl popisek Some-Skill větší než 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)))));

Vytvoření pracovního procesu

Teď vytvoříme pracovní proces pro příjem práce z této fronty s popiskem Some-Skill rovnajícím se 11 a kapacitě 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))));

Přijetí nabídky

Měli bychom získat RouterWorkerOfferIssud z odběru Event Gridu. Mohli bychom ale také několik sekund počkat a pak dotazovat pracovníka přímo na rozhraní JOBRouter API, abychom zjistili, jestli byla pro něj vydána nabídka.

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());
}

Přijetí nabídky úloh

Potom může pracovní proces přijmout nabídku úlohy pomocí sady SDK, která tuto úlohu přiřadí pracovnímu procesu.

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());

Dokončení úlohy

Jakmile pracovní proces dokončí práci přidruženou k úloze (například dokončil hovor), dokončíme úlohu.

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

Zavření úlohy

Jakmile je pracovní proces připravený k převzetí nových úloh, měl by pracovní proces úlohu zavřít.

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

Odstranění úlohy

Po zavření úlohy můžeme úlohu odstranit, abychom mohli znovu vytvořit úlohu se stejným ID, pokud tuto ukázku spustíme znovu.

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

Spuštění kódu

Pokud chcete kód spustit, přejděte do adresáře, který obsahuje pom.xml soubor, a zkompilujte program.

mvn compile

Pak sestavte balíček:

mvn package

Spuštění aplikace

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

Očekávaný výstup popisuje každou dokončenou akci:

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

Poznámka:

Spuštění aplikace více než jednou způsobí, že se nová úloha pokaždé umístí do fronty. To může způsobit, že pracovní proces nabídne jinou úlohu než úlohu vytvořenou při spuštění výše uvedeného kódu. Vzhledem k tomu, že to může vaši žádost zkosit, zvažte odstranění úloh ve frontě pokaždé. Informace o správě fronty nebo úlohy najdete v dokumentaci k sadě SDK.

Referenční dokumentace

Přečtěte si o úplné sadě funkcí směrovače úloh Azure Communication Services z referenčních informací k sadě Java SDK nebo z referenčních informací k rozhraní REST API.

Další kroky

Seznámení s návody ke směrovači úloh