Azure Functions の Twilio バインド

この記事では、Azure Functions の Twilio バインドを使用してテキスト メッセージを送信する方法について説明します。 Azure Functions は、Twilio の出力バインドをサポートします。

これは、Azure Functions の開発者向けリファレンス情報です。 Azure Functions を初めて使用する場合は、先に次のリソースを参照してください。

拡張機能のインストール

インストールする拡張機能 NuGet パッケージは、関数アプリで使用している C# モードによって異なります。

関数は分離された C# ワーカー プロセスで実行されます。 詳しくは、「分離ワーカー プロセスにおける C# Azure Functions の実行のガイド」をご覧ください。

拡張機能の機能性は、拡張機能のバージョンによって異なります。

現在、分離ワーカー プロセス アプリに対して Twilio はサポートされていません。

バンドルのインストール

Functions バージョン 2.x から、HTTP 拡張機能は、host.json プロジェクト ファイルで指定されている拡張バンドルの一部です。 詳細については、「拡張機能のバンドル」を参照してください。

このバージョンの拡張機能は、拡張機能バンドル バージョン 2.x を使用して関数アプリで既に使用できる必要があります。

特に指定がない限り、これらの例はバージョン 2.x 以降のバージョンの Functions ランタイムに固有です。

A C# 関数は、次の C# モードのいずれかを使用して作成できます。

  • 分離ワーカー モデル: ランタイムから分離されたワーカー プロセスで実行されるコンパイル済みの C# 関数。 分離ワーカー プロセスは、LTS および 非 LTS バージョンの .NET および .NET Framework で実行されている C# 関数をサポートするために必要です。
  • インプロセス モデル: Functions ランタイムと同じプロセスで実行されるコンパイル済みの C# 関数。
  • C# スクリプト: Azure portal で C# 関数を作成するときに主に使用されます。

現在、Twilio バインドは、分離ワーカー プロセスで実行されている関数アプリについてはサポートされていません。

次の例は、function.json ファイルの Twilio 出力バインドと、バインドを使用する JavaScript 関数を示しています。

function.json ファイルのバインド データを次に示します。

function.json の例:

{
  "type": "twilioSms",
  "name": "message",
  "accountSidSetting": "TwilioAccountSid",
  "authTokenSetting": "TwilioAuthToken",
  "from": "+1425XXXXXXX",
  "direction": "out",
  "body": "Azure Functions Testing"
}

JavaScript コードを次に示します。

module.exports = async function (context, myQueueItem) {
    context.log('Node.js queue trigger function processed work item', myQueueItem);

    // In this example the queue item is a JSON string representing an order that contains the name of a
    // customer and a mobile number to send text updates to.
    var msg = "Hello " + myQueueItem.name + ", thank you for your order.";

    // Even if you want to use a hard coded message in the binding, you must at least
    // initialize the message binding.
    context.bindings.message = {};

    // A dynamic message can be set instead of the body in the output binding. The "To" number 
    // must be specified in code. 
    context.bindings.message = {
        body : msg,
        to : myQueueItem.mobileNumber
    };
};

現在、SendGrid バインドについての PowerShell の完全な例は利用できません。

次の例では、次の function.json で定義されているように、出力バインドを使用して SMS メッセージを送信する方法を示します。

    {
      "type": "twilioSms",
      "name": "twilioMessage",
      "accountSidSetting": "TwilioAccountSID",
      "authTokenSetting": "TwilioAuthToken",
      "from": "+1XXXXXXXXXX",
      "direction": "out",
      "body": "Azure Functions Testing"
    }

シリアル化された JSON オブジェクトを func.Out パラメーターに渡して、SMS メッセージを送信できます。

import logging
import json
import azure.functions as func

def main(req: func.HttpRequest, twilioMessage: func.Out[str]) -> func.HttpResponse:

    message = req.params.get('message')
    to = req.params.get('to')

    value = {
      "body": message,
      "to": to
    }

    twilioMessage.set(json.dumps(value))

    return func.HttpResponse(f"Message sent")

次の例では、TwilioSmsOutput 注釈を使用して SMS メッセージを送信する方法を示します。 tofrom、および body の値は、プログラムによってオーバーライドされた場合でも、属性定義に必要です。

package com.function;

import java.util.*;
import com.microsoft.azure.functions.annotation.*;
import com.microsoft.azure.functions.*;

public class TwilioOutput {

    @FunctionName("TwilioOutput")
    public HttpResponseMessage run(
            @HttpTrigger(name = "req", methods = { HttpMethod.GET, HttpMethod.POST },
                authLevel = AuthorizationLevel.FUNCTION) HttpRequestMessage<Optional<String>> request,
            @TwilioSmsOutput(
                name = "twilioMessage",
                accountSid = "AzureWebJobsTwilioAccountSID",
                authToken = "AzureWebJobsTwilioAuthToken",
                to = "+1XXXXXXXXXX",
                body = "From Azure Functions",
                from = "+1XXXXXXXXXX") OutputBinding<String> twilioMessage,
            final ExecutionContext context) {

        String message = request.getQueryParameters().get("message");
        String to = request.getQueryParameters().get("to");

        StringBuilder builder = new StringBuilder()
            .append("{")
            .append("\"body\": \"%s\",")
            .append("\"to\": \"%s\"")
            .append("}");

        final String body = String.format(builder.toString(), message, to);

        twilioMessage.setValue(body);

        return request.createResponseBuilder(HttpStatus.OK).body("Message sent").build();
    }
}

属性

インプロセス分離ワーカー プロセスのどちらの C# ライブラリも、属性を使用して出力バインドを定義します。 C# スクリプトでは、代わりに function.json 構成ファイルが使用されます。

現在、Twilio バインドは、分離ワーカー プロセスで実行されている関数アプリについてはサポートされていません。

注釈

TwilioSmsOutput 注釈を使うと、次の構成値を指定することにより、Twilio 出力バインドを宣言的に構成できます。

+

TwilioSmsOutput 注釈を OutputBinding<T> パラメーターに配置します。T には、intStringbyte[]、POJO 型などの任意のネイティブ Java 型を使用できます。

構成

次の表は、function.json ファイルで設定するバインド構成プロパティの説明です。ランタイムのバージョンごとに異なります。

function.json のプロパティ 説明
type twilioSms に設定する必要があります。
direction out に設定する必要があります。
name Twilio SMS テキスト メッセージの関数コードで使用される変数名です。
accountSidSetting この値には、Twilio Account Sid (TwilioAccountSid) を保持するアプリ設定の名前を指定する必要があります。 設定されていない場合、既定のアプリの設定名は AzureWebJobsTwilioAccountSid です。
authTokenSetting この値には、Twilio 認証トークン (TwilioAccountAuthToken) を保持するアプリ設定の名前を指定する必要があります。 設定されていない場合、既定のアプリの設定名は AzureWebJobsTwilioAuthToken です。
from この値は、SMS テキストの送信元の電話番号に設定されます。
body この値は、SMS テキスト メッセージを関数のコードで動的に設定する必要がない場合に、メッセージをハード コーディングするために使用できます。

バージョン 2.x では、値 to をコードで設定します。

ローカルで開発する場合は、 コレクション内の local.settings.json ファイルにアプリケーション設定を追加します。

次のステップ