Azure Functions の Twilio バインドTwilio binding for Azure Functions

この記事では、Azure Functions の Twilio バインドを使用してテキスト メッセージを送信する方法について説明します。This article explains how to send text messages by using Twilio bindings in Azure Functions. Azure Functions は、Twilio の出力バインドをサポートします。Azure Functions supports output bindings for Twilio.

これは、Azure Functions の開発者向けリファレンス情報です。This is reference information for Azure Functions developers. Azure Functions を初めて使用する場合は、先に次のリソースを参照してください。If you're new to Azure Functions, start with the following resources:

パッケージ - Functions 1.xPackages - Functions 1.x

Twilio バインディングは Microsoft.Azure.WebJobs.Extensions.Twilio NuGet パッケージ、バージョン 1.x で提供されます。The Twilio bindings are provided in the Microsoft.Azure.WebJobs.Extensions.Twilio NuGet package, version 1.x. パッケージのソース コードは、azure-webjobs-sdk GitHub リポジトリにあります。Source code for the package is in the azure-webjobs-sdk GitHub repository.

次の表に、各開発環境でこのバインディングのサポートを追加する方法を示します。The following table tells how to add support for this binding in each development environment.

開発環境Development environment サポートを追加するバージョン:To add support in
Functions 1.xFunctions 1.x
ローカル開発 - C# クラス ライブラリLocal development - C# class library パッケージをインストールするInstall the package
ローカル開発で - C# スクリプト、JavaScript、F#Local development - C# script, JavaScript, F# 自動Automatic
Portal 開発Portal development 自動Automatic

パッケージ - Functions 2.xPackages - Functions 2.x

Twilio バインディングは Microsoft.Azure.WebJobs.Extensions.Twilio NuGet パッケージ、バージョン 3.x で提供されます。The Twilio bindings are provided in the Microsoft.Azure.WebJobs.Extensions.Twilio NuGet package, version 3.x. パッケージのソース コードは、azure-webjobs-sdk GitHub リポジトリにあります。Source code for the package is in the azure-webjobs-sdk GitHub repository.

次の表に、各開発環境でこのバインディングのサポートを追加する方法を示します。The following table tells how to add support for this binding in each development environment.

開発環境Development environment サポートを追加するバージョン:To add support in
Functions 2.xFunctions 2.x
ローカル開発 - C# クラス ライブラリLocal development - C# class library パッケージをインストールするInstall the package
ローカル開発で - C# スクリプト、JavaScript、F#、Java、PythonLocal development - C# script, JavaScript, F#, Java and Python 拡張機能を登録するRegister the extension
Portal 開発Portal development 出力バインドの追加時にインストールするInstall when adding output binding

関数アプリ プロジェクトを再発行せずにポータルで既存のバインディング拡張機能を更新する方法については、拡張機能の更新に関するページを参照してください。To learn how to update existing binding extensions in the portal without having to republish your function app project, see Update your extensions.

例 - Functions 1.xExample - Functions 1.x

言語固有の例をご覧ください。See the language-specific example:

C# の例C# example

次の例は、キュー メッセージによってトリガーされたときにテキスト メッセージを送信する C# 関数を示しています。The following example shows a C# function that sends a text message when triggered by a queue message.

[FunctionName("QueueTwilio")]
[return: TwilioSms(AccountSidSetting = "TwilioAccountSid", AuthTokenSetting = "TwilioAuthToken", From = "+1425XXXXXXX" )]
public static SMSMessage Run(
    [QueueTrigger("myqueue-items", Connection = "AzureWebJobsStorage")] JObject order,
    TraceWriter log)
{
    log.Info($"C# Queue trigger function processed: {order}");

    var message = new SMSMessage()
    {
        Body = $"Hello {order["name"]}, thanks for your order!",
        To = order["mobileNumber"].ToString()
    };

    return message;
}

