Отправляйте SMS нескольким подтвержденным контактам с помощью twilio

В настоящее время я использую учетную запись twilio trail. Я интегрировал Twilio в лазурном (функциональное приложение).

#r "Microsoft.Azure.ApiHub.Sdk"
#r "Newtonsoft.Json"
#r "System.Data"
#r "Twilio.Api"

using System;
using System.Configuration;
using System.Data.SqlClient;
using System.Data.Common;
using Microsoft.Azure.ApiHub;
using Newtonsoft.Json.Linq;
using Twilio;

    public static void Run(TraceWriter log, out SMSMessage smsmessage)
    {

            smsmessage = new SMSMessage();
          string phonenumber = "";
         string MessageBody = "sample message";
             using (SqlConnection conn = new SqlConnection(str))
                    {

                        conn.Open();
                    var sqlStr = "SELECT [phone] FROM [dbo].[tbl_ContactTable] where [ID] = 2";  //It returns two rows with twilio verified phone numbers

                    using (SqlCommand cmd = new SqlCommand(sqlStr, conn))
                    {

                        var dataReader = cmd.ExecuteReader();
                        if(dataReader.HasRows)
                        { 
                       while(dataReader.Read())
                        {

                            phonenumber = dataReader[0].ToString();
                                log.Info($" phonenumber {phonenumber}");

                                smsmessage.Body = MessageBody;
                                smsmessage.To = phonenumber;
                            }
                        }

                        dataReader.Close();
                    }
                    conn.Close();
                }}

В журнале отображаются два телефонных номера, но сообщение отправляется только на последний телефонный номер (номер телефона указан в последней строке). Есть ли способ перебрать номера телефонов, чтобы отправить сообщение сразу на несколько номеров.


person TheChosenOne94    schedule 02.10.2017    source источник
comment
Я не знаком с C # API. Однако я бы создал новый экземпляр SMSMessage для каждого номера телефона, а затем отправил бы его соответствующим образом. Или, если C # поддерживает клонирование, перейдите к клонированию экземпляра SMSMessage.   -  person AMartinNo1    schedule 02.10.2017
comment
Я попытался создать несколько экземпляров, но получаю сообщение об ошибке «Невозможно привязать параметр smsmessage1» к типу SMSMessage &. Убедитесь, что тип параметра поддерживается привязкой. '   -  person TheChosenOne94    schedule 02.10.2017


Ответы (3)


Согласно вашему упомянутому коду, в вашем случае в вашей лазурной функции просто есть 1. Исходя из моего опыта, если вы хотите отправить несколько сообщений, попробуйте использовать ICollector в качестве вывода. Более подробную информацию о множественных исходящих привязках можно найти в Вывод очереди образец на C #. Попробуйте использовать следующий код.

public static void Run(TraceWriter log, ICollector<SMSMessage> smsmessage) 
{
   string phonenumber = "";
   string MessageBody = "sample message";
   using (SqlConnection conn = new SqlConnection(str))
   {

        conn.Open();
        var sqlStr = "SELECT [phone] FROM [dbo].[tbl_ContactTable] where [ID] = 2";  //It returns two rows with twilio verified phone numbers

         using (SqlCommand cmd = new SqlCommand(sqlStr, conn))
         {

            var dataReader = cmd.ExecuteReader();
            if(dataReader.HasRows)
            { 
              while(dataReader.Read())
              {
                 var sms = new SMSMessage();  //changed code
                 phonenumber = dataReader[0].ToString();
                 log.Info($" phonenumber {phonenumber}");
                 sms.Body = MessageBody;
                 sms.To = phonenumber;
                 smsmessage.Add(sms); //changed oode
               }

             }

              dataReader.Close();
        }
              conn.Close();
     }
  }
person Tom Sun - MSFT    schedule 03.10.2017
comment
Привет, Том, у меня две ошибки: «Имя smsmessage не существует в текущем контексте» и «Использование неназначенного параметра smsmessages» - person TheChosenOne94; 03.10.2017
comment
После изменения кода я получаю еще две ошибки: локальный параметр или параметр с именем 'smsmessage' не может быть объявлен в этой области, потому что это имя используется во включающей локальной области для определения локального параметра или параметра --- Имя 'smsmessages' не существуют в текущем контексте - person TheChosenOne94; 03.10.2017
comment
Я предполагаю, что вы не меняете файл function.json на основе моего кода. Я снова изменил код и переименовал smsmessages в smsmessage. Мы также можем получить демонстрационный код из документа azure - Асинхронный - person Tom Sun - MSFT; 04.10.2017

Я не знаю, как разместить в Azure, но вот как я отправляю на несколько номеров в C # с помощью цикла for:

using System;
using Twilio;
using Twilio.Rest.Api.V2010.Account;
using Twilio.Types;
using TwilioSendMulti;

namespace TwilioSendMulti
{
    public class Program
    {

        static void Main(string[] args)
        {

           const string accountSid = "put account Sid Here or use class variable";

           const string authToken = "put auth Token Here or use class variable";

           string[] MultiNums = { "+1212number1", "+1212number2" };

           for (int i = 0; i < MultiNums.Length; i++)
            {
                TwilioClient.Init(accountSid, authToken);
                var message = MessageResource.Create(
                body: "Sent thru an Array in C# with Twilio!",
                from: new Twilio.Types.PhoneNumber("+1212mytwilio#"),
                to: new Twilio.Types.PhoneNumber(MultiNums[i]));
                Console.WriteLine(message.Sid);   
            }
            Console.ReadLine();
        }
    }
}
person Bob Trieste    schedule 29.12.2019

SMS - это не электронное письмо, у него может быть только один получатель на сообщение. Таким образом, вам нужно отправить столько сообщений (каждое со своим получателем), сколько у вас есть в базе данных.

person dee zg    schedule 02.10.2017
comment
Мне нужно отправить одно и то же сообщение нескольким контактам. Предоставляет ли Twilio такую ​​возможность. Возможно, с использованием массива. - person TheChosenOne94; 02.10.2017
comment
вы просто создаете массив сообщений с одинаковым телом и разными номерами получателей. - person dee zg; 02.10.2017
comment
у вас есть пример того, как это сделать? - person TheChosenOne94; 02.10.2017