Aracılığıyla paylaş


JavaScript için Azure İletişim Hizmetleri (ACS) İş Yönlendirici SDK'sı

Bu paket, Azure İletişim Hizmetleri (ACS) İş Yönlendirici hizmeti için JavaScript SDK'sını içerir.

Başlarken

Önemli Kavramlar

İş Yönlendiricisi'nin daha iyi anlaşılması için İş Yönlendiricisi temel kavramları belgelerimize bakın.

Önkoşullar

Yükleme

npm install @azure/communication-job-router

Tarayıcı desteği

Bir web sitesinde Azure SDK kitaplıklarını kullanmak için kodunuzu tarayıcı içinde çalışacak şekilde dönüştürmeniz gerekir. Bunu paketleyici adlı bir araç kullanarak yaparsınız. Paketlemeyi daha iyi anlamak için paketleme belgelerimize bakın.

Öğretici: Azure İletişim Hizmetleri (ACS) İş Yönlendirici SDK'sını kullanarak işleri çalışanlara yönlendirme

Bu öğreticide şunları öğreneceksiniz:

  • Kuyruk oluşturma.
  • Çalışan oluşturma ve bir kuyruğa atama.
  • İşleri çalışanlara yönlendirme.
  • İş Yönlendiricisi olaylarına abone olma ve olayları işleme.
  • İşleri tamamlama ve kapatma.

Ayarlama

(İsteğe bağlı) IDE yükleme

VSCode veya Webstorm gibi bir IDE yükleyin.

NodeJS'yi yükleme

NodeJS'yi yükleyin.

NodeJS Express sunucusu başlatma

Bir kabukta (cmd, PowerShell, Bash vb.), adlı bir klasör RouterQuickStart oluşturun ve bu klasörün içinde komutunu yürütür npx express-generator. Bu, üzerinde port 3000dinleyecek basit bir Express projesi oluşturur.

Örnek

mkdir RouterQuickStart
cd RouterQuickStart
npx express-generator
npm install
DEBUG=routerquickstart:* npm start

ACS Kaynağınız Var

Azure Portal'da bir ACS kaynağı oluşturun veya mevcut bir kaynağı kullanın.

Azure ACS İş YönlendiriciSI SDK'sını yükleme

RouterQuickStart klasöründe, yürüterek ACS İş Yönlendirici SDK'sını npm install @azure/communication-job-router --saveyükleyin.

Yönlendirme İşleri

İş Yönlendirici İstemcileri Oluşturma

İlk olarak ve jobRouterAdministrationClientjobRouterClientoluşturmamız gerekir.

  • jobRouterAdministrationClient Sınıflandırma İlkeleri, Dağıtım İlkeleri, Özel Durum İlkeleri ve Kuyruklar için yöntemler sağlar.
  • jobRouterClient İşler ve Çalışanlar için yöntemler sağlar.
const {
  JobRouterClient,
  JobRouterAdministrationClient,
} = require("@azure/communication-job-router");

const acsConnectionString =
  "endpoint=https://<YOUR_ACS>.communication.azure.com/;accesskey=<YOUR_ACCESS_KEY>";
const jobRouterClient = new JobRouterClient(acsConnectionString);
const jobRouterAdministrationClient = new JobRouterAdministrationClient(acsConnectionString);

Dağıtım İlkesi Oluşturma

Bu ilke, işler kuyruklarından dağıtıldığında hangi çalışanların iş tekliflerini alacağını belirler.

const distributionPolicy = await jobRouterAdministrationClient.createDistributionPolicy(
  "default-distribution-policy-id",
  {
    name: "Default Distribution Policy",
    offerExpiresAfterSeconds: 30,
    mode: {
      objectType: "longest-idle",
      minConcurrentOffers: 1,
      maxConcurrentOffers: 3,
    },
  }
);

Sınıflandırma İlkesi Oluşturma

Bu ilke, oluşturma sırasında işleri sınıflandırır.

