Это руководство является частью серии « Создай свой стартап с помощью PHP» на Envato Tuts +. В этой серии я проведу вас через запуск стартапа от концепции до реальности, используя мое приложение Meeting Planner в качестве примера из реальной жизни. На каждом этапе я буду публиковать код Планировщика собраний в качестве примеров с открытым исходным кодом, из которых вы можете извлечь уроки. Я также буду решать вопросы, связанные с бизнесом по мере их возникновения.
Подготовка к обмену текстовыми сообщениями
Когда вы находитесь в пути и приближается запланированное время встречи, получение полезных текстовых сообщений часто более полезно, чем напоминания по электронной почте . Я всегда знал, что текстовые (или SMS) сообщения будут играть полезную роль в Планировщике собраний.
В сегодняшнем выпуске я собираюсь рассказать вам о первой половине конфигурации SMS для приложения Meeting Planner. В основном я расскажу о выборе поставщика SMS, настройке учетной записи, создании начальной инфраструктуры приложений и пробных текстовых сообщениях.
В следующем эпизоде я добавлю конкретные сценарии текстовых сообщений в приложение Meeting Planner и проведу вас через эти решения и последующую кодировку.
Если вы еще этого не сделали, попробуйте прямо сейчас Планировщик собраний, запланировав свою первую встречу . Не стесняйтесь оставлять отзывы о вашем опыте в комментариях ниже.
Я участвую в комментариях, но вы также можете связаться со мной @reifman в Twitter. Я всегда открыт для новых идей и тематических предложений для будущих уроков.
Напоминаем, что весь код для Meeting Planner написан на Yii2 Framework для PHP. Если вы хотите узнать больше о Yii2, ознакомьтесь с моей параллельной серией Программирование с Yii2 . Чем больше я строю Планировщика встреч, тем больше меня впечатляет Yii2 и их команда добровольцев.
Выбор поставщика SMS
Самый простой способ отправлять текстовые сообщения из вашего приложения — это подписаться на услугу. Так же, как я использую Mailgun для входящей и исходящей электронной почты Планировщика собраний, мне потребуется поставщик SMS для доставки текстовых сообщений.
Два самых известных сервиса, на которые я смотрел, были Twilio и Plivo . Оба выглядели как компетентные поставщики, но у Twilio были более широкие услуги, более богатая документация и пользовательский опыт высшего уровня.
Вот скриншот со страницы продукта Twilio для SMS :
Twilio предлагает такой набор услуг, что вам нужно немного погрузиться, чтобы найти SMS:
Plivo также казался хорошим выбором, но его веб-сайт, документация и API не были такими сложными, как Twilio:
Тем не менее, Пливо намного дешевле, чем Twilio; в частности, он предлагает бесплатные входящие SMS:
Я решил пойти с Twilio для моей первоначальной реализации SMS, но для модульной функциональности, чтобы я мог легко переключить их на другого поставщика.
У меня есть некоторые опасения по поводу стоимости текстовых сообщений в Meeting Planner по мере увеличения аудитории. Буду ли я предлагать SMS бесплатно всем пользователям, даже до того, как появится поток доходов или инвесторов?
На ранней стадии альфа это не было главной заботой. Опять же, я все еще сосредоточен на предоставлении лучшего MVP, который я могу для бета-версии.
Начало работы с Twilio
Подписываясь
Зарегистрироваться в Twilio очень просто:
Как сложный поставщик услуг связи, они осуществляют проверку SMS в процессе регистрации:
Панель инструментов SMS
После проверки вы попадаете на дружественную, хорошо спроектированную панель:
Сбор наших полномочий
Сначала я получил доступ к идентификатору учетной записи и токену со страницы учетных данных API :
Я принял их к сведению для последующей интеграции с Планировщиком собраний.
Получение номера телефона
Twilio предоставляет вам номер телефона, с которого вы можете отправить SMS из своего приложения:
Я выбрал номер с кодом города Сиэтла, на котором основан планировщик собраний:
Затем, используя Twilio, я отправил свое первое тестовое сообщение:
Сообщение пришло очень быстро на мой телефон.
Думая о входящих сообщениях
Думая не только о MVP , возможность входящего сообщения была бы отличной для Meeting Planner. Например, вы можете написать, что опаздываете, или вам нужна удобная ссылка на инструкции для навигационного приложения вашего телефона. В настоящее время для этого вам нужно перейти в Интернет к приглашению на встречу.
Twilio предлагает богатый набор услуг для реагирования на входящие тексты, включая язык разметки текстовых сообщений под названием TwiML .
На данный момент я не буду сильно беспокоиться о входящих сообщениях. Тем не менее, каждый раз, когда люди пишут ваш номер Twilio, с вас взимается плата; другими словами, он готов к злоупотреблениям.
Давайте рассмотрим несколько простых способов управления затратами.
Контроллинг затрат
Для альфа и бета тестирования я ограничиваю текстовую поддержку североамериканскими телефонными номерами. Это будет держать расходы немного ниже. Twilio предлагает встроенный способ фильтрации по географии:
Twilio также предоставляет службы обмена сообщениями, которые вы можете настроить для работы определенным образом с учетом вашего приложения, включая блокировку всех SMS :
Как вы можете видеть, они также видят входящий текстовый спам и злоупотребление как слабость в общей платформе SMS (не своей), о которой они думают.
Интеграция Twilio Into Meeting Planner
Затем я хотел, чтобы основные функции SMS работали в Meeting Planner.
В поисках расширения Yii для Twilio
Оказывается, есть несколько доступных расширений для Twilio с Yii Framework. Я решил установить обертку Филипа Айдачича для YII2 для Twilio PHP SDK (GitHub), потому что его имя было самым необычным (шучу, его расширение, казалось, регулярно поддерживалось).
Я добавил расширение для composer.json. Технически это находится в режиме разработки, это работает лучше, чем прямое расширение:
1
|
«filipajdacic/yii2-twilio»: «dev-master»
|
Затем я обновил среду:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
$ composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)
— Removing ezyang/htmlpurifier (v4.7.0)
— Installing ezyang/htmlpurifier (v4.8.0)
Downloading: 100%
— Installing twilio/sdk (4.10.0)
Downloading: 100%
— Installing filipajdacic/yii2-twilio (dev-master 7d547a0)
Cloning 7d547a0a47c9864f2e8b5fb5f43748fbd24fc4b1
Writing lock file
Generating autoload files
|
Меня не слишком беспокоило его состояние разработки, потому что это относительно простое, простое расширение, которое просто активирует Twilio API.
Добавление учетных данных
Сначала я добавил ключи сверху в мои файлы инициализации:
1
2
3
4
5
|
twilio_sid = «ACxxxxXXxxxxxXXxxxXXxxxxxxxxxxxe1»
twilio_token = «d3xxxxXXxxxxxXXxxxXXxxxxxxxxxxx41»
twilio_number = «1206XXXYYYY»
# for next episode
#twilio_service_sid = «MxxxxXXxxxxxXXxxxXXxxxxxxxxxxxGf6»
|
Затем я добавил регистрацию компонента в /frontend/config/main.php:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
return [
‘id’ => ‘mp-frontend’,
‘name’ => ‘Meeting Planner’,
‘basePath’ => dirname(__DIR__),
‘bootstrap’ => [‘log’],
‘controllerNamespace’ => ‘frontend\controllers’,
‘components’ => [
…
‘Yii2Twilio’ => [
‘class’ => ‘filipajdacic\yiitwilio\YiiTwilio’,
‘account_sid’ => $config[‘twilio_sid’],
‘auth_key’ => $config[‘twilio_token’],
],
‘log’ => [
…
|
Я также нашел, что лучше всего разместить несколько переменных в общем \ config \ params-local.php для более легкого доступа через приложение:
1
2
3
4
5
6
7
|
<?php
return [
…
‘sms_number’ => ‘1206XXXYYYY’,
‘twilio_service_id’ => ‘MGXXXXXYYYYZZZZ11134446’,
‘twilio_test_number’ => ‘1-206-NNN-QQQQ’,
];
|
Построение модели СМС
Затем я построил модель Sms.php для программного использования при необходимости текстов:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
<?php
namespace common\models;
use Yii;
use yii\base\Model;
use frontend\models\UserContact;
class Sms
{
private $sms;
private $service_id;
private $mp_number;
private $test_number;
function __construct() {
$this->sms = Yii::$app->Yii2Twilio->initTwilio();
$this->mp_number = Yii::$app->params[‘sms_number’];
$this->service_id = Yii::$app->params[‘twilio_service_id’];
$this->test_number = Yii::$app->params[‘twilio_test_number’];
}
public function transmit($user_id,$body=») {
// to do — lookup usercontact to sms
// see if they have a usercontact entry that accepts sms
// transmit
$to_number = $this->test_number;
$to_number = $this->findUserNumber($user_id);
if (!$to_number)
{
return false;
}
try {
$message = $this->sms->account->messages->create(array(
«From» => $this->mp_number,
«To» => $to_number, // Text this number
‘MessagingServiceSid’ => $this->service_id,
«Body» => $body,
));
} catch (\Services_Twilio_RestException $e) {
echo $e->getMessage();
}
}
|
Первоначально findUserNumber()
был заглушкой, а findUserNumber()
отправлял тестовый номер только в params-local.php, мой личный мобильный телефон.
Вот некоторый тестовый код, который я использовал для отправки моего первого сообщения от Meeting Planner:
1
2
3
|
$user_id = 1;
$s = new \common\models\Sms();
$s->transmit($user_id,’First test from Meeting Planner codebase!’);
|
Вот результаты:
Примечание: да, я знаю, что должен зарядить свой телефон, но проблема в том, что iPhone 6 плохо работает от батареи.
Таким образом, вы получаете подписку на Twilio и реализуете основные функции.
Заглядывая вперед
В следующем выпуске мы рассмотрим фактическую интеграцию SMS с Meeting Planner. Вот несколько вопросов, которые возникнут:
- Как люди будут предоставлять свои номера телефонов для текстовых сообщений?
- Какие функции Планировщика собраний должны использовать SMS для уведомлений и доставки?
- Как люди решат, для чего они хотят получать тексты от Meeting Planner?
- Будет ли Meeting Planner обрабатывать входящие тексты и отвечать на них?
- Как я буду контролировать расходы на SMS и предотвращать злоупотребления на этапе запуска MVP?
- Что потребуется, чтобы перейти на Пливо, чтобы снизить расходы?
Как всегда, следите за новыми учебниками из серии « Построение стартапа с помощью PHP» . Как говорил бывший кандидат в президенты Дональд Трамп: «Мы собираемся побеждать, побеждаем настолько, что устанем побеждать. Вы скажете:« Пожалуйста, Джефф, прекрати побеждать ». И я скажу:« Нет, извини, успокойся, победа будет продолжаться ».
Вы уже запланировали встречу через Meeting Planner? Нет? Идти! Сделай это. Сделай это сейчас! И как всегда, дайте мне знать, что вы думаете ниже или в комментариях. Я признателен за это. Я не могу продолжать выигрывать без вашей помощи.