Отправить сообщение WhatsApp в нерабочие часы FreeForm

Я использую следующий код скрипта Google Apps для отправки сообщений WhatsApp:

function sendTrial3WhatsAppMessages() {
  var accountSid = 'AC43136d9eda4f6c428fe8bf8eXXXX'; // Replace with your Account SID
  var authToken = '301cbac10a3e1749da28e98deffXXXXX'; // Replace with your Auth Token
  var messagingServiceSid = 'MG19bfda22e0254c0812b166d7XXXXX'; // Replace with your Messaging Service SID
  var templateName = 'shipment_reminder'; // Replace with your new template name

  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var today = new Date();

  for (var i = 1; i < data.length; i++) {
    var commodity = data[i][0];
    var quantity = data[i][1];
    var deadline = new Date(data[i][2]);
    var border = data[i][3];
    var phoneNumber = data[i][4];
    var optInStatus = data[i][5];

    // Skip rows where the deadline has passed or the opt-in status is not "true"
    if (today > deadline || optInStatus.toString().toLowerCase() !== 'true') {
      continue;
    }

    // Calculate the number of days left until the deadline
    var daysLeft = Math.ceil((deadline.getTime() - today.getTime()) / (1000 * 60 * 60 * 24));

    var url = 'https://api.twilio.com/2010-04-01/Accounts/' + accountSid + '/Messages.json';
    var payload = {
      'To': 'whatsapp:' + phoneNumber, // Ensure correct format
      'MessagingServiceSid': messagingServiceSid,
      'Body': `Hi there! This is to remind you of the following upcoming order required by ${deadline.toDateString()} :\n` +
              `Commodity: ${commodity}\n` +
              `Quantity: ${quantity}\n` +
              `Border: ${border}\n` +
              `Please complete purchase within ${daysLeft} days.`
    };

    var options = {
      'method': 'post',
      'payload': payload,
      'headers': {
        'Authorization': 'Basic ' + Utilities.base64Encode(accountSid + ':' + authToken)
      }
    };

    try {
      var response = UrlFetchApp.fetch(url, options);
      Logger.log('Message sent successfully. Response: ' + response.getContentText());
    } catch (e) {
      Logger.log('Error sending message: ' + e.message);
      Logger.log('Full response: ' + e);
    }
  }
}

// Set up a daily trigger to run this function
function createDailyTrigger3() {
  ScriptApp.newTrigger('sendTrial3WhatsAppMessages')
    .timeBased()
    .everyDays(1)
    .atHour(12)
    .nearMinute(30)
    .create();
}

Этот код успешно отправляет сообщение, но только после того, как получатель «согласится». Пользователь может согласиться, отправив сообщение типа «Да» или «ОК» моему отправителю WhatsApp, и это необходимо делать каждые 24 часа. Если я хочу отправить сообщение получателю без необходимости ежедневного согласия, мне нужно использовать утвержденный шаблон WhatsApp на twilio, который у меня уже есть. Я использовал имя шаблона и SID в этом коде, но сообщения по-прежнему не отправляются без согласия пользователя. Нужно ли мне вносить изменения в этот код?

Вот скриншот утвержденного шаблона:

Можете ли вы подтвердить, что шаблон был отправлен и одобрен WhatsApp? Этот шаг необходим для того, чтобы он работал. Также обратите внимание, что это не процесс добровольного согласия, и пользователи также могут отправить сообщение «нет», что приведет к тому же результату.

IObert 17.06.2024 13:21

Да, Роберт, я уверен, что шаблон одобрен, и у меня есть для него SID. Я думаю, что делаю что-то не так в своем коде.. и да, я понимаю, что какое-то текстовое сообщение должно быть отправлено на тот же номер внутри 24 часа, чтобы выдержать обмен сообщениями в произвольной форме. Но если я использую утвержденный шаблон, почему я не могу отправлять сообщения за пределами 24-часового окна?

Anushka 17.06.2024 17:33

Можете ли вы добавить в вопрос скриншот статуса шаблона? Наличие SID означает только то, что он сохранен, но ничего не говорит о статусе утверждения.

IObert 17.06.2024 18:22

Хорошо, я добавил это в пост.

Anushka 17.06.2024 18:41
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
4
110
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Кажется, вы используете неправильные параметры для отправки сообщения. Вы используете обычный API обмена сообщениями с параметром body, тогда как вам необходимо указать contentSid и, при необходимости, contentVariables, как описано здесь:

Я не знаком со сценариями приложений, но предполагаю, что код будет выглядеть примерно так:

var url = 'https://api.twilio.com/2010-04-01/Accounts/' + accountSid + '/Messages.json';
var payload = {
  'To': 'whatsapp:' + phoneNumber, // Ensure correct format
  'MessagingServiceSid': messagingServiceSid,
  'ContentSid': 'HXXXXXXXXX',
  'ContentVariables':  JSON.stringify({
       1: commodity,
       2: quantity,
       3: border
     }),
};

Спасибо за помощь. Кажется, проблема была в ContentVariables, а также в формате даты. Сейчас это работает.

Anushka 18.06.2024 15:35

Отлично, отметьте этот ответ как правильный зеленой галочкой.

IObert 18.06.2024 16:01

Другие вопросы по теме