次の方法で共有


Azure Functions の Twilio バインド

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

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

拡張機能のインストール

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

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

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

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

バンドルのインストール

アプリでこのバインド拡張機能を使用できるようにするには、プロジェクトのルートにある host.json ファイルに次の extensionBundle 参照が含まれていることを確認します。

{
    "version": "2.0",
    "extensionBundle": {
        "id": "Microsoft.Azure.Functions.ExtensionBundle",
        "version": "[4.0.0, 5.0.0)"
    }
}

この例では、version[4.0.0, 5.0.0)値は、少なくとも4.0.05.0.0未満のバンドル バージョン (4.x のすべての潜在的なバージョンを含む) を使用するように Functions ホストに指示します。 この表記は、v4.x 拡張機能バンドルの利用可能な最新のマイナー バージョンでアプリを効果的に維持します。

可能であれば、最新の拡張機能バンドルメジャー バージョンを使用し、ランタイムが最新のマイナー バージョンを自動的に維持できるようにする必要があります。 最新のバンドルの内容は、 拡張機能バンドルのリリース ページで確認できます。 詳細については、 Azure Functions 拡張機能バンドルに関するページを参照してください。

Example

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

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

  • 分離されたワーカー モデル: ランタイムから分離されたワーカー プロセスで実行されるコンパイル済みの C# 関数。 .NET および .NET Framework の長期サポート (LTS) および LTS 以外のバージョンで実行されている C# 関数をサポートするには、分離ワーカー プロセスが必要です。
  • インプロセス モデル: Azure 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();
    }
}

Attributes

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

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

Annotations

TwilioSmsOutput 注釈を使用すると、次の構成値を指定することで、Twilio 出力バインディングを宣言的に構成できます。

+

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

Configuration

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

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

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

ローカルで開発する場合は、 コレクションの Valuesにアプリケーション設定を追加します。

次のステップ