const classificationPolicy = await jobRouterAdministrationClient.createClassificationPolicy("default-classification-policy-id", {
  name: "Default Classification Policy",
  fallbackQueueId: salesQueueResponse.Id,
  queueSelectors: [{
    kind: "static",
    labelSelector: { key: "department", labelOperator: "equal", value: "xbox" }
  }],
  workerSelectors: [{
    kind: "static",
    labelSelector: { key: "english", labelOperator: "greaterThan", value: 5 }
  }],
  prioritizationRule: {
    kind: "expression-rule",
    language: "powerFx";
    expression: "If(job.department = \"xbox\", 2, 1)"
  }
});

Kuyruk oluşturma

Bu kuyruk, daha önce oluşturulmuş dağıtım ilkemize göre çalışanlara işler sunar.

const salesQueueResponse = await jobRouterAdministrationClient.createQueue("sales-queue-id", {
  name: "Sales",
  distributionPolicyId: distributionPolicy.Id,
  labels: {
    department: "xbox",
  },
});

Çalışan Oluşturma

Bu çalışanlar daha önce oluşturulan "Satış" kuyruğumuza atanır ve bazı etiketlere sahiptir.

  • true ayarıavailableForOffers, bu çalışanların iş tekliflerini kabul etmeye hazır olduğu anlamına gelir.
  • etiketleri ve etiket seçicileri daha iyi anlamak için etiketler belgelerimize bakın.
  // Create worker "Alice".
  const workerAliceId = "773accfb-476e-42f9-a202-b211b41a4ea4";
  const workerAliceResponse = await jobRouterClient.createWorker(workerAliceId, {
    totalCapacity: 120,
    labels: {
      Xbox: 5,
      german: 4
      name: "Alice",
    },
    queueAssignments: { [salesQueueResponse.Id]: {} },
    availableForOffers: true
  });

// Create worker "Bob".
const workerBobId = "21837c88-6967-4078-86b9-1207821a8392";
const workerBobResponse = await jobRouterClient.createWorker(workerBobId, {
  totalCapacity: 100,
  labels: {
    xbox: 5,
    english: 3
    name: "Bob"
  },
  queueAssignments: { [salesQueueResponse]: {} },
  availableForOffers: true
});

İş Yaşam Döngüsü

bir işin yaşam döngüsünü daha iyi anlamak için iş yaşam döngüsü belgelerimize bakın .

İş Oluşturma

Bu iş, daha önce oluşturulmuş "Satışlar" kuyruğumuzda sıralanır.

const job = await jobRouterClient.createJob("job-id", {
  // e.g. callId or chat threadId
  channelReference: "66e4362e-aad5-4d71-bb51-448672ebf492",
  channelId: "voice",
  priority: 2,
  queueId: salesQueueResponse.Id,
});

(İsteğe bağlı) Sınıflandırma İlkesi ile İş Oluşturma

Bu iş, daha önce oluşturulmuş sınıflandırma ilkemizle sınıflandırılır. Ayrıca bir etiketi vardır.

const classificationJob = await JobRouterClient.createJob("classification-job-id", {
  // e.g. callId or chat threadId
  channelReference: "66e4362e-aad5-4d71-bb51-448672ebf492",
  channelId: "voice",
  classificationPolicyId: classificationPolicy.Id,
  labels: {
    department: "xbox",
  },
});

Ekinlikler

İş Yönlendiricisi olayları Azure Event Grid aracılığıyla teslim edilir. Azure Event Grid daha iyi anlamak için Azure Event Grid belgelerimize bakın.

Önceki örnekte:

  • İş "Satış" kuyruğuna sıralanır.
  • İşi işlemek için bir çalışan seçilir, bu çalışana bir iş teklifi verilir ve Azure Event Grid aracılığıyla bir RouterWorkerOfferIssued olay gönderilir.

Örnek RouterWorkerOfferIssued JSON şekli:

{
  "id": "1027db4a-17fe-4a7f-ae67-276c3120a29f",
  "topic": "/subscriptions/{subscription-id}/resourceGroups/{group-name}/providers/Microsoft.Communication/communicationServices/{communication-services-resource-name}",
  "subject": "worker/{worker-id}/job/{job-id}",
  "data": {
    "workerId": "w100",
    "jobId": "7f1df17b-570b-4ae5-9cf5-fe6ff64cc712",
    "channelReference": "test-abc",
    "channelId": "FooVoiceChannelId",
    "queueId": "625fec06-ab81-4e60-b780-f364ed96ade1",
    "offerId": "525fec06-ab81-4e60-b780-f364ed96ade1",
    "offerTimeUtc": "2023-08-17T02:43:30.3847144Z",
    "expiryTimeUtc": "2023-08-17T02:44:30.3847674Z",
    "jobPriority": 5,
    "jobLabels": {
      "Locale": "en-us",
      "Segment": "Enterprise",
      "Token": "FooToken"
    },
    "jobTags": {
      "Locale": "en-us",
      "Segment": "Enterprise",
      "Token": "FooToken"
    }
  },
  "eventType": "Microsoft.Communication.RouterWorkerOfferIssued",
  "dataVersion": "1.0",
  "metadataVersion": "1",
  "eventTime": "2023-08-17T00:55:25.1736293Z"
}

Olaylara Abone Olma

ACS İş Yönlendiricisi olaylarına abone olma yollarından biri Azure Portal'ı kullanmaktır.

  1. Azure Portalı'nda ACS kaynağınıza gidin ve "Olaylar" dikey penceresini açın.
  2. "RouterWorkerOfferIssued" olayı için bir olay aboneliği ekleyin.
  3. Olayı almak için uygun bir araç seçin (örn. Web kancası, Azure İşlevleri, Service Bus).

İş Yönlendiricisi olaylarına abone olmayı daha iyi anlamak için "İş Yönlendiricisi olaylarına abone olma" belgelerimize bakın.

NodeJS uygulamanızda olayları alan yol şuna benzer olabilir:

app.post('/event', (req, res) => {
    req.body.forEach(eventGridEvent => {
        // Deserialize the event data into the appropriate type
        if (eventGridEvent.eventType === "Microsoft.EventGrid.SubscriptionValidationEvent") {
            res.send({ validationResponse: eventGridEvent.data.validationCode };
        } else if (eventGridEvent.eventType === "Microsoft.Azure.CommunicationServices.RouterWorkerOfferIssued") {
           // RouterWorkerOfferIssued handling logic;
        } else if ...
    });
    ...
});

İş Teklifini Kabul Etme veya Reddetme

Bir RouterWorkerOfferIssued etkinlik aldıktan sonra iş teklifini kabul edebilir veya reddedebilirsiniz.

  • workerid - İş teklifini kabul eden çalışanın kimliği.
  • offerId - Kabul edilen veya reddedilen teklifin kimliği.
const acceptResponse = await jobRouterClient.acceptJobOffer(workerId, offerId);
// or
const declineResponse = await jobRouterClient.declineJobOffer(workerId, offerId);

İşi Tamamlama

İşi assignmentId tamamlamak için önceki adımın yanıtından alınan gereklidir.

await jobRouterClient.completeJob(jobId, assignmentId);

İşi Kapatma

Çalışan işin sarmalama aşamasını tamamladıktan sonra işi jobRouterClient kapatabilir ve ileride başvurmak üzere buna bir değerlendirme kodu ekleyebilir.

await jobRouterClient.closeJob(jobId, assignmentId, { dispositionCode: "Resolved" });

Sonraki adımlar

Bu SDK'nın kullanımıyla ilgili ek ayrıntılı örnekler için samples dizinine göz atın.

Katkıda bulunma

Bu SDK'ya katkıda bulunmak isterseniz, kodu derleme ve test etme hakkında daha fazla bilgi edinmek için lütfen katkıda bulunma kılavuzunu okuyun.