本教程是 Envato Tuts +上的“ 使用PHP构建启动”系列 的一部分。 在本系列文章中,我 将以 我的 Meeting Planner 应用程序作为真实示例 ,指导您完成从概念到现实的启动 。 在此过程的每一步中,我都会将Meeting Planner代码作为开放源代码示例发布,您可以从中学习。 我还将解决与启动相关的业务问题。
准备短信
当您在旅途中且安排会议时间快到时,接收有用的短信通常比电子邮件提醒更有用。 我一直都知道,文本(或SMS)消息传递将在Meeting Planner中发挥重要作用。
在今天的一集中,我将为您介绍Meeting Planner应用程序的SMS配置的前半部分。 基本上,我将介绍选择SMS提供商,设置帐户,构建初始应用程序基础结构以及试用短信的方法。
在下一个情节中,我将在Meeting Planner应用程序中构建特定的发短信方案,并引导您完成这些决定和后续的编码。
如果还没有,请立即安排您的第一次会议 ,以试用Meeting Planner。 请在下面的评论中随意发表有关您的经历的反馈。
我确实参与了评论主题,但您也可以在Twitter上与我联系@reifman 。 我总是乐于接受新功能的想法和主题建议,以供将来的教程使用。
提醒一下,Meeting Planner的所有代码都是在PHP的Yii2框架中编写的。 如果您想了解有关Yii2的更多信息,请查看我的平行系列“ 使用Yii2编程” 。 我开发会议计划者的时间越长,对Yii2及其志愿者团队的印象就越深刻。
选择短信提供商
从应用程序发送文本消息的最简单方法是订阅服务。 正如我将Mailgun用于Meeting Planner的入站和出站电子邮件一样 ,我将需要SMS提供商来传递文本消息。
我查看的两个最重要的服务是Twilio和Plivo 。 两者看起来都像是合格的提供程序,但是Twilio具有更广泛的服务,更丰富的文档和顶级的用户体验。
这是Twilio的SMS产品页面的屏幕截图:
Twilio提供了一系列的服务,您必须花一点时间才能找到SMS:
Plivo似乎也是一个不错的选择,但是它的网站,文档和API似乎不像Twilio那样复杂:
但是,Plivo比Twilio便宜得多。 具体来说,它提供免费的入站SMS:
我决定使用Twilio进行最初的SMS实施,但是将功能模块化,以便可以轻松地将其切换到其他提供商。
我确实对随着会议规模的扩大而在Meeting Planner中发短信的成本感到担忧。 我是否会在没有收入来源或投资者之前向所有用户免费提供SMS?
在早期的Alpha阶段,这不是最重要的问题。 同样,我仍然专注于为Beta版本提供最佳的MVP。
Twilio入门
报名
在Twilio中注册很容易:
作为高级通信服务提供商,他们在注册过程中实施SMS验证:
SMS仪表板
验证后,您将进入一个精心设计的友好仪表板:
收集我们的凭证
首先,我从“ API凭据”页面访问了帐户ID和令牌:
我记下了这些内容,以便以后与Meeting Planner集成。
获取电话号码
Twilio为您提供了一个电话号码,您可以从该电话号码通过应用程序发送SMS:
我选择了一个带有西雅图区号的号码,Meeting Planner就是基于该号码:
然后,我使用Twilio发送了我的第一条测试消息:
邮件很快就到达了我的手机。
关于传入消息的思考
超越MVP的考虑 ,传入消息功能对于Meeting Planner来说将非常有用。 例如,您可以发短信说您迟到或需要一个方便的链接来指向手机导航应用程序的路线。 当前,您必须单击进入会议邀请的网络。
Twilio提供了丰富的服务来响应入站文本,包括称为TwiML的文本标记语言。
目前,我不必担心入站消息。 但是,只要有人发短信给您的Twilio号码,您就需要付费; 换句话说,滥用的时机已经成熟。
让我们看一下几种简单的成本管理方法。
控制成本
对于Alpha和Beta测试,我将文本支持限制为北美电话号码。 这将使成本降低一点。 Twilio提供了一种内置的按地理位置过滤的方法:
Twilio还提供消息传递服务,您可以将其配置为以适合您的应用程序的特定方式运行,包括阻止所有SMS :
如您所见,他们还认为入站文本垃圾邮件和滥用是他们正在考虑的常规SMS平台(而非其自身)中的一个弱点。
将Twilio集成到会议计划器中
接下来,我想在Meeting Planner中运行基本的SMS功能。
查找Twilio的Yii扩展
事实证明,Yii框架为Twilio提供了几个可用的扩展。 我决定为Twilio PHP SDK(GitHub)安装FilipAjdačić的YII2包装器,因为他的名字是最不寻常的(开个玩笑,他的扩展名似乎得到了定期维护)。
我将扩展名添加到composer.json。 由于技术上处于开发模式,因此比直接要求扩展更好:
"filipajdacic/yii2-twilio": "dev-master"
然后,我更新了环境:
$ 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。
添加凭据
首先,我从上方将密钥添加到初始化文件中:
twilio_sid = "ACxxxxXXxxxxxXXxxxXXxxxxxxxxxxxe1"
twilio_token = "d3xxxxXXxxxxxXXxxxXXxxxxxxxxxxx41"
twilio_number = "1206XXXYYYY"
# for next episode
#twilio_service_sid = "MxxxxXXxxxxxXXxxxXXxxxxxxxxxxxGf6"
然后,我在/frontend/config/main.php中添加了该组件的注册:
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' => [
...
我还发现最好将一些变量放在common \ config \ params-local.php中,以便在整个应用程序中轻松访问:
<?php
return [
...
'sms_number' => '1206XXXYYYY',
'twilio_service_id' => 'MGXXXXXYYYYZZZZ11134446',
'twilio_test_number' => '1-206-NNN-QQQQ',
];
建立短信模型
然后,我建立了一个Sms.php模型以在需要文本时以编程方式使用:
<?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()
是一个存根,而send transmit()
只会发送到我的个人手机params-local.php中的测试号码。
这是一些测试代码,我用来从Meeting Planner发送第一条消息:
$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是否会处理入站文本并做出响应?
- 在启动MVP期间,我将如何控制SMS成本并防止滥用?
- 改用Plivo可以降低成本吗?
与往常一样,请继续关注“ 使用PHP构建您的启动”系列中的更多后续教程。 正如前总统候选人唐纳德·特朗普(Donald Trump)所说:“我们要赢,赢那么多,您会厌倦赢的。您会说,'拜托杰夫,别再赢了。'而我会说,'不,抱歉,请放心,我们将继续赢得胜利。”
您是否已经通过会议计划器安排了会议? 没有? 走! 做吧 现在做! 与往常一样,请让我知道您在下面或评论中的想法。 我很感激。 没有你的帮助,我无法取胜。
相关链接
- FilipAjdačić的Twilio PHP SDK的YII2包装器(GitHub)
- 会议策划人
- 关注会议计划者的资金概况
- 使用Yii2系列进行编程(Envato Tuts +)
- Yii2开发人员交流
翻译自: https://code.tutsplus.com/tutorials/building-your-startup-preparing-for-text-messaging--cms-26912