Azure 関数ルール エンジン

お客様の機能拡張モデルの一部として、Azure Communication Services Job Router では Azure 関数ベースのルール エンジンをサポートしています。 これにより、独自の Azure 関数を使用できます。 Azure Functions を使用すると、カスタムの複雑なロジックをルーティングのプロセスに組み込むできます。

Azure 関数の作成

Azure Functions を初めて使用する場合は、「Azure Functions の概要」を参照して、お気に入りのツールと言語で最初の関数を作成する方法を理解してください。

Note

Azure 関数は、HTTP トリガーを使用するように構成する必要があります。

関数に送信される HTTP 要求本文には、関係する各エンティティのラベルが含まれます。 たとえば、ジョブの優先度を決定するための関数を記述している場合、ペイロードには job キーの下にあるすべてのジョブ ラベルが含まれます。

{
    "job": {
        "label1": "foo",
        "label2": "bar",
        "urgent": true,
    }
}

次の例では、urgent ラベルの値を調べて、true であれば 10 の優先度を返します。

public static class GetPriority
{
    [FunctionName("GetPriority")]
    public static async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
        ILogger log)
    {
        var priority = 5;
        string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
        var data = JsonConvert.DeserializeObject<JObject>(requestBody);
        var isUrgent = data["job"]["urgent"].Value<bool>();
        if (isUrgent)
            priority = 10;

        return new OkObjectResult(JsonConvert.SerializeObject(priority));
    }
}

Azure 関数を使用するようにポリシーを構成する

Azure portal で、デプロイ済みの関数にアクセスし、関数の URI と認証キーを確認します。 次に、ルール エンジンを使用してその関数をポイントするポリシーを、SDK を使用して構成します。

await administrationClient.CreateClassificationPolicyAsync(
    new CreateClassificationPolicyOptions("policy-1") {
        PrioritizationRule = new FunctionRouterRule(new Uri("<insert function uri>")) {
            Credential = new FunctionRouterRuleCredential("<insert function key>")
        }});

新しいジョブが送信または更新されると、この関数が呼び出され、ジョブの優先順位が決定されます。

エラー

Azure 関数が失敗するか 200 以外のコードを返した場合、ジョブは ClassificationFailed 状態に遷移し、エラーの詳細を含む JobClassificationFailedEvent が Event Grid から返されます。

次のステップ