Twilio - 如何根据传入消息的正文发送短信?

Twilio - how to send an SMS based on body of incoming message?

我在我的网站上使用 Twilio PHP API。目标是让我们的游戏家族成员填写一份表格,其中包括他们的姓名和手头的问题。然后,一条文本将被发送到预定的管理员列表,这些管理员有权修复服务器。

这部分效果很好。我可以在我的网站上填写表格,它会毫无问题地发送文本。

<?php
require_once "autoload.php";
use Twilio\Rest\Client;

$AccountSid = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
$AuthToken = "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy";

$client = new Client($AccountSid, $AuthToken);

$sms = $client->account->messages->create(
  $_REQUEST["to"],
    array(
      'from' => "+zzzzzzzzzz", 
      'body' => "Help!". $_REQUEST["name"]. " says "
                . $_REQUEST["message"]."
                . Reply GOTIT to alert other techs."
    )
);

我希望管理员能够回复 "GOTIT" 以提醒其他管理员有人已经在处理该问题。当我的 Twilio 号码收到 "GOTIT" 文本时,我希望它向预定的管理员列表发送预定的 SMS(此处不需要动态)。

我已将 webhook 配置为指向我的 alert-response.php 文件(如下)。

到目前为止,我能找到的唯一 Twilio 文档是关于回复消息发件人的(我想回复指定的用户列表)
https:// www.twilio.com/docs/guides/how-to-receive-and-reply-in-php#what-is-a-webhook

有没有人给我任何起点?我已经试过了,但没有成功 (alert-response.php):

<?php

require_once "autoload.php";
use Twilio\Rest\Client;

// make an associative array of senders we know,
// indexed by phone number
$people = array(
    "+zzzzzzzzzz"=>"Tech 1",
    "+zzzzzzzzzz"=>"Tech 2",
    "+zzzzzzzzzz"=>"Tech 3",
);

// if the sender is known, then greet them by name
// otherwise, consider them just another monkey
if(!$name = $people[$_REQUEST['From']]) {
    $name = "unknown";
}

$body = $_REQUEST['body'];

if( $body == 'GOTIT' ){
    $response->message('$name GOTIT message. Reply HELP for help.');
}else if( $body == 'HELP' ){
    $response->message('$name HELP message.');
}
print $response;

基于以下两个帮助文档的科学怪人:

在此先感谢您的帮助!


已更新:

这是根据您向我展示的内容更新的alert-response.php。经过一些小的更改后,调试器中没有出现任何错误,但我也没有收到任何 SMS 回复。对此有什么想法吗?

注意:由于 wepaste.com 不再存在,因此缺少以下代码参考: (此外,我无法让 PHP 代码正确格式化,所以我实际上可以 post 它在这里,所以我想我会使用一些第三方剪贴板网站?希望是不违反规则?) http://www.wepaste.com/46258103/

看来你已经很接近答案了

当 Twilio 收到短信 (Inbound SMS) 时,它可以调用您服务器 (HTTP Request) 中的特定 URL 端点。

网页(HTTP Response)将作为回复(Outbound SMS)发回给用户的内容。因此,print $response; 打印将作为对 Inbound SMS.

作者的回复发送的消息的内容

如果您想向其他用户发送消息作为对该消息的反应,您需要添加更多代码来创建新消息。

您的 alert-response.php 既可以回复发件人也可以向其他管理员发送消息:

<?php

require_once "autoload.php";
use Twilio\Rest\Client;

// make an associative array of senders we know, indexed by phone number
$people = array(
    "+zzzzzzzzzz"=>"Tech 1",
    "+zzzzzzzzzz"=>"Tech 2",
    "+zzzzzzzzzz"=>"Tech 3",
);

// if the sender is known, then greet them by name
// otherwise, consider them just another monkey
if(!$name = $people[$_REQUEST['From']]) {
    $name = "unknown";
}

$body = $_REQUEST['body'];

if( $body == 'GOTIT' ){
    // response to admin that send GOTIT
    $response->message('Thanks for taking care of it.');

    // now creates a message to tell other admins that someone
    // is taking care of it
    $client = new Client($AccountSid, $AuthToken);
    $sms = $client->account->messages->create(
         TO,
         array(
        'from' => "+zzzzzzzzzz", 
        'body' => "Looks like $name is taking care of this server alert!"
    );
);

}else if( $body == 'HELP' ){
    // response to the admin that replied with HELP
    $response->message('Ok. I will tell others that you need help');


    // now creates a message to tell other admins that someone
    // is taking care of it
    $client = new Client($AccountSid, $AuthToken);
    $sms = $client->account->messages->create(
         TO,
         array(
        'from' => "+zzzzzzzzzz", 
        'body' => "Looks like $name needs help!!"
    );
}

// keep in mind that response is sent to the person that sent the
// SMS in first place, not to the other admins.
print $response;

这里是 Twilio 开发人员布道者。

responding to an incoming SMS message with TwiML if you use a <Message>没有属性时,响应会返回原来的号码。

但是,您也可以使用 to attribute 指示 Twilio 向其他号码发送消息。您还可以通过返回多个 <Message> 元素来发送多条消息。

将这两件事加在一起意味着您可以执行以下操作:

<?php
require_once './vendor/autoload.php';
use Twilio\Twiml;

$people = array(
    "+zzzzzzzzzz"=>"Tech 1",
    "+zzzzzzzzzz"=>"Tech 2",
    "+zzzzzzzzzz"=>"Tech 3",
);

if(!$name = $people[$_REQUEST['From']]) {
  $name = "unknown";
}

$response = new Twiml();
foreach ($people as $number => $techName) {
  $response->message('Looks like $name is taking care of this server alert!', ['to' => $number]));
}

echo $response;

如果有帮助请告诉我。