この例では、メソッドの戻り値で TwilioSms 属性を使用します。This example uses the TwilioSms attribute with the method return value. 代わりに、out SMSMessage パラメーターまたは ICollector<SMSMessage> または IAsyncCollector<SMSMessage> パラメーターを持つ属性を使用することができます。An alternative is to use the attribute with an out SMSMessage parameter or an ICollector<SMSMessage> or IAsyncCollector<SMSMessage> parameter.

C# スクリプトの例C# script example

次の例は、function.json ファイルの Twilio 出力バインドと、そのバインドを使用する C# スクリプト関数を示しています。The following example shows a Twilio output binding in a function.json file and a C# script function that uses the binding. 関数は、outパラメーターを使用してテキスト メッセージを送信します。The function uses an out parameter to send a text message.

function.json ファイルのバインド データを次に示します。Here's binding data in the function.json file:

function.json の例:Example function.json:

{
  "type": "twilioSms",
  "name": "message",
  "accountSid": "TwilioAccountSid",
  "authToken": "TwilioAuthToken",
  "to": "+1704XXXXXXX",
  "from": "+1425XXXXXXX",
  "direction": "out",
  "body": "Azure Functions Testing"
}

C# スクリプト コードを次に示します。Here's C# script code:

#r "Newtonsoft.Json"
#r "Twilio.Api"

using System;
using Newtonsoft.Json;
using Twilio;

