Как подписать несколько телефонных номеров на тему в Amazon SNS?

Amazon предоставляет приведенный ниже пример кода php для подписки номера на тему. Однако это добавляет только число один за раз.

Как я могу добавить несколько номеров ($endpoint) в одну и ту же тему? Какой код должен быть в конце?

Пример кода PHP:

<?php
// snippet-start:[sns.php.subscribe_text_sms.complete]
// snippet-start:[sns.php.subscribe_text_sms.import]
require 'vendor/autoload.php';

use Aws\Sns\SnsClient; 
use Aws\Exception\AwsException;
// snippet-end:[sns.php.subscribe_text_sms.import]

/**
 * Prepares to subscribe an endpoint by sending the endpoint a confirmation message.
 *
 * This code expects that you have AWS credentials set up per:
 * https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_credentials.html
 */
 
// snippet-start:[sns.php.subscribe_text_sms.main]
$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

$protocol = 'sms';
$endpoint = '+1XXX5550100';
$topic = 'arn:aws:sns:us-east-1:111122223333:MyTopic';

try {
    $result = $SnSclient->subscribe([
        'Protocol' => $protocol,
        'Endpoint' => $endpoint,
        'ReturnSubscriptionArn' => true,
        'TopicArn' => $topic,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
} 
// snippet-end:[sns.php.subscribe_text_sms.main]
// snippet-end:[sns.php.subscribe_text_sms.complete]
// snippet-sourcedescription:[SubscribeTextSMS.php demonstrates how to send a confirmation message as a text message.]

В объекте запроса нет коллекции, позволяющей задавать сразу несколько значений. Поэтому, основываясь на документах REF, это вызов 1-1. Вы должны вызвать подписаться на каждый номер.

smac2020 18.03.2022 00:09

@ smac2020 Я не уверен, что понимаю. Нельзя ли изменить пример кода, чтобы использовать список чисел и добавлять их по одному? Или нет похожего метода?

Hilas 18.03.2022 00:12

Нет возможности установить список номеров или любой другой набор номеров. Конечная точка — это одно строковое значение, для которого вы хотите получать уведомления.

smac2020 18.03.2022 00:17

@ smac2020 Я понимаю это. Но это так странно, что нет возможности добавить больше чисел одновременно. Я имею в виду, какая разница между тем, что я каждый раз вручную меняю файл или когда код отправляет одни и те же параметры, кроме номера телефона, блок за блоком?

Hilas 18.03.2022 00:27

Вы можете использовать цикл for и вызывать subscribe() один раз за цикл. Итак, да, ваша программа может добавить несколько подписчиков, используя несколько вызовов subscribe() API.

John Rotenstein 18.03.2022 01:00

@JohnRotenstein Хорошо, Джон! Это именно то, что я ищу. Не могли бы вы помочь мне адаптировать код? Боюсь, у меня нет для этого навыков =(

Hilas 18.03.2022 01:02

StackOverflow — это не сайт, где людей просят написать для вас код. Если вы столкнулись с проблемой конкретный, мы будем рады ответить на ваши вопросы. Главное, о чем следует подумать для этого кода — «откуда возьмутся номера телефонов»? Он может быть получен из файла или может быть передан в функцию.

John Rotenstein 18.03.2022 01:19

@JohnRotenstein Я думаю, что это обсуждаемо. Это также сайт для учащихся. Многие люди уже «написали» для меня коды, что на самом деле заставило меня многому научиться — так что я думаю, что конечная цель была достигнута. Если ты не хочешь этого делать, ничего страшного, я понимаю. Если бы вы могли хотя бы указать на аналогичный пример в Интернете или на ресурсе, это было бы очень признательно.

Hilas 18.03.2022 01:28

Использование цикла все еще не обойти, вы можете добавить только 1 конечную точку за вызов. Это все, что я пытался предложить. Удачи с кодом!

smac2020 18.03.2022 03:06

@smac2020 smac2020 Я добавил цикл foreach, и он работал нормально. Скоро выложу решение. Спасибо хоть!

Hilas 19.03.2022 04:02
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
10
30
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Решение оказалось довольно простым. Мне просто нужно было добавить список чисел (через массив) и создать цикл foreach:

<?php
// snippet-start:[sns.php.subscribe_text_sms.complete]
// snippet-start:[sns.php.subscribe_text_sms.import]
require 'vendor/autoload.php';

use Aws\Sns\SnsClient; 
use Aws\Exception\AwsException;
// snippet-end:[sns.php.subscribe_text_sms.import]

/**
 * Prepares to subscribe an endpoint by sending the endpoint a confirmation message.
 *
 * This code expects that you have AWS credentials set up per:
 * https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_credentials.html
 */
 
// snippet-start:[sns.php.subscribe_text_sms.main]
$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

$protocol = 'sms';
$endpoints = array('+1XXX5550100', '+2XXX5550100', '+3XXX5550100');
$topic = 'arn:aws:sns:us-east-1:111122223333:MyTopic';

foreach ($endpoints as $endpoint) {
    try {
        $result = $SnSclient->subscribe([
            'Protocol' => $protocol,
            'Endpoint' => $endpoint,
            'ReturnSubscriptionArn' => true,
            'TopicArn' => $topic,
        ]);
        var_dump($result);
    } catch (AwsException $e) {
        // output error message if fails
        error_log($e->getMessage());
    } 
}
// snippet-end:[sns.php.subscribe_text_sms.main]
// snippet-end:[sns.php.subscribe_text_sms.complete]
// snippet-sourcedescription:[SubscribeTextSMS.php demonstrates how to send a confirmation message as a text message.]

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