public static void Run(string myQueueItem, out SMSMessage message,  TraceWriter log)
{
    log.Info($"C# Queue trigger function processed: {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.
    dynamic order = JsonConvert.DeserializeObject(myQueueItem);
    string msg = "Hello " + order.name + ", thank you for your order.";

    // Even if you want to use a hard coded message and number in the binding, you must at least 
    // initialize the SMSMessage variable.
    message = new SMSMessage();

    // A dynamic message can be set instead of the body in the output binding. In this example, we use 
    // the order information to personalize a text message to the mobile number provided for
    // order status updates.
    message.Body = msg;
    message.To = order.mobileNumber;
}

同期コードで out パラメーターを使用することはできません。You can't use out parameters in synchronous code. 非同期 C# スクリプトのコード例を次に示します。Here's an asynchronous C# script code example:

#r "Newtonsoft.Json"
#r "Twilio.Api"

using System;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Twilio;

public static async Task Run(string myQueueItem, IAsyncCollector<SMSMessage> message,  ILogger log)
{
    log.LogInformation($"C# Queue trigger function processed: {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.
    dynamic order = JsonConvert.DeserializeObject(myQueueItem);
    string msg = "Hello " + order.name + ", thank you for your order.";

    // Even if you want to use a hard coded message and number in the binding, you must at least 
    // initialize the SMSMessage variable.
    SMSMessage smsText = new SMSMessage();

    // A dynamic message can be set instead of the body in the output binding. In this example, we use 
    // the order information to personalize a text message to the mobile number provided for
    // order status updates.
    smsText.Body = msg;
    smsText.To = order.mobileNumber;

    await message.AddAsync(smsText);
}

JavaScript の例JavaScript example

次の例は、function.json ファイルの Twilio 出力バインドと、バインドを使用する JavaScript 関数を示しています。The following example shows a Twilio output binding in a function.json file and a JavaScript function that uses the binding.

function.json ファイルのバインド データを次に示します。Here's binding data in the function.json file:

function.json の例:Example function.json:

{
  "type": "twilioSms",
  "name": "message",
  "accountSid": "TwilioAccountSid",
  "authToken": "TwilioAuthToken",
  "to": "+1704XXXXXXX",
  "from": "+1425XXXXXXX",
  "direction": "out",
  "body": "Azure Functions Testing"
}

JavaScript コードを次に示します。Here's the JavaScript code:

module.exports = 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 and number 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. In this example, we use 
    // the order information to personalize a text message to the mobile number provided for
    // order status updates.
    context.bindings.message = {
        body : msg,
        to : myQueueItem.mobileNumber
    };

    context.done();
};

例 - Functions 2.xExample - Functions 2.x

言語固有の例をご覧ください。See the language-specific example:

2.x C# の例2.x C# example

次の例は、キュー メッセージによってトリガーされたときにテキスト メッセージを送信する C# 関数を示しています。The following example shows a C# function that sends a text message when triggered by a queue message.

using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json.Linq;
using Twilio.Rest.Api.V2010.Account;
using Twilio.Types;
namespace TwilioQueueOutput
{
    public static class QueueTwilio
    {
        [FunctionName("QueueTwilio")]
        [return: TwilioSms(AccountSidSetting = "TwilioAccountSid", AuthTokenSetting = "TwilioAuthToken", From = "+1425XXXXXXX")]
        public static CreateMessageOptions Run(
        [QueueTrigger("myqueue-items", Connection = "AzureWebJobsStorage")] JObject order,
        ILogger log)
        {
            log.LogInformation($"C# Queue trigger function processed: {order}");

            var message = new CreateMessageOptions(new PhoneNumber(order["mobileNumber"].ToString()))
            {
                Body = $"Hello {order["name"]}, thanks for your order!"
            };

            return message;
        }
    }
}

この例では、メソッドの戻り値で TwilioSms 属性を使用します。This example uses the TwilioSms attribute with the method return value. 代わりに、out CreateMessageOptions パラメーターまたは ICollector<CreateMessageOptions> または IAsyncCollector<CreateMessageOptions> パラメーターを持つ属性を使用することができます。An alternative is to use the attribute with an out CreateMessageOptions parameter or an ICollector<CreateMessageOptions> or IAsyncCollector<CreateMessageOptions> parameter.

2.x C# スクリプトの例2.x C# script example

次の例は、function.json ファイルの Twilio 出力バインドと、そのバインドを使用する C# スクリプト関数を示しています。The following example shows a Twilio output binding in a function.json file and a C# script function that uses the binding. 関数は、outパラメーターを使用してテキスト メッセージを送信します。The function uses an out parameter to send a text message.

function.json ファイルのバインド データを次に示します。Here's binding data in the function.json file:

function.json の例:Example function.json:

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

C# スクリプト コードを次に示します。Here's C# script code:

#r "Newtonsoft.Json"
#r "Twilio"
#r "Microsoft.Azure.WebJobs.Extensions.Twilio"

using System;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Microsoft.Azure.WebJobs.Extensions.Twilio;
using Twilio.Rest.Api.V2010.Account;
using Twilio.Types;

public static void Run(string myQueueItem, out CreateMessageOptions message,  ILogger log)
{
    log.LogInformation($"C# Queue trigger function processed: {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.
    dynamic order = JsonConvert.DeserializeObject(myQueueItem);
    string msg = "Hello " + order.name + ", thank you for your order.";

    // You must initialize the CreateMessageOptions variable with the "To" phone number.
    message = new CreateMessageOptions(new PhoneNumber("+1704XXXXXXX"));

    // A dynamic message can be set instead of the body in the output binding. In this example, we use
    // the order information to personalize a text message.
    message.Body = msg;
}

同期コードで out パラメーターを使用することはできません。You can't use out parameters in synchronous code. 非同期 C# スクリプトのコード例を次に示します。Here's an asynchronous C# script code example:

#r "Newtonsoft.Json"
#r "Twilio"
#r "Microsoft.Azure.WebJobs.Extensions.Twilio"

using System;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Microsoft.Azure.WebJobs.Extensions.Twilio;
using Twilio.Rest.Api.V2010.Account;
using Twilio.Types;

public static async Task Run(string myQueueItem, IAsyncCollector<CreateMessageOptions> message,  ILogger log)
{
    log.LogInformation($"C# Queue trigger function processed: {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.
    dynamic order = JsonConvert.DeserializeObject(myQueueItem);
    string msg = "Hello " + order.name + ", thank you for your order.";

    // You must initialize the CreateMessageOptions variable with the "To" phone number.
    CreateMessageOptions smsText = new CreateMessageOptions(new PhoneNumber("+1704XXXXXXX"));

    // A dynamic message can be set instead of the body in the output binding. In this example, we use
    // the order information to personalize a text message.
    smsText.Body = msg;

    await message.AddAsync(smsText);
}

2.x JavaScript の例2.x JavaScript example

次の例は、function.json ファイルの Twilio 出力バインドと、バインドを使用する JavaScript 関数を示しています。The following example shows a Twilio output binding in a function.json file and a JavaScript function that uses the binding.

function.json ファイルのバインド データを次に示します。Here's binding data in the function.json file:

function.json の例:Example function.json:

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

JavaScript コードを次に示します。Here's the JavaScript code:

module.exports = 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
    };

    context.done();
};

属性Attributes

C# クラス ライブラリでは、TwilioSms 属性を使用します。In C# class libraries, use the TwilioSms attribute.

構成可能な属性プロパティについては、構成を参照してください。For information about attribute properties that you can configure, see Configuration. メソッド シグネチャでの TwilioSms 属性の例を次に示します。Here's a TwilioSms attribute example in a method signature:

[FunctionName("QueueTwilio")]
[return: TwilioSms(AccountSidSetting = "TwilioAccountSid", AuthTokenSetting = "TwilioAuthToken", From = "+1425XXXXXXX")]
public static CreateMessageOptions Run(
[QueueTrigger("myqueue-items", Connection = "AzureWebJobsStorage")] JObject order, ILogger log)
{
    ...
}

完全な例については、「C# の例」を参照してください。For a complete example, see C# example.

構成Configuration

次の表は、function.json ファイルと TwilioSms 属性で設定したバインド構成のプロパティを説明しています。The following table explains the binding configuration properties that you set in the function.json file and the TwilioSms attribute.

v1 function.json のプロパティv1 function.json property v2 function.json のプロパティv2 function.json property 属性のプロパティAttribute property 説明Description
typetype typetype twilioSms に設定する必要があります。must be set to twilioSms.
directiondirection directiondirection out に設定する必要があります。must be set to out.
namename namename Twilio SMS テキスト メッセージの関数コードで使用される変数名です。Variable name used in function code for the Twilio SMS text message.
accountSidaccountSid accountSidSettingaccountSidSetting AccountSidSettingAccountSidSetting この値には、TwilioAccountSid など、Twilio Account Sid を保持するアプリ設定の名前を指定する必要があります。This value must be set to the name of an app setting that holds your Twilio Account Sid e.g. TwilioAccountSid. 設定されていない場合、既定のアプリの設定名は"AzureWebJobsTwilioAccountSid" です。If not set, the default app setting name is "AzureWebJobsTwilioAccountSid".
authTokenauthToken authTokenSettingauthTokenSetting AuthTokenSettingAuthTokenSetting この値には、TwilioAccountAuthToken など、Twilio 認証トークンを保持するアプリ設定の名前を指定する必要があります。This value must be set to the name of an app setting that holds your Twilio authentication token e.g. TwilioAccountAuthToken. 設定されていない場合、既定のアプリの設定名は"AzureWebJobsTwilioAuthToken" です。If not set, the default app setting name is "AzureWebJobsTwilioAuthToken".
toto 該当なし - コード内の指定N/A - specify in code ToTo この値は、SMS テキストの送信先の電話番号に設定されます。This value is set to the phone number that the SMS text is sent to.
fromfrom fromfrom FromFrom この値は、SMS テキストの送信元の電話番号に設定されます。This value is set to the phone number that the SMS text is sent from.
bodybody bodybody 本文Body この値は、SMS テキスト メッセージを関数のコードで動的に設定する必要がない場合に、メッセージをハード コーディングするために使用できます。This value can be used to hard code the SMS text message if you don't need to set it dynamically in the code for your function.

ローカルで開発している場合、アプリ設定は local.settings.json ファイルに保存されます。When you're developing locally, app settings go into the local.settings.json file.

次の手順Next steps